32

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.)

7 Answers 7

36

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 
17

On Mac, 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

On Linux, the first line would be slightly different:

if=$(ip route show 0.0.0.0/0 | awk '/ dev / {print $NF}')
# or
if=$(awk '$2 == 00000000 {print $1}' /proc/net/route)
1
  • 2
    iface(){ route get 0.0.0.0 2>/dev/null | awk '/interface: / {print $2}'; }
    – mralexgray
    Oct 2, 2014 at 8:02
9

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
1
  • 1
    Addendum: through the third-party extension "MenuMeters" (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
    Jan 31, 2010 at 3:29
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/).

2
  • 1
    I 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
    Jan 1, 2010 at 5:57
  • ssh was what I was using to test the network, but really any TCP (persistent) session would do.
    – Ether
    Jan 1, 2010 at 6:04
2
route -n get 0.0.0.0 | grep interface
2
  • 1
    Your answer could be improved with additional supporting information. Please edit to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers in the help center.
    – Community Bot
    Mar 10, 2022 at 12:27
  • 1
    no, it does not need to be improved
    – coding99
    Mar 10, 2022 at 12:33
1

When working between various Linux systems I've found the following script helpful - its easy to remember/copy paste, the one below is tailored to MacOS

#!/bin/bash

export DEFAULT_IF=$(route -n get default | grep interface | awk '{print $2}')

ifconfig | awk -v D=$DEFAULT_IF 'BEGIN{I="";}/^[a-zA-Z0-9]/{I=substr($1,1,length($1)-1);};/inet /{printf("%2s %s %s\n",((D ==  I)?"*":" "),I,$0);};'

It simply gives me a "*" alongside the interface through which default IPv4 traffic is generally being routed in an easy to see format:

$ ./iplist lo0 inet 127.0.0.1 netmask 0xff000000

  • en0 inet 10.16.1.2 netmask 0xffffff00 broadcast 172.16.1.255 en1 inet 192.168.11.4 netmask 0xffffff00 broadcast 192.168.0.255
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

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .