Shell

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

  • October 4, 2018

我正在尋找一種簡單的方法來以程式方式提取電腦的私有IPv4 地址。

類似於此問題的內容,但僅限於私有 IP。

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

ifconfig | grep 'inet addr' | cut -d ':' -f 2 | awk '{ print $1 }'

範例輸出:

6.11.71.78
10.0.2.15
127.0.0.1

以類似的方式,我只想在私有地址空間中獲取 IP。所以,參考同一個例子,輸出應該是:

10.0.2.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

細節

grep我正在使用的使用正則表達式。在這種情況下,我們正在尋找以下模式:

  • 192.168
  • 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

然後我們可以像這樣測試它:

$ 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

引用自:https://unix.stackexchange.com/questions/98923