I need to get the name of the network interface (e.g. eth0, wlan0) that is the currently-active one, the one sending and receiving traffic at the moment. When it's connected to WiFi, it would be wlan0 but when it's connected directly it would be eth0. Or something else, depending on the network devices on the system and which one is active. How can I find this out?
Open a terminal and run the command:
The active interface will have an IP address and transmitted and received bytes. Here is an example:
eth0 Link encap:Ethernet HWaddr xx:a8:6b:fe:06:xx inet addr:192.168.1.14 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::eea8:6bff:fefe:696/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:449232 errors:0 dropped:0 overruns:0 frame:0 TX packets:309483 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:633900275 (633.9 MB) TX bytes:27944824 (27.9 MB)
Check if the ethernet interface is used:
ping -c3 -I eth0 www.google.com ping: Warning: source address might be selected on device other than eth0. PING www.google.com (18.104.22.168) from 192.168.1.100 eth0: 56(84) bytes of data.Wi-Fi From Think410 (192.168.1.100) icmp_seq=1 Destination Host Unreachable From Think410 (192.168.1.100) icmp_seq=2 Destination Host Unreachable From Think410 (192.168.1.100) icmp_seq=3 Destination Host Unreachable
Verify that the wireless interface is used:
ping -c3 -I wlan0 www.google.com PING www.google.com (22.214.171.124) from 192.168.1.100 wlan0: 56(84) bytes of data. 64 bytes from iad23s17-in-f20.1e100.net (126.96.36.199): icmp_seq=1 ttl=50 time=37.5 ms 64 bytes from iad23s17-in-f20.1e100.net (188.8.131.52): icmp_seq=2 ttl=50 time=36.8 ms 64 bytes from iad23s17-in-f20.1e100.net (184.108.40.206): icmp_seq=3 ttl=50 time=35.9 ms
So, obviously, internet traffic is currently routed through wlan0, my wireless interface.
It is possible to have both ethernet and wireless connected simultaneously. Normally, Network Manager will disallow it, preferring ethernet over wireless because it is generally faster and more secure. If one wanted to use ethernet for the LAN and wireless for the WAN (internet), one would typically remove NM and set all the details manually in /etc/network/interfaces.
A good way to figure out the interface where particular traffic would go is to use
ip route get Just use say Google (220.127.116.11) or Cloudflare (18.104.22.168) DNS servers to figure out which interface internet traffic would go through:
$ ip route get 22.214.171.124 126.96.36.199 via 192.168.2.1 dev eth0 src 192.168.2.155 uid 0 cache
Then you can do stuff like set a variable with the interface that is used for internet:
LANIFACE=$(ip route get 188.8.131.52 | grep -Po '(?<=dev\s)\w+' | cut -f1 -d ' ')
Then you can also get the IP address of the interface:
LANIP=$(ip addr show "$LANIFACE" | grep "inet " | cut -d '/' -f1 | cut -d ' ' -f6)
Don't forget the same method can also work for other networks, not just ones on the internet.
No need for
ping to hunt-and-peck. Use
ip link; it has more germane info than
ifconfig. Each interface will report something like
- LOOPBACK, meaning active but never goes external (wired or wireless)
- NO-CARRIER, meaning external but no signal being generated
- BROADCAST, meaning external and is active
- LOWER-UP, meaning PHY is enabled
You can have two or more external interfaces with LOWER-UP but generally a bad idea. Here's my laptop with loopback (notice LOWER_UP), down ethernet, wlan0 up and generating a signal, wlan4 (USB wifi) UP but NOT generating a signal, wlan4.mon monitor mode sniffing all stations on BSS (notice LOWER-UP). wlan4.mon does not transmit.
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000 link/ether 24:b6:fd:24:59:b9 brd ff:ff:ff:ff:ff:ff 3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000 link/ether 4c:eb:42:32:0c:9e brd ff:ff:ff:ff:ff:ff 26: wlan4: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN qlen 1000 link/ether 00:26:f2:b3:d7:93 brd ff:ff:ff:ff:ff:ff 27: wlan4.mon: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000 link/ieee802.11/radiotap 00:26:f2:b3:d7:93 brd ff:ff:ff:ff:ff:ffter code here