How can I tell which network interface my computer is using?

25

7

On a MBP (OS X 10.6.2) I've got the wired ethernet and wireless airport configurations set up to use the same static IP to my router (e.g. as described at http://forums.macrumors.com/archive/index.php/t-708685.html). I've also got the Service Order set up so that the wired connection is above Airport (e.g. as described at Mac OS X automatically turn off Airport if ethernet cable is plugged in).

This seems to "work": an open ssh connection to a remote location stays up as I plug in and unplug the ethernet cable. However, since the Airport card stays live (and connected to the router) regardless of whether the wired connection is present, how can I tell that the wired interface is actually the "active" connection when it is available? Since the IP address is the same for both, is this a guarantee that the wireless interface cannot be used? Is there some other way to tell if this interface is in use?

PS. I'm going to post a (partial) answer as soon as I post this, as the act of writing this up and checking all my facts lead me to some insights. (The more interesting and unanswered part is in bold above.)

Ether

Posted 2010-01-01T00:50:23.033

Reputation: 1 007

Answers

8

Here's a dump of ifconfig -a in each situation (I'll highlight the differences afterward):

Ethernet cable is plugged in:

lo0: flags=8049 mtu 16384
        inet6 ::1 prefixlen 128
        inet6 xxxx::1%lo0 prefixlen 64 scopeid 0x1
        inet 127.0.0.1 netmask 0xff000000
gif0: flags=8010 mtu 1280
stf0: flags=0 mtu 1280
en0: flags=8863 mtu 1500
        inet6 xxxx%en0 prefixlen 64 scopeid 0x4
        inet 192.168.0.110 netmask 0xffffff00 broadcast 192.168.0.255
        ether xx:xx:xx:xx:xx:xx
        media: autoselect (100baseTX ) status: active
        supported media: none autoselect 10baseT/UTP  10baseT/UTP  10baseT/UTP  10baseT/UTP  100baseTX  100baseTX  100baseTX  100baseTX  1000baseT  1000baseT  1000baseT 
fw0: flags=8863 mtu 4078
        lladdr xx:xx:xx:xx:xx:xx
        media: autoselect  status: inactive
        supported media: autoselect 
en1: flags=8863 mtu 1500
        inet6 xxxx%en1 prefixlen 64 scopeid 0x6
        inet 192.168.0.110 netmask 0xffffff00 broadcast 192.168.0.255
        ether xx:xx:xx:xx:xx:xx
        media: autoselect status: active
        supported media: autoselect

Ethernet cable is unplugged:

lo0: flags=8049 mtu 16384
        inet6 ::1 prefixlen 128
        inet6 xxxx::1%lo0 prefixlen 64 scopeid 0x1
        inet 127.0.0.1 netmask 0xff000000
gif0: flags=8010 mtu 1280
stf0: flags=0 mtu 1280
en0: flags=8863 mtu 1500
        ether xx:xx:xx:xx:xx:xx
        media: autoselect status: inactive
        supported media: none autoselect 10baseT/UTP  10baseT/UTP  10baseT/UTP  10baseT/UTP  100baseTX  100baseTX  100baseTX  100baseTX  1000baseT  1000baseT  1000baseT 
fw0: flags=8863 mtu 4078
        lladdr xx:xx:xx:xx:xx:xx
        media: autoselect  status: inactive
        supported media: autoselect 
en1: flags=8863 mtu 1500
        inet6 xxxx%en1 prefixlen 64 scopeid 0x6
        inet 192.168.0.110 netmask 0xffffff00 broadcast 192.168.0.255
        ether xx:xx:xx:xx:xx:xx
        media: autoselect status: active
        supported media: autoselect

diff plugged unplugged shows that the wired connection does become active when it is available:

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

Ether

Posted 2010-01-01T00:50:23.033

Reputation: 1 007

1

Addendum: through the third-party extension "MenuMeters" (http://www.ragingmenace.com/software/menumeters/), it is possible to see which is the "active" interface and also the bandwidth being used across all interfaces, which makes it clear that the active interface does indeed switch properly (as desired) when the wired connection is plugged in and removed.

– Ether – 2010-01-31T03:29:02.890

27

The definitive reference for questions such as 'Which interface will be used to reach host w.x.y.z?' for any given time or situation is to refer to the routing table.

[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 

I've both en0 and en1 enabled, and en0 is first in Service Order. Unplugging my ethernet, making no other changes, the same command gives:

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 

Nevin Williams

Posted 2010-01-01T00:50:23.033

Reputation: 3 725

12

I use this:

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

mivk

Posted 2010-01-01T00:50:23.033

Reputation: 2 270

2iface(){ route get 0.0.0.0 2>/dev/null | awk '/interface: / {print $2}'; } – mralexgray – 2014-10-02T08:02:38.843

6

A couple of things. Mac will always use the network connections in order that's listed in your "Network Connections" profile. For example, if Ethernet is on top of Wireless, Ethernet will take over.

I'm not sure on how SSH works that much, but from my experience. If one connection fails or disconnects, SSH will then use the other connection.

If you really want to see if the connections are active, you should use a bandwidth monitor utility. A great one is iStat (http://www.islayer.com/apps/istatmenus/).

Steven Lu

Posted 2010-01-01T00:50:23.033

Reputation: 706

1I accidentally read too fast, yeah... what I said was service order. You should really take a look into the bandwidth monitor to see what's going on between all your connections. – Steven Lu – 2010-01-01T05:57:54.490

ssh was what I was using to test the network, but really any TCP (persistent) session would do. – Ether – 2010-01-01T06:04:50.793

0

I used the advice to make IP adresses the same for Ethernet and WiFi, Set the Service Order as suggested, and just used Network Utility>Info on en0 and en1.

I initiated a TimeMachine backup and under Network Utility > Info > en0 Ethernet I could see that thousands of packets were moving through the ethernet connection, while Network Utility > Info > en1 WiFi nothing was moving.

Thanks for getting me pointed in the right direction. When TimeMachine backup is complete I'll revert back to separate IP addresses and see if Mac automatically still moves everything through Ethernet.

The original question was "How can I tell which network interface my computer is using?" Network utility worked for me.

Macbook Pro 17" Mid-2010, Mountain Lion

Gigapig

Posted 2010-01-01T00:50:23.033

Reputation: 1