Аналог ipconfig в Linux

Обновлено: 18.05.2024

Как получить адреса (IPv4) для всех сетевых интерфейсов, используя только proc? После тщательного расследования я обнаружил следующее:

  1. ifconfig использует SIOCGIFADDR, для чего требуются открытые сокеты и предварительное знание всех имен интерфейсов. Это также не задокументировано ни на каких страницах руководств по Linux.
  2. proc содержит /proc/net/dev , но это список статистики интерфейса.
  3. proc содержит /proc/net/if_inet6 , что мне и нужно, но для IPv6.
  4. Как правило, интерфейсы легко найти в proc , но фактические адреса используются очень редко, за исключением тех случаев, когда они явно являются частью какого-либо соединения.
  5. Есть системный вызов под названием getifaddrs , который является очень "волшебной" функцией, которую вы ожидаете увидеть в Windows. Он также реализован на BSD. Однако он не очень ориентирован на текст, что затрудняет его использование в языках, отличных от C.

@forest: потому что это подразумевает разборчивый текст, зависимость от современного Linux и не требует порождающих процессов.

10 ответов 10

/proc/net/fib_trie содержит топографию сети

Чтобы просто распечатать адреса всех адаптеров:

Чтобы определить адаптер этих адресов (а) обратитесь к сетям назначения адаптеров из /proc/net/route , (б) сопоставьте эти сети с сетями из /proc/net/fib_trie и (в) распечатайте соответствующие /32 адреса хоста, указанные в этих сетях.

К сожалению, снова не питон, но довольно неуклюжий подход к bash:

Этот подход не работает надежно для адресов хостов, которые находятся в одной сети с другими адресами хостов. Эта потеря уникальности сети делает невозможным определение правильного адреса хоста из fib_trie, поскольку порядок этих адресов не обязательно совпадает с порядком сетей маршрутизации.

Сказав это, я не уверен, почему вы хотите, чтобы несколько адресов хостов принадлежали одной и той же сети. Так что в большинстве случаев этот подход должен работать нормально.

Как сопоставить IP-адрес из fib_trie с именем сетевого интерфейса в /proc/net/route? При проверке моего /proc/net/route у меня есть несколько записей для одного и того же имени сетевого интерфейса. Кроме того, IP-адрес из fib_trie, похоже, не соответствует столбцу «destination», который представляет собой IP-адрес, преобразованный из шестнадцатеричного и обратного порядка, ЛЮБЫХ записей в таблице маршрутов .

@Maytas Monsereenusorn Общим для fib_trie и route является то, что они предоставляют СЕТЕВОЙ IP-адрес. Как правило, эта сеть уникальна для IP-адреса HOST. Таким образом, вы можете связать соответствующий интерфейс из route с соответствующим IP-адресом хоста из fib_trie. У вас может быть несколько IP-адресов хоста для одного и того же интерфейса, но они не должны принадлежать одной сети (почему см. ограничение выше). Возможно ли, что вы включаете маршруты хостов, когда говорите о «нескольких записях для одного и того же имени сетевого интерфейса» в /proc/net/route? Эти записи не учитываются сценарием.

Вы можете обнаружить, что вывод ip addr show легче анализировать, чем вывод других инструментов:

Другим вариантом является файл /proc/net/tcp. Он показывает все открытые в данный момент сеансы TCP, что отличается от того, что вы просили, но может быть достаточно хорошим.

Мой IP-адрес 192.168.0.121 ; обратите внимание на забавную арифметику, чтобы все получилось правильно. :)

Почему бы и нет: printf "%d.%d.%d.%d\n" 0xc0 0xa8 0x00 0x79 (я проверял, работает под bash, dash, zsh, csh и ksh.)

