拥有多个IP地址,build立连接到外部世界时,是否可以使一个任意的networking应用只使用特定的IP地址?
系统范围内,可以使用路由。 一些应用程序可以为此configuration。 但是有没有一个通用的方法?
假设浏览器应该总是使用绑定到'eth0'的IP,并且一个torrent-client应该使用绑定到'eth1'的IP。
从技术上讲 ,这应该显式传递一个特定的IP地址来bind(2)
调用时创build一个客户端套接字。
您可以利用LD_PRELOAD环境variables和“函数插入”来修改networking程序的行为。 有关更多信息,请参阅本文中的示例和Google 函数中介 。
例如,您可以重写“套接字”系统调用,以便每个套接字()调用都紧跟着一个适当的bind()操作。
注意:这种技巧可以带来很多乐趣(例如,我曾经写过一些让我“打开”url以便用任意的文本编辑器进行编辑的东西),但是要正确地使用它们可能会非常棘手。
我唯一的build议是利用iptables将stream量从一个接口redirect到另一个接口。
这里有一个链接给别人谁做了类似的东西: http : //straylink.wordpress.com/2006/08/16/using-iptables-to-redirect-packets/
基本上,命令是这样的:
iptables -t nat -A PREROUTING -p tcp -d 198.168.1.254 --dport 80 -j REDIRECT --to-ports 8080
要完全窃取内容(万一它消失),
上面的规则添加了一个PREROUTING命令到你的nat表中,说明在80端口上发往192.168.1.254的任何TCP数据包应该被redirect到本地端口8080.所以把上面的例子分解成模板格式,
iptables -t nat -A PREROUTING -p PROTO -d DEST_IP --dport DEST_PORT -j REDIRECT --to-ports LOCAL_PORTS