Shell
以程式方式提取私有 IP 地址
我正在尋找一種簡單的方法來以程式方式提取電腦的私有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