Je dois obtenir le nom de l'interface réseau (par exemple, eth0, wlan0) qui est actuellement active, celle qui envoie et reçoit le trafic pour le moment. Quand il est connecté au WiFi, ce sera wlan0 mais quand il sera connecté directement, ce sera eth0. Ou quelque chose d'autre, en fonction des périphériques réseau sur le système et de celui qui est actif. Comment puis-je savoir cela?
Ouvrez un terminal et lancez la commande:
ifconfig
L'interface active aura une adresse IP et les octets transmis et reçus. Voici un exemple:
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)
Vérifiez si l'interface Ethernet est utilisée:
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
Vérifiez que l'interface sans fil est utilisée:
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
Donc, évidemment, le trafic Internet est actuellement acheminé via wlan0, mon interface sans fil.
Il est possible de connecter simultanément Ethernet et sans fil. Normalement, Network Manager l’interdit, préférant Ethernet à la connexion sans fil, car il est généralement plus rapide et plus sécurisé. Si vous voulez utiliser Ethernet pour le réseau local et sans fil pour le WAN (Internet), vous devez généralement supprimer NM et définir manuellement tous les détails dans/etc/network/interfaces.
Pas besoin de ping
pour chasser et pecker. Utilisez ip link
; il a plus d'informations germanes que ifconfig
. Chaque interface signalera quelque chose comme
Vous pouvez avoir deux interfaces externes ou plus avec LOWER-UP mais généralement une mauvaise idée. Voici mon ordinateur portable avec bouclage (remarque LOWER_UP), Ethernet, wlan0 et générant un signal, wlan4 (USB wifi) UP mais ne générant pas de signal, mode moniteur wlan4.mon reniflant toutes les stations sur BSS (avis LOWER-UP). wlan4.mon ne transmet pas.
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
Un bon moyen de déterminer l'interface utilisée par un trafic particulier consiste à utiliser ip route get
Utilisez simplement des serveurs DNS tels que Google (8.8.8.8) ou Cloudflare (1.1.1.1) pour déterminer quelle interface le trafic Internet traverserait:
$ 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
Ensuite, vous pouvez faire des choses comme définir une variable avec l’interface utilisée pour Internet:
LANIFACE=$(ip route get 1.1.1.1 | grep -Po '(?<=dev\s)\w+' | cut -f1 -d ' ')
Ensuite, vous pouvez également obtenir l'adresse IP de l'interface:
LANIP=$(ip addr show "$LANIFACE" | grep "inet " | cut -d '/' -f1 | cut -d ' ' -f6)
N'oubliez pas que la même méthode peut également fonctionner pour d'autres réseaux, pas seulement sur Internet.
Si vous voulez un peu plus de détails, essayez jnettop, cet outil vous montre une surveillance détaillée du trafic dans le terminal.
Sudo apt-get install jnettop
une fois installé tapez simplement jnettop dans le terminal