如何在shell中获取未格式化的ip地址信息?

如何在shell中获取未格式化的ip地址信息?

我正在编写一个 shell 脚本,它需要有关网络连接状态的信息 - 诸如 IP 地址、子网、网络掩码等基本信息。

我只能使用ifconfigsed/grep 来获取信息,但我希望有一种更简洁的方法来做到这一点 - 可能使用命令ip或类似的实用程序。

我正在寻找可以产生以下结果的东西:

$ (magic command) ip
192.168.1.1
$ (magic command) netmask
255.255.255.0
$ (magic command) subnet
192.168.0.0

对于网络网关/DNS服务器可能也有类似情况。

这样的命令存在吗?也许有一个--unformatted标志ipifconfig?我是不是太乐观/天真了?

谢谢 :)

答案1

您还可以使用或其他工具来ifdata获取信息而无需解析输出:ipgrepawk

[~]$ ifdata -pa eth0
192.168.246.161
[~]$ ifdata -pn eth0
255.255.240.0
[~]$ ifdata
Usage: ifdata [options] iface
     -e   Reports interface existence via return code
     -p   Print out the whole config of iface
    -pe   Print out yes or no according to existence
    -pa   Print out the address
    -pn   Print netmask
    -pN   Print network address
    -pb   Print broadcast
    -pm   Print mtu
    -ph   Print out the hardware address
    -pf   Print flags
    -si   Print all statistics on input
   -sip   Print # of in packets
   -sib   Print # of in bytes
   -sie   Print # of in errors
   -sid   Print # of in drops
   -sif   Print # of in fifo overruns
   -sic   Print # of in compress
   -sim   Print # of in multicast
    -so   Print all statistics on output
   -sop   Print # of out packets
   -sob   Print # of out bytes
   -soe   Print # of out errors
   -sod   Print # of out drops
   -sof   Print # of out fifo overruns
   -sox   Print # of out collisions
   -soc   Print # of out carrier loss
   -som   Print # of out multicast
  -bips   Print # of incoming bytes per second
  -bops   Print # of outgoing bytes per second

答案2

ip命令取代了该ifconfig命令,并支持-o更容易自动解析的选项。

例如:

ip -o addr show dev wlan0|awk '$3=="inet"{print $4}'

将产生类似如下的结果:

192.168.0.2/24

答案3

好吧,您可以尝试从输出中 grep 和 awk 信息,如下所示:ip addr show eth0 | grep 'inet ' | awk '{ print $2}'

你的输出应该如下所示:192.168.1.201/24

ip addr show eth0获取来自 eth0 的信息。grep 'inet '适用于 IPv4。'inet6' 应用于 IPv6。awk '{ print $2}'只是将输出进一步减少到第二组字符。

网络掩码可以通过 IP 地址后的 /24 来确定。

答案4

是的,有一种方法可以制定你自己的命令并获取你的信息。

  • 为了获得您的IP地址在任何文件中保存以下命令myipaddr

    ifconfig | grep 'inet addr:' | grep -v '127.0.0.1' | awk '{print $2}' | cut -f2 -d:
    
  • 类似地得到网络掩码在文件中保存以下命令 mymask

    ifconfig | grep 'inet addr:' | grep -v '127.0.0.1' | awk '{print $4}' | cut -f2 -d:
    
  • 要得到广播(子网)将以下命令保存在另一个文件中mysubnet

    ifconfig | grep 'inet addr:' | grep -v '127.0.0.1' | awk '{print $3}' | cut -f2 -d:
    
  • 然后使所有文件可执行并将其复制或移动到/bin目录:

    $ sudo chmod +x myipaddr mysubnet mymask
    $ sudo cp myipaddr mysubnet mymask /usr/bin
    

现在要获取所需的信息,您只需打开终端并运行以下任一命令。例如:

    $ sudo myipaddr

应该显示如下内容:

192.168.1.11

    $ sudo mymask

应该显示类似这样的内容:

255.255.255.0

    $ sudo mysubnet

应该显示类似这样的内容:

192.168.1.255

相关内容