從檔案系統讀取目前IP位址?

從檔案系統讀取目前IP位址?

我正在編寫一個程序,需要知道系統當前的 IPv4 位址(透過 DHCP 接收)(如果已連接並且有的話)。為了方便討論,語言無關緊要,我必須從磁碟上的檔案中讀取。是否有這樣一個檔案始終儲存目前的 IPv4 位址?

答案1

有一個檔案/proc/net/tcp以小端四位元組十六進位數字格式儲存 IP 位址。然而,這假設會話已開啟以查找 IP 位址。除此之外,您ip addr show也可以使用指令。

您需要反轉字串才能取得 IP 位址。參考回答如何從文件中獲取輸出/proc/net/tcp

答案2

磁碟上沒有任何檔案可以保證包含目前的 IP 位址。如果您透過 DHCP 取得 IP 位址,DHCP 可能會將位址寫入某處,但沒有標準位置。

取得目前 IP 位址的正常、可移植方法是解析ifconfigor 的輸出(僅限 Linux)ip addr show。請注意,除了主要 Internet 連接的位址之外,還有環回位址 127.0.0.1,通常還有更多位址(用於內部網路、虛擬機器等)。一個好的提示是檢索提供第一個預設路由的介面的位址。

default_interface=$(route -n | awk '$1 == "0.0.0.0" {print $8; exit}')
ip_address=$(ifconfig "$default_interface" | awk 'sub(/.* inet addr:/, "") {print $1}')

答案3

我查看了 Linux Mint /var/lib/dhcp/(基於 Ubuntu 14.04)的資料夾,那裡唯一的檔案是空的。

但搜索每個文件,我確實發現:

  • /var/lib/NetworkManager/dhclient-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-eth0.lease
    (x 幾乎是隨機的字母和數字)一行fixed-address xxx.xxx...看起來像 linuxfan 的答案中貼上的文件

  • 條目在/var/log/syslog透過 IP 位址(例如此處 192.168.1.2),您可以選擇其中一個(也許是最後一個,以防它經常變化)

    1 月 8 日 17:49:45 mint dhclient:eth0 上的 192.168.1.2 的 DHCPREQUEST 到 255.255.255.255 端口 67 (xid=0xXXXXXXX)
    1 月8 日17:49:45189:4519. 1.2 的DHCPOFFER
    17 號:49:45 mint dhclient:來自 192.168.1.1 的 192.168.1.2 的 DHCPACK 於
    1 月 8 日 17:49:45 mint dhclient:綁定到更新192.168.12 秒內。
    Jan 8 17:49:45 mint NetworkManager[1363]:位址 192.168.1.2
    Jan 8 17:49:45 mint avahi-daemon[1117]:加入介面 eth0.IPv4 上的 mDNS 多播群組,位址為 192.168.12.168.12.168.12.168.12。
    1 月 8 日 17:49:45 mint avahi-daemon[1117]:在 eth0.IPv4 上註冊 192.168.1.2 的新位址記錄。

或者,如果您使用的是 bash 或其他 shell 腳本或 shell 友好的腳本,這裡有一個管道友好的 grep & cut 方法來獲取 ip ifconfig,更改eth0為您喜歡的任何一個,甚至-a是全部。

ifconfig eth0 | grep "inet addr" | cut -d : -f 2 | cut -d ' ' -f 1

它只需要time-inggrep一個文件,上面的需要 real 0m0.002s, user 0m0.000s, sys 0m0.000sgrep-ing 一個文件需要real 0m0.001s, user 0m0.000s, sys 0m0.000s

答案4

所有 DHCP 租約資訊都保存在/var/lib/dhcp/dhclient.eth0.leases

# tail -14 /var/lib/dhcp/dhclient.eth0.leases 
lease {
  interface "eth0";
  fixed-address 192.168.0.13;
  option subnet-mask 255.255.255.0;
  option routers 192.168.0.1;
  option dhcp-lease-time 604800;
  option dhcp-message-type 5;
  option domain-name-servers 75.75.75.75,75.75.76.76;
  option dhcp-server-identifier 192.168.0.1;
  option domain-name "hsd1.ca.comcast.net.";
  renew 6 2015/01/10 10:38:07;
  rebind 2 2015/01/13 16:19:22;
  expire 3 2015/01/14 13:19:22;
}

話雖如此,解析以下輸出也沒什麼不好ifconfig

相關內容