从 IPv6 地址查找网络接口名称的脚本
Script to find network interface name from IPv6 address
专家们,
请帮我写一个脚本,从给定的 IPv6 地址中找到网络接口名称。
例如:
if "ifconfig" gives the output like:
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:90440 errors:0 dropped:0 overruns:0 frame:0
TX packets:90440 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:10181289 (10.1 MB) TX bytes:10181289 (10.1 MB)
eth0 Link encap:Ethernet HWaddr 00:50:56:bb:9f:9d
inet6 addr: fe80::250:56ff:febb:9f9d/64 Scope:Link
inet6 addr: 2001:111:1111:1111:1000::41/64 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:138859 errors:0 dropped:10 overruns:0 frame:0
TX packets:69332 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:46310896 (46.3 MB) TX bytes:18119186 (18.1 MB)
eth1 Link encap:Ethernet HWaddr 00:50:56:bb:9f:9d
inet6 addr: fe80::250:56ff:febb:9f9d/64 Scope:Link
inet6 addr: 2001:222:2222:2222:1000::41/64 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:138859 errors:0 dropped:10 overruns:0 frame:0
TX packets:69332 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:46310896 (46.3 MB) TX bytes:18119186 (18.1 MB)
并且给定的 IPv6 地址是:2001:111:1111:1111:1000::41
那么输出应该是 "eth0"
提前感谢您的帮助。
谢谢。
为什么要把事情弄复杂?我喜欢简单。这很简单。 (而且你不应该使用 ifconfig
,因为它在现代 Linux 发行版中是 deprecated and not installed by default。)
ip a s to fda8:75f3:eca7:100::1 | awk -F ": " 'NF > 1 {print }'
让我们一步一步来。
首先是 ip
输出。
$ ip address show to fda8:75f3:eca7:100::1
12: virbr2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
inet6 fda8:75f3:eca7:100::1/64 scope global
valid_lft forever preferred_lft forever
这告诉我们 IP 所在的接口,并省略了接口上可能存在的任何其他地址。
所以我们将用awk
解析出来。我们使用 ": "
作为 field separator, print the second field, and only print matching lines.
$ ip address show to fda8:75f3:eca7:100::1 | awk -F ": " 'NF > 1 {print }'
virbr2
最后我们将 address show
缩写为最小值。
$ ip a s to fda8:75f3:eca7:100::1 | awk -F ": " 'NF > 1 {print }'
virbr2
如果您想找到其中之一,这也适用于 IPv4 地址。
专家们,
请帮我写一个脚本,从给定的 IPv6 地址中找到网络接口名称。
例如:
if "ifconfig" gives the output like:
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:90440 errors:0 dropped:0 overruns:0 frame:0
TX packets:90440 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:10181289 (10.1 MB) TX bytes:10181289 (10.1 MB)
eth0 Link encap:Ethernet HWaddr 00:50:56:bb:9f:9d
inet6 addr: fe80::250:56ff:febb:9f9d/64 Scope:Link
inet6 addr: 2001:111:1111:1111:1000::41/64 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:138859 errors:0 dropped:10 overruns:0 frame:0
TX packets:69332 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:46310896 (46.3 MB) TX bytes:18119186 (18.1 MB)
eth1 Link encap:Ethernet HWaddr 00:50:56:bb:9f:9d
inet6 addr: fe80::250:56ff:febb:9f9d/64 Scope:Link
inet6 addr: 2001:222:2222:2222:1000::41/64 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:138859 errors:0 dropped:10 overruns:0 frame:0
TX packets:69332 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:46310896 (46.3 MB) TX bytes:18119186 (18.1 MB)
并且给定的 IPv6 地址是:2001:111:1111:1111:1000::41 那么输出应该是 "eth0"
提前感谢您的帮助。
谢谢。
为什么要把事情弄复杂?我喜欢简单。这很简单。 (而且你不应该使用 ifconfig
,因为它在现代 Linux 发行版中是 deprecated and not installed by default。)
ip a s to fda8:75f3:eca7:100::1 | awk -F ": " 'NF > 1 {print }'
让我们一步一步来。
首先是 ip
输出。
$ ip address show to fda8:75f3:eca7:100::1
12: virbr2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
inet6 fda8:75f3:eca7:100::1/64 scope global
valid_lft forever preferred_lft forever
这告诉我们 IP 所在的接口,并省略了接口上可能存在的任何其他地址。
所以我们将用awk
解析出来。我们使用 ": "
作为 field separator, print the second field, and only print matching lines.
$ ip address show to fda8:75f3:eca7:100::1 | awk -F ": " 'NF > 1 {print }'
virbr2
最后我们将 address show
缩写为最小值。
$ ip a s to fda8:75f3:eca7:100::1 | awk -F ": " 'NF > 1 {print }'
virbr2
如果您想找到其中之一,这也适用于 IPv4 地址。