m******j 发帖数: 326 | 1 我现在有一个程序,两个网卡interface
我现在想让这个程序的traffic仅仅从指定的网卡通过,如何作?
也就是说我有程序 XXX
两个网卡 eth0 eth1,我想让所有xxx的都从eth1走,应当如何作?谢谢 |
m********o 发帖数: 129 | 2 简单的做法,指定两个网卡的ip地址,然后socket中指定对应的ip地址即可。。
或者绑定指定的网卡到socket。。实现可能比较复杂一些
【在 m******j 的大作中提到】 : 我现在有一个程序,两个网卡interface : 我现在想让这个程序的traffic仅仅从指定的网卡通过,如何作? : 也就是说我有程序 XXX : 两个网卡 eth0 eth1,我想让所有xxx的都从eth1走,应当如何作?谢谢
|
m******j 发帖数: 326 | 3 如何作?给个提示
【在 m********o 的大作中提到】 : 简单的做法,指定两个网卡的ip地址,然后socket中指定对应的ip地址即可。。 : 或者绑定指定的网卡到socket。。实现可能比较复杂一些
|
J*******i 发帖数: 2162 | 4 假设你的程序用Berkeley Socket
用:
int bind(SOCKET socket, const struct sockaddr * addr, int * addrlen);
把你的socket梆定到你那个指定网卡的IP
然后用iptables设定根据source address来发到不同网卡的rule
具体参见
http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch14_:_Linux_Firewalls_Using_iptables |
m********o 发帖数: 129 | 5 or 枚举网卡,获取网卡ifindex,然后同样调用bind()
可以参考pcap的实现,pcap_open()的网卡指定也是这样做的,可以跟一下源码
【在 J*******i 的大作中提到】 : 假设你的程序用Berkeley Socket : 用: : int bind(SOCKET socket, const struct sockaddr * addr, int * addrlen); : 把你的socket梆定到你那个指定网卡的IP : 然后用iptables设定根据source address来发到不同网卡的rule : 具体参见 : http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch14_:_Linux_Firewalls_Using_iptables
|
m******j 发帖数: 326 | 6 我的程序是binary的,怎末半?
【在 J*******i 的大作中提到】 : 假设你的程序用Berkeley Socket : 用: : int bind(SOCKET socket, const struct sockaddr * addr, int * addrlen); : 把你的socket梆定到你那个指定网卡的IP : 然后用iptables设定根据source address来发到不同网卡的rule : 具体参见 : http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch14_:_Linux_Firewalls_Using_iptables
|
J*******i 发帖数: 2162 | 7 那你这个程序的traffic是不是有特定的目的地址?
是的话在ip route里把所有到这个IP的都从那个网卡发出就好了 |
z**r 发帖数: 17771 | 8 你得吧traffic pattern说得详细些,这样问太笼统
【在 m******j 的大作中提到】 : 我现在有一个程序,两个网卡interface : 我现在想让这个程序的traffic仅仅从指定的网卡通过,如何作? : 也就是说我有程序 XXX : 两个网卡 eth0 eth1,我想让所有xxx的都从eth1走,应当如何作?谢谢
|
B*********s 发帖数: 292 | 9 你的问题很不清楚。
有一个解决方法,是把eth0 disable掉。 |
p*****s 发帖数: 344 | 10 在虚拟环境中运行XXX,这个虚拟环境只有一个虚拟网卡 |