@F.Hauri, фактический метод печати для шестнадцатеричного -> десятичного не имеет большого значения. Важно то, что 0x79 0x00.. дается в моем злоупотреблении irb в том же порядке, что и последние записи в /proc/net/tcp . Я думаю, что обращение байтов, как вы сделали, затрудняет обнаружение данных, которые вы ищете, и способы их исправления. Конечно, если вы пишете переносимый скрипт, лучше всего подойдет printf(1). :) Но здесь irb просто используется для иллюстрации. Спасибо :)

Мое решение для получения конфигурации сети IPv4, используя только /proc:

К сожалению, это bash (только bash и без какого-либо форка), а не python. Но я надеюсь, что это будет читабельно:

Пример вывода:

Я использую целочисленное значение IPV4 для проверки IP и MASK == NETWORK .

Сначала я прочитал /proc/net/route, чтобы найти конфигурации маршрутизации, поиск маршрутов, доступных без шлюза ( gw==000000 ).

Для такого маршрута я ищу во всех соединениях (TCP, чем UDP, если не найдено в TCP) соединение с использованием этого маршрута, первая конечная точка — это адрес моего хоста.

Примечание: это не работает с соединениями PPP

Примечание 2. Это не будет работать на абсолютно тихом хосте без открытого сетевого подключения. Вы можете сделать что-то вроде echo -ne '' | nc -q 0 -w 1 8.8.8.8 80 & sleep .2 && ./retrieveIp.sh для проверки того, что что-то находится в /proc/net/tcp .

Nota3, 2016-09.23: В новой версии bash используется синтаксис >(command) для функции с несколькими встроенными конвейерами.Это подразумевает ошибку в строке 18: между > и ( !!

должен быть пробел

Новая версия с шлюзом

Небольшой патч: создав файл с именем getIPv4.sh, скопировав предыдущий скрипт, вы можете вставить в команду следующее: patch -p0

Я часами искал утилиту для Windows,
которая будет возвращать ту же информацию, что и ifconfig, относительно переполнений,
кадров, носителей и т. д., и вообще ничего не нахожу.

Проблема в том, что у нас есть смешанная сеть компьютеров Linux и Windows
и внутренняя сетевая карта моей основной машины Linux показывает
пакеты RX: 86272246 ошибок: 3084 отброшено: 821 превышение: 3084 кадр: 0
Пакетов TX:80610778 ошибок:0 отброшено:0 превышений:4 оператор:0
коллизий:0 txqueuelen:1000
байт RX:4145544363 (3953,4 Мб) байтов TX:3168716203 (3021,9 Мб) )

и мне нужно найти Плохого Мальчика, который вызывает все эти перегрузки.
Помимо загрузки работающего дистрибутива Linux на каждом компьютере с Windows, есть ли
какой-нибудь инструмент для обнаружения источника RX? перерасход?
--
доллар

Джефф Лейн

buck писал:
> Я часами искал утилиту для Windows,
> которая вернет ту же информацию, что и ifconfig, относительно переполнения,
> фрейма, несущей и т. д. . и вообще ничего не нахожу.

Я думаю, что ipconfig — ближайшая утилита командной строки Windows.

Тень_7

winipcfg в старых версиях Windows.

в сочетании с

Большинство вещей основано на графическом интерфейсе. Не то, чтобы все они доступны
из меню по умолчанию. Панель управления -> Система -> Диспетчер устройств -> Сетевой интерфейс -> Свойства -> TCP/IP -> и др. Я немного
удивлен, что помню это. Я не запускал Windows и не работал в Windows
несколько лет. Даже полвека. Настоящая хитрость заключается в том, что regedit.exe
изменяет размер MTU и прочее. Что зависит от версии.

Рикиси 42

В семействе Win9x/ME: Start/run/winipcfg

Под NT4, W2K, XP и, возможно, Vista:

'ipconfig' предоставит вам IP-адрес, маску подсети и шлюз по умолчанию.
'ipconfig /all' предоставит вам более подробную информацию (DNS, DHCP и т. д.)

Кроме того, если машина настроена на использование DHCP:
'ipconfig /release' передаст IP-адрес DHCP
'ipconfig /renew' запросит адрес у DHCP

