用于从IPv6地址中查找网络接口名称的脚本



专家

请帮我写一个脚本,从给定的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发行版上。(

ip a s to fda8:75f3:eca7:100::1 | awk -F ": " 'NF > 1 {print $2}'

让我们一步一步地复习。

首先是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来解析它。我们使用": "作为字段分隔符,打印第二个字段,并且只打印匹配的行。

$ ip address show to fda8:75f3:eca7:100::1 | awk -F ": " 'NF > 1 {print $2}'
virbr2

最后,我们将把address show缩写为最小值。

$ ip a s to fda8:75f3:eca7:100::1 | awk -F ": " 'NF > 1 {print $2}'
virbr2

如果你想找到其中一个IPv4地址,这也适用于IPv4地址。

最新更新