![我如何知道我的计算机正在使用哪个网络接口?](https://linux22.com/image/1226400/%E6%88%91%E5%A6%82%E4%BD%95%E7%9F%A5%E9%81%93%E6%88%91%E7%9A%84%E8%AE%A1%E7%AE%97%E6%9C%BA%E6%AD%A3%E5%9C%A8%E4%BD%BF%E7%94%A8%E5%93%AA%E4%B8%AA%E7%BD%91%E7%BB%9C%E6%8E%A5%E5%8F%A3%EF%BC%9F.png)
在 MBP(OS X 10.6.2)上,我已将有线以太网和无线机场配置设置为使用与路由器相同的静态 IP(例如,如所述http://forums.macrumors.com/archive/index.php/t-708685.html)。我还设置了服务订单,以便有线连接位于机场之上(例如,如所述如果插入以太网电缆,Mac OS X 将自动关闭 Airport)。
这似乎“有效”:当我插入和拔出以太网电缆时,到远程位置的开放 ssh 连接保持打开状态。但是,由于无论有线连接是否存在,Airport 卡都保持活动状态(并连接到路由器),当有线接口可用时,我如何判断它实际上是“活动”连接?由于两者的 IP 地址相同,这是否能保证无线接口不能是否正在使用?还有其他方法可以判断此接口是否正在使用吗?
附言:我打算在发布本文后立即发布(部分)答案,因为撰写本文和核实所有事实的过程让我有了一些见解。(更有趣且未解答的部分以粗体显示在上面。)
答案1
对于任何给定时间或情况下的诸如“将使用哪个接口到达主机 wxyz?”之类的问题,权威参考是参考路由表。
[mini-nevie:~] nevinwilliams% route get 10.10.10.10
route to: 10.10.10.10
destination: default
mask: default
gateway: 192.168.2.1
interface: en0
flags: <UP,GATEWAY,DONE,STATIC,PRCLONING>
recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
0 0 0 0 0 0 1500 0
我启用了 en0 和 en1,en0 在服务顺序中排在第一位。拔下以太网,不做任何其他更改,同样的命令给出:
mini-nevie:~] nevinwilliams% route get 10.10.10.10
route to: 10.10.10.10
destination: default
mask: default
gateway: 192.168.2.1
interface: en1
flags: <UP,GATEWAY,DONE,STATIC,PRCLONING>
recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
0 0 0 0 0 0 1500 0
答案2
在 Mac 上,我使用这个:
if=$(route -n get 0.0.0.0 2>/dev/null | awk '/interface: / {print $2}')
if [ -n "$if" ]; then
echo "Default route is through interface $if"
else
echo "No default route found"
fi
在 Linux 上,第一行会略有不同:
if=$(ip route show 0.0.0.0/0 | awk '/ dev / {print $NF}')
# or
if=$(awk '$2 == 00000000 {print $1}' /proc/net/route)
答案3
以下是每种情况下的转储ifconfig -a
(稍后我将重点介绍差异):
以太网电缆已插入:
lo0:标志=8049 mtu 16384 inet6 ::1 前缀长度 128 inet6 xxxx::1%lo0 前缀长度 64 范围 ID 0x1 inet 127.0.0.1 网络掩码 0xff000000 gif0:标志=8010 mtu 1280 stf0:标志=0 mtu 1280 en0:标志=8863 mtu 1500 inet6 xxxx%en0 前缀长度 64 范围 ID 0x4 inet 192.168.0.110 网络掩码 0xffffff00 广播 192.168.0.255 以太 xx:xx:xx:xx:xx:xx 媒体:自动选择(100baseTX)状态:活动 支持的介质:无自动选择 10baseT/UTP 10baseT/UTP 10baseT/UTP 10baseT/UTP 100baseTX 100baseTX 100baseTX 100baseTX 100baseTX 1000baseT 1000baseT 1000baseT fw0: 标志=8863 mtu 4078 lladdr xx:xx:xx:xx:xx:xx 媒体:自动选择状态:不活动 支持的媒体:自动选择 en1:标志=8863 mtu 1500 inet6 xxxx%en1 前缀长度 64 范围 ID 0x6 inet 192.168.0.110 网络掩码 0xffffff00 广播 192.168.0.255 以太 xx:xx:xx:xx:xx:xx 媒体:自动选择状态:活动 支持的媒体:自动选择
以太网电缆已拔出:
lo0:标志=8049 mtu 16384 inet6 ::1 前缀长度 128 inet6 xxxx::1%lo0 前缀长度 64 范围 ID 0x1 inet 127.0.0.1 网络掩码 0xff000000 gif0:标志=8010 mtu 1280 stf0:标志=0 mtu 1280 en0:标志=8863 mtu 1500 以太 xx:xx:xx:xx:xx:xx 媒体:自动选择状态:不活动 支持的介质:无自动选择 10baseT/UTP 10baseT/UTP 10baseT/UTP 10baseT/UTP 100baseTX 100baseTX 100baseTX 100baseTX 100baseTX 1000baseT 1000baseT 1000baseT fw0: 标志=8863 mtu 4078 lladdr xx:xx:xx:xx:xx:xx 媒体:自动选择状态:不活动 支持的媒体:自动选择 en1:标志=8863 mtu 1500 inet6 xxxx%en1 前缀长度 64 范围 ID 0x6 inet 192.168.0.110 网络掩码 0xffffff00 广播 192.168.0.255 以太 xx:xx:xx:xx:xx:xx 媒体:自动选择状态:活动 支持的媒体:自动选择
diff plugged unplugged
表明有线连接在可用时确实变为活动状态:
8,9d7
< inet6 xxxx%en0 prefixlen 64 scopeid 0x4
< inet 192.168.0.110 netmask 0xffffff00 broadcast 192.168.0.255
11c9
< media: autoselect (100baseTX <full-duplex,flow-control>) status: active
---
> media: autoselect status: inactive
答案4
route -n get 0.0.0.0 | grep interface