--
Существует искусство, вернее сказать, умение летать.
Умение заключается в том, чтобы научиться бросаться на землю и промахиваться.
Дуглас Адамс

Эй, вы можете попробовать команды "netsh" в Windows, это
мощная командная строка.
Попробуйте "адаптер netsh diag 1". надеюсь, это поможет

>Привет, вы можете попробовать команды "netsh" в Windows, это

>мощная командная строка.
>Попробуйте "адаптер netsh diag 1". надеюсь, это поможет

netsh открывает оболочку. Нет "diag" и ни одна из доступных
команд не выглядит многообещающе. Для какой версии Windows это работает?
--
buck

Я регулярно вижу «рекомендации» по использованию ifconfig для получения информации об интерфейсе в сообщениях списка рассылки, отчетах об ошибках и других местах. Возможно, я даже сам виноват в этом. Тем не менее, мир сетей сильно изменился с тех пор, как ifconfig стал стандартом де-факто для вызова устройства, проверки его IP-адреса или установки IP-адреса.

После некоторых улучшений в ядре и постепенного перехода к управлению сетевыми вещами через netlink; ifconfig был в значительной степени заменен командой ip.

Запуск только ip дает следующее:

Я понимаю, что некоторым это может показаться сложным, но суть в том, чтобы понять, что с помощью ip вы взаимодействуете с объектами и применяете к ним какую-то функцию. Например:

Это основная команда, которая будет использоваться вместо ifconfig. Он просто отобразит IP-адреса, назначенные всем интерфейсам. Чтобы быть точным, он покажет вам подробности интерфейса уровня 3: адреса IPv4 и IPv6, работает ли он, каковы различные свойства, связанные с адресами…

Другая команда предоставит вам подробную информацию о свойствах интерфейса уровня 2: его MAC-адрес (адрес Ethernet) и т. д.; даже если он отображается по IP-адресу:

Кроме того, вы можете активировать или деактивировать устройства (аналогично ifconfig eth0 up или ifconfig eth0 down), просто используя:

Как показано выше, существует множество других объектов, с которыми можно взаимодействовать с помощью команды ip. Я расскажу о другом: ip route в другом посте.

Почему это важно?

Со временем все больше и больше функций становится проще использовать с помощью команды ip вместо ifconfig. Мы уже прекратили установку ifconfig на настольные компьютеры (пока он все еще устанавливается на серверы), и люди уже некоторое время обсуждают удаление net-tools (пакета, поставляющего ifconfig и несколько других старых команд, которые заменены).Возможно, пришло время вернуться к тому, чтобы нигде не устанавливать net-tools по умолчанию.

Я хочу узнать о вашем мире

Вы все еще используете один из следующих инструментов?

/bin/netstat (заменен на ss, которому я полностью посвящу отдельный пост в блоге)
/sbin/ifconfig
/sbin/ipmaddr (заменен на ip maddress)
/ sbin/iptunnel
/sbin/mii-tool (ethtool должен заменить его соответствующим образом)
/sbin/nameif
/sbin/plipconfig
/sbin/rarp
/sbin /маршрут
/sbin/slattach

Если это так и просто нет альтернативы их использованию из iproute2 (ну, команды ip или ss), которые вы можете использовать для того же, я хочу знать, как вы их используете. Мы всегда следим за вещами, которые могут быть нарушены изменениями; мы хотим по возможности не ломать вещи.

Эта статья изначально была опубликована в блоге автора

Облако Ubuntu

Ubuntu предлагает все необходимое для обучения, программную инфраструктуру, инструменты, услуги и поддержку для общедоступных и частных облаков.

Все большие и удобные для пользователя дистрибутивы Linux поставляются с различными графическими инструментами, позволяющими легко настроить компьютер в локальной сети, подключить его к поставщику услуг Интернета или беспроводному доступу. Эти инструменты можно запустить из командной строки или из меню:

Настройка Ubuntu выполняется в меню Система -> Администрирование -> Сеть .

