簡體   English   中英

使用BASH查找內部IP地址

[英]Find internal IP address with BASH

我已經知道了許多獲取內部IP的方法(ifconfig,ip addr,/ etc / hosts等),但我正在嘗試編寫一個始終返回內部IP的bash腳本。 問題是,許多單行(/ sbin / ifconfig | grep inet | head -1 | sed's / \\:/ /'| awk'{print $ 3}')可以返回多個IP,我需要區分內部一個手動。

我懷疑在計算機上,外部IP和內部IP之間沒有區別,因此沒有100%保證獲得正確IP的方法。

最終結果是該腳本將返回內部IP,無論其是192地址還是204地址等。

提前致謝。

hostname -i ”應該會給你相同的結果

正如其他人所提到的,機器並沒有真正保證,甚至可能只有一個IP地址。 我不確定你所說的“內部知識產權”是什么意思; 有時這可能意味着“本地網絡上的IP地址”,即連接到啟用NAT的防火牆的接口。

我認為最好的方法是連接到您想要的網絡上的主機,並使用該連接所源自的地址。 這將是機器通常用於連接到該網絡的接口。 用戶Unkwntech在這個帖子上有同樣的想法。 以下代碼僅從該答案中獲取。

我不知道這是否真的有資格作為“bash”解決方案,因為它只是一個內聯Python腳本,但無論如何這將獲得用於訪問google.com的本地IP地址。 因此,這將為您提供機器用於訪問Internet主機的任何接口的IP地址。

$ python -c 'import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("google.com", 80))
print s.getsockname()[0]'

更多bash-y解決方案可能使用tracepath或一些類似的實用程序。

系統也可以有多個私有IP。 您必須將對IP的搜索限制為私有IP。 10.0.0.0/8,172.16.0.0/12和192.168.0.0/16。

RFC 1918私有地址空間內,一台機器可以設想10/8范圍內的每個地址, 172.16/12范圍和192.168/16范圍,總共17891328個IP地址,並且所有這些地址都是合法的“內部”IP。

哦,是的,不要忘記IPv6 :)單個機器的每個網絡可能有2 ^ 64個地址,可能參與多個網絡。

這也不完全是學術性的:VMWare,VirtualBox,QEMU等主機系統分配多個RFC 1918地址是很常見的。 一個用於“通常使用”,另一個用於與客戶操作系統通信。 或者路由器/防火牆,它們可能有十幾個內部IP專門用於為了訪問控制的原因對網絡進行子網划分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM