我有eth0,wlan0根据ifconfig,我可以ping google.com。
我如何才能找出(对于普通用户,而不是root)哪个接口处于活动状态,例如 ping(或其他什么,ping 不是强制性的)使用的接口是什么?
我使用的是 Ubuntu 11.04 或 Fedora 14
mtv*_*vec 66
您可以使用route来查找您的默认路由:
$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 * 255.255.255.0 U 1 0 0 eth0
link-local * 255.255.0.0 U 1000 0 0 eth0
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
Run Code Online (Sandbox Code Playgroud)
Iface目的地行中的列default告诉您使用的是哪个接口。
Ebr*_*owi 40
route | grep '^default' | grep -o '[^ ]*$'
Run Code Online (Sandbox Code Playgroud)
对于 macOS,这是实验性的:
route -n get default | grep 'interface:' | grep -o '[^ ]*$'
Run Code Online (Sandbox Code Playgroud)
小智 23
在 GNU/Linux 系统上:
#!/bin/sh
# host we want to "reach"
host=google.com
# get the ip of that host (works with dns and /etc/hosts. In case we get
# multiple IP addresses, we just want one of them
host_ip=$(getent ahosts "$host" | awk '{print $1; exit}')
# only list the interface used to reach a specific host/IP. We only want the part
# between dev and src (use grep for that)
ip route get "$host_ip" | grep -Po '(?<=(dev )).*(?= src| proto)'
Run Code Online (Sandbox Code Playgroud)
Eug*_*neP 12
获取通常用于路由到与 DMZ、专用网络、VM 主机等相对的“剩余”互联网的默认网络接口,这些接口通常是明确路由的。
$ ip -4 route ls | grep default | grep -Po '(?<=dev )(\S+)'
eth0
Run Code Online (Sandbox Code Playgroud)
h0t*_*1r3 11
一个班轮:
ip route get 8.8.8.8 | sed -n 's/.*dev \([^\ ]*\) table.*/\1/p'
小智 10
Linux、Unix、某些版本的 Microsoft Windows 和许多其他操作系统的不同发行版不限于仅使用一个网络接口来访问互联网。\xc2\xa0\n许多操作系统将检测多个有效接口,能够到达互联网,并设置\xe2\x80\xafup 每个用于将流量传送到互联网(具体来说,是最终连接到互联网的网关)。
\n如果\xc2\xa0the\xc2\xa0OS尝试访问外部网络并成功使用eth0,它将将该接口添加到路由表并将其绑定到该网络。\xc2\xa0\n如果\xc2\xa0the\xc2\xa0OS尝试要到达相同的外部网络\n并且\xc2\xa0也可以使用 成功eth1,\nit还会将该接口 ( eth1) 添加到路由表\nas中,这是到达同一网络的另一种方式。\xc2\xa0\n到目前为止,其他发帖者还没有考虑路由表中度量值的重要性。
下面的我的路由表显示了两个不同的接口,eth0并且wlan0.\xc2\xa0\n两者都已启动,两者都已由操作系统自动设置为网关的默认路由192.168.1.1,\n和\xc2\xa0都已自动构建了一条路由由操作系统\n连接到(即\xc2\xa0 )网络。\xc2\xa0\n整个路由表是由操作系统自动写入的。\xc2\xa0\n我没有对其进行任何编辑。此处显示的差异是\n有线以太网接口 ( ) 的度量较低 (202),\n并且 \xc2\xa0 因此到我自己网络之外的节点的更多流量\n将通过此接口路由(这是较低的度量),\n而到网络之外的节点的其余流量\n将通过无线接口 ( )\n 路由(它的度量较高,为 303,因此操作系统不太喜欢\xc2\xa0)。192.168.1.X192.168.1.0/24eth0wlan0
pi@raspberrypi:~ $ route\nKernel IP routing table\nDestination Gateway Genmask Flags Metric Ref Use Iface\ndefault 192.168.1.1 0.0.0.0 UG 202 0 0 eth0\ndefault 192.168.1.1 0.0.0.0 UG 303 0 0 wlan0\n192.168.1.0 0.0.0.0 255.255.255.0 U 202 0 0 eth0\n192.168.1.0 0.0.0.0 255.255.255.0 U 303 0 0 wlan0\nRun Code Online (Sandbox Code Playgroud)\n两个接口都用于连接“互联网”,并且它们的使用按“度量”值进行加权,如以下字节和数据包统计数据eth0所示wlan0:
pi@raspberrypi:~ $ ip -s address\n1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000\n link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00\n inet 127.0.0.1/8 scope host lo\n valid_lft forever preferred_lft forever\n inet6 ::1/128 scope host \n valid_lft forever preferred_lft forever\n RX: bytes packets errors dropped overrun mcast \n 0 0 0 0 0 0 \n TX: bytes packets errors dropped carrier collsns \n 0 0 0 0 0 0 \n2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000\n link/ether dc:a6:32:31:a2:c7 brd ff:ff:ff:ff:ff:ff\n inet 192.168.1.195/24 brd 192.168.1.255 scope global dynamic noprefixroute eth0\n valid_lft 80787sec preferred_lft 69987sec\n inet6 fe80::2f3f:3f1d:8c35:a05e/64 scope link \n valid_lft forever preferred_lft forever\n RX: bytes packets errors dropped overrun mcast \n 14341060 22393 0 0 0 971 \xe2\x86\x90\xe2\x80\x94\xe2\x80\x94 high\n TX: bytes packets errors dropped carrier collsns \n 1190274 10745 0 0 0 0 \xe2\x86\x90\xe2\x80\x94\xe2\x80\x94 high\n3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000\n link/ether dc:a6:32:31:a2:c8 brd ff:ff:ff:ff:ff:ff\n inet 192.168.1.193/24 brd 192.168.1.255 scope global dynamic noprefixroute wlan0\n valid_lft 80787sec preferred_lft 69987sec\n inet6 fe80::4f31:5fcf:8f70:b5ca/64 scope link \n valid_lft forever preferred_lft forever\n RX: bytes packets errors dropped overrun mcast \n 4963408 7954 0 0 0 929 \xe2\x86\x90\xe2\x80\x94\xe2\x80\x94 lower\n TX: bytes packets errors dropped carrier collsns \n 49371 235 0 0 0 0 \xe2\x86\x90\xe2\x80\x94\xe2\x80\x94 lower\nRun Code Online (Sandbox Code Playgroud)\n正如注释所示,eth0操作系统正在提供更多流量。
许多操作系统将为连接速度较快的有线接口提供较低的度量,\n为连接较慢的有线接口提供较高的度量。\xc2\xa0\n例如,如果 和 都eth0连接eth1到同一节点,\但\xc2\xa0eth0协商了\xc2\xa0100\xe2\x80\xafMbs 连接,\n并且\xc2\xa0eth1仅协商了\xc2\xa010\xe2\x80\xafMbs 连接,\neth0将获得比 更低的度量eth1。 \xc2\xa0\n类似地,许多操作系统将为有线接口提供较低的度量,而为无线接口提供较高的度量。
可以自动设置多个接口(取决于操作系统)\xe2\x80\xafup,也可以手动设置\xc2\xa0,以通过创建/编辑路由表条目来到达同一外部节点。
\n一个经过最低限度测试的脚本,用于查找具有最低指标\nas报告的接口route:[已添加\xc2\xa0by\xc2\xa0G-Man]
route | awk '\n BEGIN { min = -1 }\n $1 == "default" {\n if (min < 0 || $5 < min) {\n min = $5\n iface = $8\n }\n }\n END {\n if (iface == "") {\n print "No \\"default\\" route found!" > "/dev/stderr"\n exit 1\n } else {\n print iface\n exit 0\n }\n }\n '\nRun Code Online (Sandbox Code Playgroud)\n您可能想将其扩展为\xc2\xa0查看“标志”;即\xc2\xa0 $4。
跑步ifconfig会给你你需要的信息。
活动界面将有一个inet addr并且将显示传输数据的记录,如下所示:
RX bytes:1930741 (1.8 Mb) TX bytes:204768 (199.9 Kb)Run Code Online (Sandbox Code Playgroud)
您也可以使用该ip addr命令,任何非活动接口都将被指定为具有:NO-CARRIER。
该命令ip route ls将给出活动路由及其来源的列表:
caleburn: ~/ >ip route ls
192.168.10.0/24 dev eth0 proto kernel scope link src 192.168.10.7
default via 192.168.10.254 dev eth0
Run Code Online (Sandbox Code Playgroud)