ファイルシステムから現在のIPアドレスを読みますか? [閉鎖]

ファイルシステムから現在のIPアドレスを読みますか? [閉鎖]

私は、システムが接続されていてアドレスがある場合は、システムの現在のIPv4アドレス(DHCP経由で受信)を知る必要があるプログラムを作成しています。議論のために、言語は重要ではありません。ディスク上のファイルから読み取る必要があります。現在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はほとんどランダムな文字と数字です。)行の1つはfixed-address xxx.xxx...linuxfanの回答に貼り付けたファイルと同じです。

  • アイテム/var/log/syslogIPアドレス(例:192.168.1.2)でそれらの1つを選択できます(頻繁に変更される場合は最後のアドレスかもしれません)。

    1月8日17:49:45 mint dhclient:eth0の192.168.1.2から255.255.255.255ポート67(xid = 0xXXXXXXXXX)までのDHCPREQUEST 1月8日17:49:16 8.1
    月8日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.1.2に更新されました
    Jan 8 17:49:45 mint NetworkManager[1363]: アドレス 192.168.1.2
    Jan 8 17:49:45 mint avahi-daemon[1117]: アドレス 192.168.1.2 を使用してインターフェイス eth0.IPv4 の mDNS マルチキャストしました。
    Jan 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

単一のファイルを-ingする timeよりも時間がかかりません。上記の方法はファイルを-ingするのにかかります。grepreal 0m0.002s, user 0m0.000s, sys 0m0.000sgrepreal 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

関連情報