【问题标题】:Script to find network interface name from IPv6 address [closed]从 IPv6 地址中查找网络接口名称的脚本 [关闭]
【发布时间】:2017-01-25 03:55:46
【问题描述】:

专家,

请帮我编写一个脚本,从给定的 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”

提前感谢您的帮助。

谢谢。

【问题讨论】:

  • SO 不是免费的编码服务。您必须尝试自己编写。看起来这应该是一个非常简单的awk 脚本。当您看到Link 行时,您将链接名称保存在一个变量中。然后当你匹配地址时,你打印变量。

标签: bash shell ipv6


【解决方案1】:

为什么要把事情复杂化?我喜欢简单。这很简单。 (你不应该使用 ifconfig,因为它在现代 Linux 发行版上是 deprecatednot installed by default。)

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 解析它。我们使用": " 作为field separator,打印第二个字段,然后only print matching lines

$ 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 和 IPv6 都是通用的。
  • 公平地说,另一个答案可能也适用于 IPv4,但他没有提到它,并且在未安装 ifconfig 时肯定不起作用。
  • 为什么是NF&gt;1 而不是NR==1
  • @AlexP。我想你可以做到这一点。
猜你喜欢
  • 1970-01-01
  • 2012-11-17
  • 2013-06-21
  • 2010-09-20
  • 1970-01-01
  • 1970-01-01
  • 2012-09-10
  • 2012-04-09
  • 2011-08-21
相关资源
最近更新 更多