RedHat Linux поставляется с redhat-config-network , который имеет как графический, так и текстовый интерфейс.

YAST или YAST2 от Suse — это универсальный инструмент настройки.

Mandrake/Mandriva поставляется с Мастером настройки сети и Интернета, который предпочтительно запускать из Центра управления Mandrake.

В системах Gnome: gnome-network-preferences .

В системах KDE: knetworkconf .

В вашей системной документации содержится множество советов и информации о доступности и использовании инструментов.

Информация, которую вам нужно будет предоставить:

Для подключения к локальной сети, например, с вашими домашними компьютерами или на работе: имя хоста, имя домена и IP-адрес. Если вы хотите настроить свою собственную сеть, лучше сначала прочитать больше. На работе эта информация, скорее всего, будет предоставлена ​​вашему компьютеру автоматически при его загрузке. В случае сомнений лучше не указывать никакой информации, чем выдумывать ее.

Для подключения к Интернету: имя пользователя и пароль для вашего интернет-провайдера, номер телефона при использовании модема. Ваш интернет-провайдер обычно автоматически назначает вам IP-адрес и все остальное, что необходимо для работы ваших интернет-приложений.

Графические вспомогательные инструменты редактируют определенный набор файлов конфигурации сети с помощью нескольких основных команд. Точные имена файлов конфигурации и их расположение в файловой системе во многом зависят от вашего дистрибутива и версии Linux. Однако несколько файлов конфигурации сети являются общими для всех систем UNIX:

Файл /etc/hosts всегда содержит IP-адрес локального хоста 127.0.0.1, который используется для межпроцессного взаимодействия. Никогда не удаляйте эту строку! Иногда содержит адреса дополнительных хостов, с которыми можно связаться без использования внешней службы имен, такой как DNS (сервер доменных имен).

Пример файла hosts для небольшой домашней сети:

Подробнее читайте в man hosts .

Подробнее читайте на справочной странице resolv.conf.

Файл /etc/nsswitch.conf определяет порядок обращения к различным службам имен. Для использования в Интернете важно, чтобы DNS отображался в строке «hosts»:

[bob@tux ~] grep hosts /etc/nsswitch.conf hosts: файлы dns

Это указывает вашему компьютеру сначала искать имена хостов и IP-адреса в файле /etc/hosts, а затем связываться с DNS-сервером, если данный хост не встречается в локальном файле hosts. Другими возможными службами имен, с которыми можно связаться, являются LDAP, NIS и NIS+.

Подробнее в man nsswitch.conf .

Сценарии и графические инструменты для конкретного дистрибутива являются внешними интерфейсами к ip (или ifconfig и route в старых системах) для отображения и настройки сетевой конфигурации ядра.

Команда ip используется для назначения IP-адресов интерфейсам, для настройки маршрутов к Интернету и другим сетям, для отображения конфигураций TCP/IP и т. д.

Следующие команды показывают IP-адрес и информацию о маршрутизации:

benny@home benny> IP-адрес show 1: lo: mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/ 8 brd 127.255.255.255 хост области lo inet6 :: 1/128 хост области 2: eth0:
mtu 1500 qdisc pfifo_fast qlen 100 link/ether 00:50:bf:7e:54:9a brd ff:ff:ff :ff:ff:ff inet 192.168.42.15/24 brd 192.168.42.255 scope global eth0 inet6 fe80::250:bfff:fe7e:549a/10 scope link benny@home benny> ip route show 192.168.42.0/24 dev eth0 scope ссылка 127.0.0.0/8 dev lo scope ссылка по умолчанию через 192.168.42.1 dev eth0

два сетевых интерфейса, даже в системе, имеющей только одну сетевую карту: "lo" – это локальный шлейф, используемый для связи внутри сети; «eth0» — это обычное имя реального интерфейса. Ни в коем случае не меняйте конфигурацию локальной сети, иначе ваша машина начнет работать со сбоями! Беспроводные интерфейсы обычно определяются как «wlan0»; интерфейсы модема как "ppp0" , но могут быть и другие имена.

