我有 3 个网卡,1 个 LAN(有线),1 个无线网卡和 1 个无线 USB
我如何从特定网卡执行 ping 操作?
&我如何将特定网卡用于特定应用程序
例子
i want to ping google from wlan1
具体应用示例
i want to use firefox or transmission from wan1
Lan ip 192.168.0.2 > 工作正常 pin -I wlan1 google.com
route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0
172.16.221.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet8
192.168.0.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 2 0 0 wlan1
192.168.48.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet1
一个@onezero:~$ip路由
default via 192.168.0.1 dev eth0 proto static
169.254.0.0/16 dev eth0 scope link metric 1000
172.16.221.0/24 dev vmnet8 proto kernel scope link src 172.16.221.1
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.2 metric 1
192.168.0.0/24 dev wlan1 proto kernel scope link src 192.168.0.3 metric 2
192.168.48.0/24 dev vmnet1 proto kernel scope link src 192.168.48.1
@哈立德
one@onezero:~$ ping -S 192.168.0.2 hotmail.com
PING hotmail.com (65.55.72.135) 56(84) bytes of data.
64 bytes from origin.sn131w.snt131.mail.live.com (65.55.72.135): icmp_req=1 ttl=236 time=391 ms
64 bytes from origin.sn131w.snt131.mail.live.com (65.55.72.135): icmp_req=2 ttl=236 time=296 ms
64 bytes from origin.sn131w.snt131.mail.live.com (65.55.72.135): icmp_req=3 ttl=236 time=393 ms
64 bytes from origin.sn131w.snt131.mail.live.com (65.55.72.135): icmp_req=4 ttl=236 time=352 ms
ping -S 192.168.0.3 hotmail.com
PING hotmail.com (65.55.72.183) 56(84) bytes of data.
64 bytes from origin.sn134w.snt134.mail.live.com (65.55.72.183): icmp_req=1 ttl=236 time=312 ms
64 bytes from origin.sn134w.snt134.mail.live.com (65.55.72.183): icmp_req=2 ttl=236 time=457 ms
64 bytes from origin.sn134w.snt134.mail.live.com (65.55.72.183): icmp_req=3 ttl=236 time=298 ms
64 bytes from origin.sn134w.snt134.mail.live.com (65.55.72.183): icmp_req=5 ttl=236 time=330 ms
64 bytes from origin.sn134w.snt134.mail.live.com (65.55.72.183): icmp_req=6 ttl=236 time=300 ms
现在最后是应用程序问题
答案1
如果你查看 ping 手册man ping
,你可以阅读:
-I interface address
Set source address to specified interface address. Argument may be numeric IP
address or name of device.
答案2
检查您的路由表。
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 2 0 0 wlan1
您的 wlan1 接口只知道如何到达 192.168.0.0 网络。您的 wlan1 和 eth0 也位于同一子网中,这可能会导致问题。您需要在路由表中添加一条路由,以到达您想要在 WLAN 接口上到达的任何目的地。例如
route add -host 65.55.72.135 gw 192.168.0.1 dev wlan1
ping -I wlan1 65.55.72.135
请注意,这不允许您通过应用程序进行路由。为此,您需要使用类似以下命令配置策略路由:iptables -m owner --uid-owner
该ping -S src_ip dest_ip
命令实际上会使用您的 wlan1 IP 地址的源发送数据包,但随后将数据包路由到 eth0,因为路由表中的下一跳是 eth0。最好的办法是将 wlan1 和 eth0 接口放在不同的子网上。
答案3
据,直到...为止来自 BSD 的 ping(8)继续,您可以使用-S
ping 开关来模拟来自特定接口的 ping:
-S src_addr
Use the following IP address as the source address in outgoing packets. On hosts
with more than one IP address, this option can be used to force the source address to
be something other than the IP address of the interface the probe packet is sent on.
If the IP address is not one of this machine's interface addresses, an error is
returned and nothing is sent.
如果我们为不同的接口指定不同的网关或根据端口或其他标准通过防火墙规则重定向流量...例如,网络接口(IP 地址)的应用程序级别感知在某种程度上是可能的。如果您使用 Firefox 仅连接到 80 端口,那么您可以在 iptables 中指定 SNAT 规则,以通过您指定的 IP 地址进行连接,从而获得所需的接口