Мне нужно получить имя сетевого интерфейса (например, eth0, wlan0), который является активным в данный момент, тот, который отправляет и получает трафик в данный момент. Когда он подключен к WiFi, это будет wlan0, но когда он подключен напрямую, это будет eth0. Или что-то еще, в зависимости от сетевых устройств в системе и от того, какое из них активно. Как я могу это выяснить?
Откройте терминал и выполните команду:
ifconfig
Активный интерфейс будет иметь IP-адрес и переданные и полученные байты. Вот пример:
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)
Проверьте, используется ли интерфейс Ethernet:
ping -c3 -I eth0 www.google.com
ping: Warning: source address might be selected on device other than eth0.
PING www.google.com (74.125.228.145) 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
Убедитесь, что используется беспроводной интерфейс:
ping -c3 -I wlan0 www.google.com
PING www.google.com (74.125.228.148) from 192.168.1.100 wlan0: 56(84) bytes of data.
64 bytes from iad23s17-in-f20.1e100.net (74.125.228.148): icmp_seq=1 ttl=50 time=37.5 ms
64 bytes from iad23s17-in-f20.1e100.net (74.125.228.148): icmp_seq=2 ttl=50 time=36.8 ms
64 bytes from iad23s17-in-f20.1e100.net (74.125.228.148): icmp_seq=3 ttl=50 time=35.9 ms
Итак, очевидно, что интернет-трафик в настоящее время направляется через мой беспроводной интерфейс wlan0.
Возможно одновременное подключение как к сети Ethernet, так и к беспроводной сети. Обычно Network Manager запрещает это, предпочитая Ethernet по беспроводному каналу, потому что он, как правило, быстрее и безопаснее. Если кто-то хочет использовать Ethernet для локальной сети и беспроводную для WAN (Интернет), он обычно удаляет NM и устанавливает все детали вручную в /etc/network/interfaces.
. Нет необходимости для ping
охотиться и клевать. Используйте ip link
; в нем больше информации, чем в ifconfig
. Каждый интерфейс сообщает что-то вроде
У вас может быть два или более внешних интерфейса с LOWER-UP, но обычно это плохая идея. Вот мой ноутбук с обратной связью (обратите внимание на LOWER_UP), отключен Ethernet, включен wlan0 и генерирует сигнал, wlan4 (USB wifi) UP, но НЕ генерирует сигнал, режим мониторинга wlan4.mon отслеживает все станции на BSS (обратите внимание на LOWER-UP). wlan4.mon не передает.
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
Хороший способ выяснить интерфейс, куда будет направляться конкретный трафик, - это использовать ip route get
Просто используйте, скажем, серверы Google (8.8.8.8) или Cloudflare (1.1.1.1), чтобы выяснить, через какой интерфейс будет проходить интернет-трафик. :
$ ip route get 1.1.1.1
1.1.1.1 via 192.168.2.1 dev eth0 src 192.168.2.155 uid 0
cache
Затем вы можете сделать что-то вроде установки переменной с интерфейсом, который используется для Интернета:
LANIFACE=$(ip route get 1.1.1.1 | grep -Po '(?<=dev\s)\w+' | cut -f1 -d ' ')
Затем вы также можете получить IP-адрес интерфейса:
LANIP=$(ip addr show "$LANIFACE" | grep "inet " | cut -d '/' -f1 | cut -d ' ' -f6)
Если вы хотите немного больше подробностей, попробуйте jnettop, этот инструмент покажет вам подробный мониторинг трафика в терминале.
sudo apt-get install jnettop
после установки просто введите jnettop в терминал