IP-адреса, отмеченные "inet": локальный контур всегда имеет 127.0.0.1, физический интерфейс может иметь любую другую комбинацию.

Аппаратный адрес вашего интерфейса, который может потребоваться в рамках процедуры аутентификации для подключения к сети, помечен "ether" . Локальный цикл имеет 6 пар нулей, физический цикл имеет 6 пар шестнадцатеричных символов, из которых первые 3 пары зависят от поставщика.

Несмотря на то, что ip — это самый новый способ настройки системы Linux, ifconfig по-прежнему очень популярен. Используйте его без опции отображения информации о сетевом интерфейсе:

els@asus:~$ /sbin/ifconfig eth0 Link encap:Ethernet HWaddr 00:50:70:31:2C:14 inet addr:60.138.67.31 Bcast:66.255.255.255 Mask:255.255.255.192 inet6 addr: fe80 ::250:70ff:fe31:2c14/64 Область действия:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Метрика:1 RX-пакеты:31977764 ошибки:0 отброшены:0 переполнение:0 кадр:0 TX-пакеты:51896866 ошибки:0 отброшены:0 переполнения: 0 несущая: 0 коллизии: 802207 txqueuelen: 1000 байты RX: 2806974916 (2,6 ГБ) байты TX: 2874632613 (2,6 ГБ) Прерывание: 11 Базовый адрес: 0xec00 lo Link encap: Local Loopback адрес inet: 127.0.0.1 Маска: 255.0 .0.0 адрес inet6: ::1/128 Область:Host UP LOOPBACK RUNNING MTU:16436 Метрика:1 RX-пакетов:765762 ошибок:0 отброшено:0 превышение:0 кадр:0 TX-пакетов:765762 ошибок:0 отброшено:0 превышено: 0 оператор: 0 коллизий: 0 txqueuelen: 0 RX байт: 624214573 (595,2 МБ) TX байт: 624214573 (595,2 МБ)

Здесь также отметим наиболее важные аспекты настройки интерфейса:

IP-адрес помечен "inet addr" .

Аппаратный адрес следует за тегом "HWaddr".

И ifconfig, и ip отображают более подробную информацию о конфигурации и ряд статистических данных о каждом интерфейсе и, что, возможно, наиболее важно, о том, находится ли он в состоянии "РАБОТАЕТ" или "РАБОТАЕТ" .

На вашем ноутбуке, который вы обычно подключаете к сети компании с помощью встроенного соединения Ethernet, но который теперь вы должны настроить для коммутируемого доступа дома или в отеле, вам может потребоваться активировать карту PCMCIA. Это делается с помощью утилиты управления cardctl или pccardctl в новых дистрибутивах.

Пример использования:

Теперь карту можно настроить, используя графический интерфейс или интерфейс командной строки. Перед извлечением карты используйте следующую команду:

Однако хороший дистрибутив должен обеспечивать поддержку PCMCIA в инструментах настройки сети, чтобы пользователям не приходилось выполнять команды PCMCIA вручную.

Дальнейшее обсуждение конфигурации сети выходит за рамки этого документа. Основным источником дополнительной информации являются справочные страницы для служб, которые вы хотите настроить. Дополнительное чтение:

В большинстве систем есть версия файла ip-cref (найдите ее с помощью команды locate); формат PS этого файла можно просмотреть, например, с помощью gv .

На компьютере с Linux имя устройства lo или локальная петля связаны с внутренним адресом 127.0.0.1. Компьютеру будет сложно заставить работать ваши приложения, если этого устройства нет; он всегда есть, даже на компьютерах, не подключенных к сети.

Первое устройство Ethernet, eth0 в случае стандартной сетевой карты, указывает на ваш локальный IP-адрес в локальной сети. Обычные клиентские машины имеют только одну сетевую карту. Маршрутизаторы, соединяющие сети, имеют по одному сетевому устройству для каждой сети, которую они обслуживают.

