如何查找当前活动网络接口的名称?

use*_*159 8 network-manager wireless networking internet ethernet

我需要获取当前活动的网络接口(例如 eth0、wlan0)的名称,即当前发送和接收流量的接口。当它连接到 WiFi 时,它将是 wlan0,但当它直接连接时,它将是 eth0。或者其他什么,取决于系统上的网络设备以及哪个是活动的。我怎样才能找到这个?

chi*_*555 11

打开终端并运行命令:

ifconfig
Run Code Online (Sandbox Code Playgroud)

活动接口将有一个 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)
Run Code Online (Sandbox Code Playgroud)

检查是否使用了以太网接口:

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
Run Code Online (Sandbox Code Playgroud)

验证是否使用了无线接口:

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
Run Code Online (Sandbox Code Playgroud)

所以,很明显,互联网流量目前是通过我的无线接口 wlan0 路由的。

可以同时连接以太网和无线。通常,网络管理器会禁止它,更喜欢以太网而不是无线,因为它通常更快更安全。如果想在 LAN 中使用以太网,在 WAN(互联网)中使用无线,通常会删除 NM 并在 /etc/network/interfaces 中手动设置所有详细信息。


rka*_*tos 9

确定特定流量将通过的接口的一个好方法是使用ip route getJust use say Google (8.8.8.8) 或 Cloudflare (1.1.1.1) DNS 服务器来确定互联网流量将通过哪个接口:

$ 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
Run Code Online (Sandbox Code Playgroud)

然后你可以做一些事情,比如使用用于互联网的接口设置一个变量:

LANIFACE=$(ip route get 1.1.1.1 | grep -Po '(?<=dev\s)\w+' | cut -f1 -d ' ')
Run Code Online (Sandbox Code Playgroud)

然后还可以获取接口的IP地址:

LANIP=$(ip addr show "$LANIFACE" | grep "inet " | cut -d '/' -f1 | cut -d ' ' -f6)
Run Code Online (Sandbox Code Playgroud)

不要忘记,同样的方法也适用于其他网络,而不仅仅是互联网上的网络。


dtu*_*ene 6

无需ping狩猎和啄食。使用ip link; 它比ifconfig. 每个界面都会报告类似的东西

  • LOOPBACK,表示活动但从不外部(有线或无线)
  • NO-CARRIER,意味着外部但不产生信号
  • BROADCAST,意思是外在的,是主动的
  • LOWER-UP,表示 PHY 已启用

您可以使用 LOWER-UP 拥有两个或更多外部接口,但这通常是个坏主意。这是我的带环回的笔记本电脑(注意 LOWER_UP),关闭以太网,wlan0 启动并生成信号,wlan4(USB wifi)启动但不生成信号,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
Run Code Online (Sandbox Code Playgroud)