【问题标题】:Extracting ip address and interface name from ifconfig从 ifconfig 中提取 IP 地址和接口名称
【发布时间】:2019-08-19 06:33:16
【问题描述】:

我有任务从 ifconfig 中提取 IP 地址和接口列表。

操作系统 FreeBSD

ifconfig 输出:

em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
        ether 00:50:56:a5:42:13
        inet 192.168.1.5 netmask 0xfffffff0 broadcast 192.168.1.255
        inet6 fe80::250:56ff:fea1:4213%em0 prefixlen 64 scopeid 0x1
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
        media: Ethernet autoselect (1000baseT <full-duplex>)
        status: active
em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
        ether 00:50:56:a1:62:19
        inet 172.16.16.16 netmask 0xfffffffc broadcast 172.16.16.255
        inet6 fe80::250:56ff:fea1:6229%em1 prefixlen 64 scopeid 0x2
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
        media: Ethernet autoselect (1000baseT <full-duplex>)
        status: active
br0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
        ether 00:50:56:a1:55:27
        inet 10.10.10.11 netmask 0xffffff00 broadcast 10.10.10.255
        inet6 fe80::250:56ff:fea1:5507%em2 prefixlen 64 scopeid 0x3
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
        media: Ethernet autoselect (1000baseT <full-duplex>)
        status: active

我想要这样的输出:

em0 : 192.168.1.5
em1 : 172.16.16.16
br0: 10.10.10.11

ifconfig | awk '/inet / {split($2,var,"/*"); print $1,":",var[1]}'

ifconfig | grep -o "inet [0-9]*\.[0-9]*\.[0-9]*\.[0-9]*" | grep -o "[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*"

ifconfig | sed -En -e 's/.*inet ([0-9.]+).*/\1/p'

目前我只能提取 ip 地址。

非常感谢任何帮助。

【问题讨论】:

  • 能否详细说明您遇到的问题?
  • 您已经尝试过什么,为什么没有成功。 (只是列出要求并期望其他人为您做这件事是 Stack Overflow 的主题)
  • 我没有问题。只想提取所有接口名称和 IP 地址。像这样:em0:192.168.1.5 em1:172.16.16.16 br0:10.10.10.11
  • 请将答案放在答案块中。稍后,您可以接受自己的答案。另见How does accepting an answer work?

标签: shell freebsd ifconfig


【解决方案1】:

也许不是最聪明的解决方案,但您可以尝试一下:

while read line
do
  [[ "$line" =~ ^[a-z]+[0-9]: ]] && {
     var=$(echo "$line" | cut -d' ' -f1)
     ip=$(grep -A3 "$var" <(ifconfig)  | grep -oP 'inet.{0,15}' | cut -d' ' -f2)
     echo "$var" "$ip"
  }
done < <(ifconfig)

【讨论】:

  • grep:不支持-P选项
  • 小部分更正但结果仍然不例外:while read line do [[ "$line" =~ ^[a-z]+[0-9]: ]] &amp;&amp; { var=$(echo "$line" | cut -d' ' -f1) ip=$(grep -A3 "$var" &lt;(ifconfig) | grep -o "[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*" ) echo "$var" "$ip" } done &lt; &lt;(ifconfig)
  • @Fuad 试试egrep -o 'inet.{0,15}'
  • grep -o "[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*"
  • @Fuad 如果您不匹配严格的 IP 地址,因为您只需要 IP,并且您不想按照 funkyjelly 的建议使用 egrep,那么您不妨使用 grep -o "inet [0-9\.]*"
【解决方案2】:

如果您只有csh(默认FreeBSD shell)并且需要获取-l 的IP 接口-u,您可以试试这个:

$ foreach i (`ifconfig -lu`)
ifconfig $i | awk -v i=$i '/inet6?/{print i ": " $2}'
end

这将返回以下格式的 IPv4 和 IPv6 地址:

<interface>: IP

来自ifconfig man

-l 标志可用于列出系统上所有可用的接口,

选项-u 将此限制为已启动的接口。

如果您只需要 IPv4 (inet),您可以使用类似:

$ foreach i (`ifconfig -lu`)
ifconfig $i inet | awk -v i=$i '/inet6?/{print i ": " $2}'
end

【讨论】:

  • 请注意up 不代表status: active:一个接口可以是up 而没有active 的连接。
【解决方案3】:

试试

for ifcfg in $(ifconfig -lu)
do
   ifconfig $ifcfg | grep -v inet6 | awk -v ifcfg=$ifcfg '/inet6?/{print ifcfg " : " $2}'
done

希望对你有帮助。

【讨论】:

    【解决方案4】:

    您也可以通过以下脚本提取 MAC:

    for ifcfg in $(ifconfig -lu)
    do
        mac=$(ifconfig $ifcfg | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}')
        ifconfig $ifcfg | grep -v inet6 | awk -v ifcfg=$ifcfg,$mac '/inet6?/{print ifcfg mac "," $2}' | grep -v lo
    done
    

    输出:

    em0,00:50:56:a5:42:13,192.168.1.5
    em1,00:50:56:a1:62:19,172.16.16.16
    

    【讨论】:

    • 你真的不需要那么复杂的grep 来获取 MAC 地址,你可以用类似ifconfig &lt;interface&gt; ether | awk '/ether /{print $2}' 的东西来简化它
    猜你喜欢
    • 2012-08-02
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 2011-11-03
    相关资源
    最近更新 更多