Если вы используете модем для подключения к Интернету, ваше сетевое устройство, вероятно, будет называться ppp0 .

Есть много других имен, например, для интерфейсов виртуальной частной сети (VPN), и несколько интерфейсов могут быть активны одновременно, так что выходные данные команд ifconfig или ip могут стать довольно обширными, если не используются никакие параметры. Даже несколько интерфейсов одного типа могут быть активны. В этом случае они нумеруются последовательно: первому присваивается номер 0, второму — суффикс 1, третьему — 2 и так далее. Это имеет место на многих серверах приложений, на машинах с отказоустойчивой конфигурацией, на маршрутизаторах, брандмауэрах и многом другом.

Помимо команды ip для отображения конфигурации сети, есть общая команда netstat, которая имеет множество параметров и обычно полезна в любой системе UNIX.

Информацию о маршрутизации можно отобразить с помощью параметра -nr команды netstat:

bob:~> netstat -nr Таблица IP-маршрутизации ядра Шлюз назначения Флаги генмаски Окно MSS irtt Iface 192.168.42.0 0.0.0.0 255.255.255.0 U 40 0 ​​0 eth0 127.0.0.0 0.0.0.0 255.0.0.0 U 40 0 ​​0 lo 0.0.0.0 192.168.42.1 0.0.0.0 UG 40 0 ​​0 eth0

Это типичный клиентский компьютер в IP-сети. У него есть только одно сетевое устройство, eth0. Интерфейс lo — это локальный шлейф.

Современный способ

Новый способ получить эту информацию из вашей системы — использовать команду ip:

Когда этот компьютер пытается связаться с хостом, находящимся в сети, отличной от его собственной, на что указывает строка, начинающаяся с 0.0.0.0, он отправляет запросы на подключение на компьютер (маршрутизатор) с IP-адресом 192.168.42.1 и для этого он будет использовать свой основной интерфейс eth0.

Хосты, которые находятся в той же сети, строка начинается с 192.168.42.0, также будут связываться через основной сетевой интерфейс, но маршрутизатор не требуется, данные просто помещаются в сеть.

Компьютеры могут иметь гораздо более сложные таблицы маршрутизации, чем эта, с большим количеством различных пар "Назначение-Шлюз" для подключения к разным сетям. Если у вас есть возможность подключиться к серверу приложений, например, на работе, очень полезно проверить информацию о маршрутизации.

Впечатляющее количество инструментов ориентировано на управление сетью и удаленное администрирование машин Linux. Ваше локальное зеркало программного обеспечения Linux предложит множество таких. Мы зашли бы слишком далеко, если бы обсуждали их в этом документе, поэтому обратитесь к документации по конкретной программе.

В этом разделе мы обсудим только некоторые распространенные текстовые инструменты UNIX/Linux.

Чтобы отобразить информацию о хостах или доменах, используйте команду host:

Похожая информация может быть отображена с помощью команды dig, которая дает дополнительную информацию о том, как записи хранятся на сервере имен.

Чтобы проверить, жив ли хост, используйте ping . Если ваша система настроена на отправку более одного пакета, прервите ping комбинацией клавиш Ctrl+C:

[emmy@pc10 emmy]$ ping a.host.be PING a.host.be (1.2.8.3) с 80.20.84.26: 56 (84) байт данных. 64 байта от a.host.be(1.2.8.3): icmp_seq=0 ttl=244 time=99,977 мс --- статистика пинга a.host.be --- 1 пакет передан, 1 пакет получен, 0% потерянных пакетов -трип мин/средн/макс/mdev = 99,977/99,977/99,977/0,000 мс

Чтобы проверить маршрут, по которому пакеты следуют к сетевому узлу, используйте команду traceroute:

В некоторых системах traceroute был переименован в tracepath .

Конкретную информацию о доменном имени можно запросить с помощью команды whois, как это объясняется многими серверами whois, такими как приведенный ниже:

Читайте также: