通过SO_BINDTODEVICE实现interface绑定

来源:互联网 发布:linux apache php7 编辑:程序博客网 时间:2024/04/30 05:58
一般服务器端程序会通过socket => bind => listen来监听一个特定的端口,但通常绑定的地址是INADDR_ANY, 这样只要是请求连接到当前主机端口的或者是发送到当前主机端口的数据包都会被接受,当然了,你可以绑定一个特定的ip地址,这样server端只会接受指定IP的数据包,不过有的时候这个也不是你想要的,比如你想让server可以接受指定interface(eth8)的数据包,既接受IP = 172.16.8.87又接受VIP = 172.16.8.187 的数据包(ifconfig eth0 172.16.8.187 netmask 255.255.255.0 broadcast 172.16.8.255 up )。{perl 实现eth8绑定}# SO_BINDTODEVICE = 25, bind to device eth8setsockopt($lsock, SOL_SOCKET, 25, pack("Z*","eth8"));