为Linux特定程序绑定特定IP与端口
用途很明确的一个小工具,标题就说了,这个可以在不修改程序本身任何配置文件的情况下将其绑定到另外的端口或者是IP地址。
介绍
基于 LD_PRELOAD 机制,可以作用于:
已有的网络程序客户端 /服务器程序,比如nc,curl,wget,nginx等
使用 Java 、 Python 等语言编写的网络 Server 或客户端 Client 程序
特性如下:
- 绑定制定 IP 地址和端口
- 添加 SO_REUSEADDR 特性支持
- 添加 SO_REUSEPORT 特性支持
- 添加 IP_TRANSPARENT 特性支持
安装
也没什么特别的,简单易用,直接编译一把梭
1 | git clone https://github.com/yongboy/bindp.git |
老铁千万别 make install
了啊,这东西编译出来是个静态库 libindp.so
文件,只需要在使用时预载就行。
这个和tsocks的原理其实比较像,都是通过LD_PRELOAD来劫持实现功能的。
使用
- 假设本地多个可用 IP 地址包含
10.10.10.10
,并且假设端口49999
没被占用,那么我们可以在作为客户端访问远程服务器时进行制定 IP 地址和端口:1
REUSE_PORT=1 BIND_ADDR="10.10.10.10" BIND_PORT=49999 LD_PRELOAD=/your/path/to/libindp.so nc 10.10.10.11 80
- 假设 Nginx 配置监听 80 端口,不想修改配置文件的话而使之监听 9090 端口,可以使用
1
BIND_PORT=9090 LD_PRELOAD=/your/path/to/libindp.so /usr/sbin/nginx -c /etc/nginx/nginx.conf
为Linux特定程序绑定特定IP与端口