假设我的 PC 连接了多个网卡,我如何知道哪个卡用于通信。例如,如果我使用
ping 192.168.x.xxx
我想知道哪张卡(以及哪个 IP 地址)用于通信。
命令
netstat
将告诉我们有关活动连接的信息。我对活动连接不感兴趣,但我想知道下一个连接将使用哪张卡。也就是说,如果我们使用ping
将使用哪张卡(或 IP 地址)?
答案1
尝试一下route print
;它会显示操作系统的网络表以及每个网络接口将使用的网络接口,或者当一个网络上有多张卡时,它将使用权重来分配流量。我的这台机器上只有一张卡,所以这没什么意思:
===========================================================================
Interface List
0x1 ........................... MS TCP Loopback interface
0x2 ...00 12 34 56 78 9a ...... Intel(R) 82566DM Gigabit Network Connection
===========================================================================
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 123.45.67.1 123.45.67.137 10
127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1
234.254.0.0 255.255.0.0 123.45.67.137 123.45.67.137 20
123.45.67.0 255.255.255.0 123.45.67.137 123.45.67.137 10
123.45.67.137 255.255.255.255 127.0.0.1 127.0.0.1 10
123.45.255.255 255.255.255.255 123.45.67.137 123.45.67.137 10
224.0.0.0 240.0.0.0 123.45.67.137 123.45.67.137 10
255.255.255.255 255.255.255.255 123.45.67.137 123.45.67.137 1
Default Gateway: 123.45.67.1
===========================================================================
Persistent Routes:
None
例如,从第二行到 127.xxx 的流量将使用环回接口,但到多播的流量和其他所有流量都将使用网卡。我不确定如何通过编程方式阅读,不过,很抱歉。
答案2
netstat 会告诉你 - netstat 中列出的本地地址是你正在使用的网卡的 ip 地址
让我们来看看我在 Windows 上 netstat 输出的片段 - 我通过 192.168.1.127 连接到我的局域网,并通过 10.0.0.2 连接到交叉局域网
Proto Local Address Foreign Address State
TCP 10.0.0.2:56702 ARTEMIS:ms-wbt-server ESTABLISHED
TCP 127.0.0.1:19872 Athena:49172 ESTABLISHED
TCP 192.168.1.127:2869 192.168.1.254:49565 TIME_WAIT
TCP 192.168.1.127:56523 stackoverflow:http ESTABLISHED
10.0.0.2 是本地交叉适配器,连接到运行 RDP 服务器的 ARTEMIS,192.168.1.127 正在与我的路由器(即 192.168.1.254)和 stackoverflow 通信。另请注意,127.0.0.1 上的本地连接已显示。
在 Linux 上你可能需要使用
网络状态-n
我的 Linux 机器上只有一个活动端口,但它看起来像 - 对于 IP 地址 192.168.1.127
tcp 0 52 192.168.1.127:22 121.7.51.154:56383 ESTABLISHED
答案3
所用的卡由该卡上配置的 IP 地址决定。值得注意的是,将同一子网上的 IP 地址配置到不同的物理接口通常是无效的。(是的,这有例外,但它们通常非常具体,不太可能对您有用)。
操作系统中哪个物理卡与哪个逻辑名称相关联是一个比较棘手的问题。确定这个问题的最简单方法是拔掉所有网线,只留下一条,然后查看哪个 IP 地址仍可以通信。
您使用的是什么操作系统,对于某些操作系统类型,有时有更简单的方法来确定哪张卡已被拔出 - 例如,Windows 通过系统托盘图标提供视觉反馈。