现在有一个两块网卡的电脑,我想让一个程序使用有线网卡访问网络,但是他一直通过无线网卡连接,用什么办法可以做到不让这个程序使用指定的网卡?
使用的发行版是ubuntu,两块网卡都是可以访问外网的,而且确实需要两块网卡都访问外网,所以不能简单的禁用某一块网卡。
eth0 Link encap:以太网 硬件地址 ac:16:2d:0b:0f:7b
inet6 地址: 2001:250:1006:5090:ae16:2dff:fe0b:f7b/64 Scope:Global
inet6 地址: fe80::ae16:2dff:fe0b:f7b/64 Scope:Link
inet6 地址: 2001:250:1006:5090:5125:3dce:2e39:3435/64 Scope:Global
inet6 地址: 2001:250:1006:5090:3986:8f63:3bc4:ed62/64 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 跃点数:1
接收数据包:689138 错误:5 丢弃:96 过载:0 帧数:3
发送数据包:70167 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:1000
接收字节:96407419 (96.4 MB) 发送字节:12030321 (12.0 MB)
中断:20 Memory:fb100000-fb120000
eth0:avahi Link encap:以太网 硬件地址 ac:16:2d:0b:0f:7b
inet 地址:169.254.4.53 广播:169.254.255.255 掩码:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 跃点数:1
中断:20 Memory:fb100000-fb120000
lo Link encap:本地环回
inet 地址:127.0.0.1 掩码:255.0.0.0
inet6 地址: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 跃点数:1
接收数据包:18101 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:18101 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:0
接收字节:1755000 (1.7 MB) 发送字节:1755000 (1.7 MB)
virbr0 Link encap:以太网 硬件地址 26:cd:4d:24:53:90
inet 地址:192.168.122.1 广播:192.168.122.255 掩码:255.255.255.0
UP BROADCAST MULTICAST MTU:1500 跃点数:1
接收数据包:0 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:0 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:0
接收字节:0 (0.0 B) 发送字节:0 (0.0 B)
wlan0 Link encap:以太网 硬件地址 00:1d:0f:31:49:9c
inet 地址:192.168.1.102 广播:192.168.1.255 掩码:255.255.255.0
inet6 地址: fe80::21d:fff:fe31:499c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 跃点数:1
接收数据包:544819 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:305276 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:1000
接收字节:481549142 (481.5 MB) 发送字节:54082231 (54.0 MB)
这个程序用 TCP/IP 协议和外部通信时, 用哪个网卡, 服务端的话是由 bind() 的参数决定的. 你可以把套接字绑定到你指定的 ip 地址和端口上. 如果你的 IP 地址指定的是 htonl(INADDR_ANY), 就由内核去选择 IP 地址. 如果你有这个程序的源码的话, 你可以通过自己指定套接字绑定的 IP 地址来实现你的需求. 如果是客户端, connect() 前一般不调用 bind(), 由内核确定使用哪块网卡. 内核如何选择网卡, 是由你的程序连接的目的地址和路由表决定的. linux 下, 你可以通过 route 等工具配置哪些地址段使用哪个网卡, 这并不是为一个程序所指定的, 而是对每一个连接都生效的. 具体你可以搜索下多网卡的路由配置方法.