ファイルシステムから現在の IP アドレスを読み取りますか?

ファイルシステムから現在の IP アドレスを読み取りますか?

システムが接続されていて IPv4 アドレスがある場合、DHCP 経由で受信したシステムの現在の IPv4 アドレスを知る必要があるプログラムを作成しています。議論のために、言語は関係なく、ディスク上のファイルから読み取る必要があります。現在の IPv4 アドレスを常に保存するファイルはありますか?

答え1

/proc/net/tcpIP アドレスをリトルエンディアンの 4 バイト 16 進数形式で保存するファイルがあります。ただし、これは IP アドレスを見つけるためにセッションが開かれていることを前提としています。それ以外では、ip addr showコマンドを使用することもできます。

IPアドレスを取得するには文字列を逆にする必要があります。これファイルから出力を取得する方法についての回答/proc/net/tcp

答え2

現在の IP アドレスが含まれていることが保証されているファイルはディスク上にはありません。DHCP 経由で IP アドレスを取得した場合、DHCP はおそらくどこかにアドレスを書き込んでいますが、標準的な場所はありません。

現在の IP アドレスを取得する通常の移植可能な方法は、ifconfigまたは (Linux のみ)の出力を解析するip addr showことです。プライマリ インターネット接続のアドレスに加えて、ループバック アドレス 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

/var/lib/dhcp/Linux Mint (Ubuntu 14.04 ベース)のフォルダーを確認しましたが、そこにあった唯一のファイルは空でした。

しかし、すべてのファイルを検索すると、次のものが見つかりました。

  • /var/lib/NetworkManager/dhclient-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-eth0.lease
    (xはほぼランダムな文字と数字)fixed-address xxx.xxx...linuxfanの回答から貼り付けたファイルのように見える行

  • エントリー/var/log/syslogIPアドレス(ここでは192.168.1.2など)で、これらのいずれかを選択できます(頻繁に変更される場合は最後のものを選択するとよいでしょう)。

    1 月 8 日 17:49:45 mint dhclient: eth0 上の 192.168.1.2 の DHCPREQUEST から 255.255.255.255 ポート 67 (xid=0xXXXXXXXX) へ
    1 月 8 日 17:49:45 mint dhclient: 192.168.1.1 からの 192.168.1.2 の DHCPOFFER
    1 月 8 日 17:49:45 mint dhclient: 192.168.1.1 からの 192.168.1.2 の DHCPACK
    1 月 8 日 17:49:45 mint dhclient: 192.168.1.2 にバインド -- 38149 秒後に更新されます。
    1月8日 17:49:45 mint NetworkManager[1363]: アドレス192.168.1.2
    1月8日 17:49:45 mint avahi-daemon[1117]: アドレス192.168.1.2を使用して、インターフェースeth0.IPv4上のmDNSマルチキャストグループに参加しています。
    1月8日 17:49:45 mint avahi-daemon[1117]: eth0.IPv4上の192.168.1.2の新しいアドレスレコードを登録しています。

または、bash やその他のシェル スクリプト、またはシェルに適したものを使用している場合は、パイプに適した grep と cut を使用して から ip を取得しifconfigeth0好みに応じて変更したり、-aすべてを変更したりすることができます。

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

time1つのファイルに対して-を実行するのとほとんど変わりません。grep上記は 1つのファイルに対して-を実行real 0m0.002s, user 0m0.000s, sys 0m0.000sするのに1時間かかります。grepreal 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

関連情報