Прочитать текущий IP-адрес из файловой системы?

Я пишу программу, которая должна знать текущий IPv4-адрес системы (полученный через DHCP), если он подключен и имеет один. Для аргументации язык не имеет значения, и я должен прочитать его из файла на диске. Есть ли такой файл, который всегда сохраняет текущий IPv4-адрес?

4 Solutions collect form web for “Прочитать текущий IP-адрес из файловой системы?”

На диске нет файла, на котором будет сохранен текущий IP-адрес. Если вы получили свой IP-адрес через DHCP, 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}') 

Существует файл /proc/net/tcp который хранит IP-адрес в шестизначном формате четырехбайтовых шестнадцатеричных чисел. Однако это предполагает, что сеанс открыт для поиска IP-адреса. Кроме этого, вы можете использовать команду ip addr show .

Вам нужно изменить строку, чтобы получить IP-адрес. См. Этот ответ о том, как получить результат из файла /proc/net/tcp .

Я просмотрел папку Linux Mint /var/lib/dhcp/ (на основе Ubuntu 14.04), и единственный файл был пуст.

Но, просматривая каждый файл, я нашел:

  • /var/lib/NetworkManager/dhclient-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-eth0.lease
    (с почти случайными буквами и цифрами x) с fixed-address xxx.xxx... с fixed-address xxx.xxx... которая выглядит как вложенный файл из ответа linuxfan

  • записи в /var/log/syslog с IP-адресом (например, здесь 192.168.1.2), вы можете выбрать один из них (возможно, последний в случае его частого изменения)

    Jan 8 17:49:45 mint dhclient: DHCPREQUEST из 192.168.1.2 на eth0 до 255.255.255.255 порт 67 (xid = 0xXXXXXXXX)
    Jan 8 17:49:45 mint dhclient: DHCPOFFER из 192.168.1.2 из 192.168.1.1
    Jan 8 17:49:45 mint dhclient: DHCPACK 192.168.1.2 от 192.168.1.1
    Jan 8 17:49:45 mint dhclient: привязано к 192.168.1.2 – обновление за 38149 секунд.
    Jan 8 17:49:45 mint NetworkManager [1363]: адрес 192.168.1.2
    Jan 8 17:49:45 mint avahi-daemon [1117]: Присоединение к многоадресной группе mDNS на интерфейсе eth0.IPv4 с адресом 192.168.1.2.
    Jan 8 17:49:45 mint avahi-daemon [1117]: Регистрация новой записи адреса для 192.168.1.2 на eth0.IPv4.

Или, если вы используете bash или другой скрипт оболочки или что-то дружелюбное к оболочке, вот дружественный к трубопроводу grep & cut способ получить ip из ifconfig , измените eth0 в зависимости от того, что вы предпочитаете, или даже -a для всех.

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

Это не займет много time чем grep единственный файл, выше занимает real 0m0.002s, user 0m0.000s, sys 0m0.000s а grep один файл принимает real 0m0.001s, user 0m0.000s, sys 0m0.000s

Вся информация аренды 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

  • Что такое UUID Wi-Fi сети?
  • Нет маршрута для размещения через прямой Ethernet, но nmap находит машину
  • Как диагностировать надежную ненадежную связь?
  • Вход в VirtualBox через SSH
  • Как получить доступ к веб-серверу за NAT и прокси?
  • Используя одновременно eth0 и wlan0
  • Самые дешевые устройства Linux?
  • Debian 8: где установлены статические маршруты по умолчанию?
  • Есть ли способ моделирования высокой задержки?
  • Когда используется сетевой менеджер, OpenSuSe застревает во время загрузки в течение 10 минут
  • Как определить, поддерживает ли AP WDS?
  • Interesting Posts

    «Нет такого пользователя», но пользователь находится в файле passwd

    systemd: nginx не разрешает записи / etc / hosts во время загрузки

    Получить число inode в дереве

    Как работать с `locate`?

    Рекурсивная группировка символических ссылок по исходному файлу

    Как запустить службу пользователя systemd для запуска сна (например, suspend, hibernate)?

    Выполните команду в течение определенного времени и затем прервите, если время превышает

    Установка Debian 8 Jessie UEFI

    Установите мост WLAN на LAN (fedora 22)

    Можно ли использовать файловую систему overlay / union как временную дедупликацию?

    Как заставить USB-накопитель автоматически монтироваться?

    diff gzipped tarball против каталога?

    Beaglebone: резервное изображение монтирует root как только для чтения

    Включение FIPS в зашифрованной системе CentOS с помощью luks ломает пароль для загрузки

    подключение удаленного рабочего стола – похожее на просмотр команды

    Linux и Unix - лучшая ОС в мире.