我如何知道我的计算机正在使用哪个网络接口?

我如何知道我的计算机正在使用哪个网络接口?

在 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

相关内容