以编程方式提取私有 IP 地址

Emy*_*myl 8 shell networking ip

我正在寻找一种简单的方法来以编程方式提取计算机的私有IPv4 地址。

此问题类似的内容,但仅限于私有 IP。

例如,我可以使用以下命令提取所有IPv4 地址:

ifconfig | grep 'inet addr' | cut -d ':' -f 2 | awk '{ print $1 }'
Run Code Online (Sandbox Code Playgroud)

示例输出:

6.11.71.78
10.0.2.15
127.0.0.1
Run Code Online (Sandbox Code Playgroud)

以类似的方式,我只想在私有地址空间中获取 IP。所以,参考同一个例子,输出应该是:

10.0.2.15
Run Code Online (Sandbox Code Playgroud)

slm*_*slm 15

私有 IP 空间中的任何内容将始终以三个 IP 地址块之一开始。

  • 24 位块 - 10.XXX
  • 20 位块 - 172.16.XX - 172.31.XX
  • 16 位块 - 192.168.XX

因此,只需 grep 即可获取上述类型的 IP 地址。

$ ifconfig | grep 'inet addr' | cut -d ':' -f 2 | awk '{ print $1 }' | \
      grep -E '^(192\.168|10\.|172\.1[6789]\.|172\.2[0-9]\.|172\.3[01]\.)'
192.168.1.20
Run Code Online (Sandbox Code Playgroud)

细节

grep我使用的品牌使用正则表达式。在这种情况下,我们正在寻找以下模式:

  • 192.168
  • 10.
  • 172.1[6789]。
  • 172.2[0-9]。
  • 172.3[01]。

此外,我们只明确匹配以这些模式之一开头的数字。锚点 ( ^) 为我们提供了这种能力。

更多例子

如果我们将以下行添加到文件中只是为了测试grep

$ cat afile 
192.168.0.1
10.11.15.3
1.23.3.4
172.16.2.4
Run Code Online (Sandbox Code Playgroud)

然后我们可以像这样测试它:

$ cat afile | grep -E '^(192\.168|10\.|172\.1[6789]\.|172\.2[0-9]\.|172\.3[01]\.)'
192.168.0.1
10.11.15.3
172.16.2.4
Run Code Online (Sandbox Code Playgroud)