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

Eth*_*her 25 networking wireless-networking ethernet airport macos

在 MBP (OS X 10.6.2) 上,我已将有线以太网和无线机场配置设置为对我的路由器使用相同的静态 IP(例如,如http://forums.macrumors.com/archive/index 所述.php/t-708685.html)。我还设置了服务订单,以便有线连接位于机场上方(例如,如果插入以太网电缆Mac OS X 会自动关闭机场)。

这似乎“有效”:当我插入和拔下以太网电缆时,与远程位置的开放 ssh 连接保持不变。但是,由于无论是否存在有线连接,Airport 卡都保持活动状态(并连接到路由器),我怎么知道有线接口在可用时实际上是“活动”连接?既然两者的IP地址是一样的,这就保证无线接口不能用了吗?有没有其他方法可以判断这个接口是否在使用中?

附注。我将在发布此内容后立即发布(部分)答案,因为撰写此内容并检查我所有事实的行为使我获得了一些见解。(更有趣和未回答的部分在上面以粗体显示。)

Nev*_*ams 28

问题的权威参考,例如“哪个接口将用于访问主机 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 
Run Code Online (Sandbox Code Playgroud)

我同时启用了 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 
Run Code Online (Sandbox Code Playgroud)


miv*_*ivk 13

在 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
Run Code Online (Sandbox Code Playgroud)

在 Linux 上,第一行会略有不同:

if=$(ip route show 0.0.0.0/0 | awk '/ dev / {print $NF}')
# or
if=$(awk '$2 == 00000000 {print $1}' /proc/net/route)
Run Code Online (Sandbox Code Playgroud)

  • `iface(){ route get 0.0.0.0 2&gt;/dev/null | awk '/interface: / {print $2}'; }` (2认同)

Eth*_*her 8

这是ifconfig -a每种情况下的转储(我将在之后强调差异):

以太网电缆已插入:

lo0:标志=8049 mtu 16384
        inet6 ::1 前缀len 128
        inet6 xxxx::1%lo0 prefixlen 64 scopeid 0x1
        inet 127.0.0.1 网络掩码 0xff000000
gif0:标志=8010 mtu 1280
stf0:标志=0 mtu 1280
en0:标志=8863 mtu 1500
        inet6 xxxx%en0 prefixlen 64 scopeid 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 1000baseT 1000baseT 1000baseT 
fw0:标志=8863 mtu 4078
        lladdr xx:xx:xx:xx:xx:xx
        媒体:自动选择状态:不活动
        支持的媒体:自动选择 
en1:标志=8863 mtu 1500
        inet6 xxxx%en1 prefixlen 64 scopeid 0x6
        inet 192.168.0.110 网络掩码 0xffffff00 广播 192.168.0.255
        以太 xx:xx:xx:xx:xx:xx
        媒体:自动选择状态:活动
        支持的媒体:自动选择

以太网电缆已拔出:

lo0:标志=8049 mtu 16384
        inet6 ::1 前缀len 128
        inet6 xxxx::1%lo0 prefixlen 64 scopeid 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 1000baseT 1000baseT 1000baseT 
fw0:标志=8863 mtu 4078
        lladdr xx:xx:xx:xx:xx:xx
        媒体:自动选择状态:不活动
        支持的媒体:自动选择 
en1:标志=8863 mtu 1500
        inet6 xxxx%en1 prefixlen 64 scopeid 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
Run Code Online (Sandbox Code Playgroud)


Ste*_* Lu 6

几件事。Mac 将始终按照“网络连接”配置文件中列出的顺序使用网络连接。例如,如果以太网位于无线之上,则以太网将接管。

我不确定 SSH 是如何工作的,但根据我的经验。如果一个连接失败或断开连接,SSH 将使用另一个连接。

如果您真的想查看连接是否处于活动状态,您应该使用带宽监视器实用程序。iStat ( http://www.islayer.com/apps/istatmenus/ )是一个很好的例子。