Поиск компьютеров в локальной сети linux
Обновлено: 07.07.2024
Иногда возникает необходимость узнать какие устройства подключены к локальной сети Linux. Это может понадобиться если вы хотите подключиться к одному из компьютеров и не помните его адрес или хотите убедиться в безопасности вашей сети и найти все скрытые устройства.
Самый надежный способ обнаружить все подключенные к сети Linux устройства, в том числе и скрытые - это ARP сканирование локальной сети. В этой статье мы рассмотрим как его выполнить и какие утилиты для этого нужны.
Как выполнить ARP сканирование локальной сети?
Как вы знаете, у всех компьютеров в сети есть IP адреса. Никогда не задавались вопросом, как сеть определяет, какому компьютеру принадлежит тот или иной адрес? Ведь сети бывают разные, проводные, беспроводные, ppp и т д. И в каждой из этих сетей аппаратный адрес компьютера имеет свой формат, зависящий от конструктивных особенностей сети, а IP адреса одни и те же.
Все очень просто. Для преобразования физических адресов, в ip адреса используется протокол ARP (Address Resolution Protocol), так и расшифровывается - протокол разрешения адресов. Когда компьютеру нужно обратиться к другому компьютеру в локальной сети, он отправляет специальный запрос в котором буквально спрашивает "У кого IP адрес 192.168.1.4", компьютер с таким ip адресом отправляет ответ "У меня, я 11:22:33:44:55", в ответе он передает свой физический адрес в этой сети. Дальше этот адрес заносится в специальную таблицу. но это уже тонкости реализации и они выходят за рамки нашей статьи. Сегодня мы поговорим как самому выполнить ARP сканирование локальной сети linux и найти все подключенные устройства.
Утилита ARP Scan
ARP Scan или еще называемый MAC Scanner - это очень быстрый инструмент для сканирования локальной сети Linux с помощью ARP. Утилита показывает все IPv4 адреса устройств в вашей сети. Поскольку ARP не использует маршрутизацию, то такой вид сканирования работает только в локальной сети.
ARP Scan находит все активные устройства, даже если у них включен брандмауэр. Компьютеры не могут скрыться от ARP также как они скрываются от ping. Но ARP сканирование не подходит для поиска компьютеров за пределами локальной сети, в таких ситуациях используйте ping сканирование.
Установка ARP Scan
Этот arp сканер сети доступен для следующих операционных систем:
- Debian, поставляется по умолчанию;
- Ubuntu, можно установить с репозитория Universe;
- Fedora, официальные репозитории начиная с версии 6;
- RedHat - доступна начиная с версии 5;
- Gentoo, официальные репозитории;
- ArchLinux - официальные репозитории Pacman.
Для установки в Ubuntu выполните:
sudo apt install arp-scan
Сканирование сети
ARP Scan позволяет находить активные компьютеры как в проводных сетях ethernet, так и в беспроводных Wifi сетях. Также есть возможность работать с Token Ring и FDDI. Не поддерживаются последовательные соединения PPP и SLIP, поскольку в них не используется ARP. Программу нужно запускать с правами суперпользователя.
Но сначала надо узнать сетевой интерфейс, который используется для подключения к сети. Для этого можно воспользоваться программой ip:
В данном случае, это enp24s0. Самый простой способ выполнить ARP сканирование и обнаружить все подключенные к локальной сети компьютеры - запустить программу со следующими параметрами:
sudo arp-scan --interface=enp24s0 --localnet
Здесь параметр --interface, задает интерфейс для сканирования, а --localnet, говорит, что нужно использовать все возможные IP адреса для текущей сети.
Первый параметр можно опустить, тогда программа будет искать все узлы для интерфейса с меньшим номером в системе. В нашем примере имя интерфейса - enp24s0.
Вместо параметра --localnet, можно указать маску сети:
sudo arp-scan --interface=enp24s0 10.0.1.0/24
ARP сканирование можно использовать, даже если у вашего интерфейса нет IP адреса. Тогда в качестве исходящего адреса будет использован 0.0.0.0. Правда, на такие запросы могут ответить не все системы. Тогда ARP сканер сети не так эффективен.
ARP спуфинг и ARP прокси
Выводы
ARP Scan это простой, но очень мощный инструмент, с помощью которого можно выполнять сканирование ip адресов в локальной сети linux. Те, кто знаком с Cisco маршрутизаторами и коммутаторами, знают что найти такие устройства можно только с помощью ARP. Это полезный инструмент, возможно, когда-то вам он пригодится.
Я - веб-разработчик, который пытается получить лучший контроль над безопасностью. Я пытаюсь найти способ (на дистрибутивах на базе Linux /Debian), чтобы перечислить все компьютеры в той же локальной сети, на которых мой нетбук включен. Я попробовал «arp -n», но я не считаю, что это полный список, так как мой iPhone находится на том же Wi-Fi-маршрутизаторе, что и мой нетбук, и это не пришло. Есть ли лучший способ получить полный список машин, которые используют один и тот же шлюз?
Получить nmap . Это программа Trinity, используемая в Matrix, и вы можете выполнить сканирование, чтобы найти все устройства, подключенные к локальной сети, в которой вы находитесь, и многое другое.
Это то, что я использую, nmap и адрес, используя блок-схему CIDR для сети, которую вы хотите отсканировать. Сначала вам нужно установить nmap, поскольку он не может быть предварительно установлен с вами дистрибутивом. На Ubuntu:
Затем введите свой сетевой адрес, используя ifconfig:
вывод ifconfig для интерфейса, который я хочу проверить:
Используйте inet addr и Mask для определения сетевого адреса в нотации CIDR, подробнее о CIDR здесь . Адрес:
Запустите nmap с использованием параметра -sP, который будет сканировать не дальше, чем проверка, находится ли хост в сети:
nmap будет выглядеть примерно так:
Вот и все, если вам нужна дополнительная помощь с nmap, см. официальную документацию nmap или выполните:
arp -n показывает только ваши компьютеры в вашей локальной сети, о которых уже говорила ваша машина. Вы можете получить этот список, чтобы заполнить его, указав широковещательные и общедоступные адреса многоадресной рассылки:
«Все те» (в двоичном) широковещательном адресе. Обратите внимание, что большинство стеков IP переведет это на широковещательные адреса подсети для всех подключенных подсетей:
Широковещательный адрес подсети для текущей подсети. Предположим, вы используете 192.168.1.0/24:
Многоадресный адрес «все хосты». Мне это очень нравится, потому что более вероятно, что хосты будут настроены для других IP-подсетей, которые подключаются к той же локальной сети Ethernet, что и вы:
Обратите внимание, что этот метод и другие методы, о которых я уже упоминал в других ответах до сих пор, ищут только хосты с IP-доступом в текущей сети. Это, вероятно, все, о чем вам нужно заботиться, но злоумышленник может заглянуть или сделать что-то плохое в сети, не будучи видимым через IP.
ip neigh и hosts . NO nmap required /NO sudo required .
Основываясь на этом, вы можете создать скрипт Python:
(или просто arp . Я этого раньше не видел)
nmap отлично, если немного запутать. Вот что я запустил, чтобы обнаружить локальные сетевые устройства, которые в основном доступны для копирования. nmap -sP (или nmap -sn ) сканирует пинг . Существуют и другие варианты «обнаружения узла», например, с помощью nmap -sL или nmap -Pn .
Способ № 1.
Путь № 2. Я знаю, что это работает, но я не могу сказать, правильно ли это сделать.
Я был бы рад узнать, есть ли более эффективные способы. До тех пор я придерживаюсь этого.
Вы можете попробовать выполнить ping всю данную подсеть с помощью небольшого сценария оболочки linux, например
Охота - это инструмент командной строки, способный создавать список машин поскольку они транслируют по сети информацию. Он использует данные TCP, UDP, ICMP и ARP для создания списка активных MAC-адресов в сети. Это пассивный инструмент, который работает, слушая провод.
Чтобы проверить статус диапазона IP-адресов, это приятно и просто:
- В предыдущих версиях Nmap -sn был известен как -sP
Я сделал это в Mac OS X (основанный на BSD). Я не уверен, есть ли у версии Linux какие-либо отличия.
Для более компактного списка подключенных устройств:
nmap -sL 192.168.0.* будет перечислять все IP-адреса в подсети и отмечать те, у которых есть имя:
Поскольку все интересные записи начинаются со скобок ( и цифры 1 , мы фильтруем для этого с помощью | grep \(1 (обратная косая черта необходима для удаления скобок)
Куирк
Помните, что если два устройства имеют одинаковое имя, nmap покажет только тот, который был подключен к маршрутизатору последнему
2a. или просто спросите сервер доменных имен :
2b. без awk
подключает все pingable сетевые устройства в подсети 192.168.2.0/24 параллельно (чтобы сократить время выполнения). Впоследствии arp должно отображаться каждое устройство, на которое он ответил.
не проверяет наличие активных или текущих подключений, но перечисляет все подключения, в которых служба локального домена сохраняет запись, даже очень старые.
В повседневные задачи системных администраторов входит работа с сетями и с подключённым к ним оборудованием. Нередко роль рабочего места администратора играет компьютер, на котором установлен какой-нибудь дистрибутив Linux. Утилиты и команды Linux, о которых пойдёт речь в материале, перевод которого мы публикуем сегодня, включают в себя список инструментов различной сложности — от простых, до продвинутых, которые предназначены для решения широкого спектра задач по управлению сетями и по диагностике сетевых неполадок.
Утилита ping , как можно судить по её названию, используется для проверки связи между узлами сети, между компьютером, на котором её запускают, и другой системой. Эта утилита использует протокол ICMP, отправляя эхо-запросы, на которые отвечает удалённая система, получающая их. Использование ping , кроме того — это хороший способ проверки связности сети, проводимой в качестве первого шага диагностики сети при наличии неполадок. Команду ping можно использовать с адресами IPv4 и IPv6. Тут можно почитать подробности об IP-адресах и о работе с ними.
▍Примеры
Ping, кроме того, можно использовать для выяснения IP-адресов сайтов на основе их имён. Вот как это выглядит.
Использование ping для выяснения IP-адреса сайта по его имени
Traceroute
Traceroute — это приятная утилита, которая позволяет исследовать маршруты передачи данных между компьютерами. В то время как команда ping направлена на то, чтобы выяснить, можно ли установить связь между двумя узлами сети, traceroute даёт сведения об IP-адресах маршрутизаторов, через которые проходят данные от вашей системы до конечной, например — до веб-сайта или сервера. Команда traceroute обычно применяется на втором шаге диагностики сети, после команды ping .
▍Пример
Telnet
Утилита telnet позволяет связаться с удалённым компьютером по протоколу Telnet и взаимодействовать с ним, используя соответствующие команды.
▍Пример
Для организации сеанса Telnet-связи с другим компьютером используется следующая команда:
Netstat
Эта команда позволяет собирать сведения о сети и используется в ходе поиска и исправления сетевых неполадок, применяется для проверки данных о работе интерфейсов и портов, для исследования таблиц маршрутизации, для изучения информации о работе протоколов. Эта команда непременно должна присутствовать в арсенале системного администратора.
▍Примеры
Для того чтобы получить список всех портов, находящихся в режиме прослушивания, воспользуйтесь такой командой:
Следующая команда выводит сведения обо всех портах. Для того чтобы ограничиться только TCP-портами, нужно воспользоваться ключом -at , для того, чтобы получить данные об UDP-портах, используйте ключ -au .
Для просмотра таблиц маршрутизации воспользуйтесь такой командой:
Вот как выглядит результат выполнения этой команды.
Сведения о таблице маршрутизации
Вот вариант этой команды, выводящий статистику по протоколам:
Статистика по протоколам
Следующий вариант вызова netstat позволяет узнать сведения об отправленных и полученных пакетах (transmission/receive, TX/RX) по каждому интерфейсу:
Данные об отправленных и полученных пакетах
Nmcli
Утилита nmcli отлично подходит для управления сетевыми соединениями, для выполнения настроек и для решения других подобных задач. С её помощью можно управлять программой NetworkManager и модифицировать сетевые параметры различных устройств.
▍Примеры
Вот как с помощью nmcli вывести список сетевых интерфейсов:
Так можно вывести информацию по конкретному интерфейсу:
Следующий вариант вызова команды позволяет проверить подключение устройства к сети:
Примеры использования nmcli
Эта команда позволяет отключить заданный интерфейс:
А эта позволяет включить интерфейс:
Вот пример команды, которая добавляет VLAN-интерфейс с заданным VLAN-номером, IP-адресом и шлюзом к указанному интерфейсу:
Маршрутизация
Существует множество команд, которые можно использовать для проверки правил маршрутизации и их настройки. Рассмотрим самые полезные из них.
▍Примеры
Следующая команда показывает все текущие маршруты, настроенные для соответствующих интерфейсов:
Маршруты, настроенные для интерфейсов
Эта команда позволяет добавить в таблицу маршрутизации шлюз, используемый по умолчанию:
Следующая команда добавляет в таблицу маршрутизации новый сетевой маршрут. Существует и множество других её параметров, позволяющих выполнять такие операции, как добавление маршрута и шлюза, используемых по умолчанию, и так далее.
С помощью такой команды можно удалить запись о заданном маршруте из таблицы маршрутизации:
Вот примеры использования команды route .
Использование команды route
Вот команда, которая применяется для вывода текущей таблицы соседей. Кроме того, её можно использовать для добавления, изменения или удаления сведений о соседях:
Взглянем на примеры её использования.
Данные, полученные с помощью команды ip neighbor
Вот сведения о команде ip neigh
Сведения о команде ip neigh
Команда arp (ARP — это сокращение от Address Resolution Protocol, протокол определения адреса) похожа на ip neighbor . Утилита arp выводит данные о соответствии IP-адресов MAC -адресам. Вот как её использовать:
Вот пример её вызова.
Вызов команды arp
Tcpdump и Wireshark
Linux даёт в распоряжение администратора множество инструментов для захвата и анализа пакетов. Среди них, например, tcpdump , wireshark , tshark , и другие. Они используются для захвата сетевого трафика в передаваемых системой пакетах или в пакетах, получаемых ей. Это делает их весьма ценным инструментом администратора, помогающим в деле выяснения причин различных сетевых неполадок. Тем, кто предпочитает командную строку всем остальным способам общения с компьютерами, понравится tcpdump . Тем же, кто любит графические интерфейсы, можно порекомендовать wireshark — отличный инструмент для захвата и анализа пакетов. Утилита tcpdump — это встроенное в Linux средство для захвата сетевого трафика. Его можно использовать для захвата и вывода трафика с фильтрацией по портам, протоколам, и по другим признакам.
▍Примеры
Такая команда показывает, в режиме реального времени, пакеты с заданного интерфейса:
Пакеты можно сохранять в файл, воспользовавшись флагом -w и задав имя файла:
Вот пример использования tcpdump .
Использование tcpdump
Следующий вариант команды используется для захвата пакетов, приходящих с заданного IP системы-источника:
Так можно захватить пакеты, идущие на заданный адрес системы-приёмника:
Вот пример использования tcpdump для захвата пакетов для заданного номера порта, например, это может быть порт 53, 80, 8080, и так далее:
Здесь показано, как с помощью tcpdump захватывать пакеты заданного протокола, вроде TCP, UDP или других:
Iptables
Утилита iptables похожа на файрвол, она поддерживает фильтрацию пакетов, что позволяет управлять трафиком, пропуская или блокируя его. Диапазон возможностей этой утилиты огромен. Рассмотрим несколько наиболее распространённых вариантов её использования.
▍Примеры
Следующая команда позволяет вывести все существующие правила iptables :
Эта команда удаляет все существующие правила:
Следующие команды разрешают прохождение трафика с заданного номера порта к заданному интерфейсу:
Следующие команды разрешают loopback-доступ к системе:
Nslookup
Инструмент nslookup используется для получения сведений о назначении IP-адресов сетевым ресурсам. Его можно использовать и для получения сведений с DNS-серверов, например таких, как все DNS-записи для некоего веб-сайта (ниже мы рассмотрим соответствующий пример). На nslookup похожа утилита dig (Domain Information Groper).
▍Примеры
Следующая команда выводит IP-адреса вашего DNS-сервера в поле Server, и, ниже, выдаёт IP-адрес искомого сайта:
Такая команда показывает все доступные записи для заданного веб-сайта или домена:
Поиск неполадок
Вот набор команд и список важных файлов, используемых для идентификации сетевых неполадок.
▍Примеры
- ss — утилита для вывода статистической информации о сокетах.
- nmap <ip-address> — имя этой команды является сокращением от Network Mapper. Она сканирует сетевые порты, обнаруживает хосты, выясняет MAC-адреса и выполняет множество других задач.
- ip addr/ifconfig -a — эта команда предоставляет сведения об IP-адресах и другие данные по всем интерфейсам системы.
- ssh -vvv user@<ip/domain> — такая команда позволяет подключиться по SSH к другому компьютеру, используя заданный IP-адрес или доменное имя компьютера и имя пользователя. Флаг -vvv позволяет получать подробные сведения о происходящем.
- ethtool -S <interface> — данная команда позволяет вывести статистические сведения по заданному интерфейсу.
- ifup <interface> — эта команда включает указанный интерфейс.
- ifdown <interface> — эта команда отключает указанный интерфейс.
- systemctl restart network — с помощью этой команды можно перезагрузить системную сетевую подсистему.
- /etc/sysconfig/network-scripts/<interface-name> — это — файл настройки интерфейсов, используемый для указания IP-адреса, сети, шлюза и других параметров для заданного интерфейса. Здесь можно задать использование интерфейсом DHCP-режима.
- /etc/hosts — данный файл содержит сведения о соответствии хостов или доменов IP-адресам, настроенные администратором.
- /etc/resolv.conf — в этом файле хранятся настройки DNS.
- /etc/ntp.conf — этот файл хранит настройки NTP.
Итоги
В этой небольшой шпаргалке мы рассказали о сетевых инструментах Linux, предназначенных для системных администраторов. Надеемся, вам эти инструменты пригодятся.
В моей работе много компьютеров, и я хочу пошутить. Я могу закрыть компьютер по сети, но мне сложно найти IP-адреса.
Как я могу легко найти все онлайн-IP-адреса от 192.168.1.aa до 192.168.1.zz?
Обычно ] nmap очень полезен для быстрого сканирования сетей.
Чтобы установить nmap, введите в терминале следующую команду:
После установки приложения введите следующую команду:
Это покажет вам, какой узлы отвечали на запросы ping в сети между 192.168.1.0 и 192.168.1.255.
Для более старых версий Nmap используйте -sP :
Дополнительные ссылки см. на следующих страницах:
Это очень полезный инструмент для изучения.
Netdiscover может быть вашим ответом.
Для установки через терминал:
IP-адрес с MAC-адресами будет отображаться на вашем терминале. Смотрите скриншот
надеюсь помочь вам
Если все компьютеры в вашей сети - это Ubuntu или любой другой дистрибутив, в котором используется avahi-daemon ( DNS-SD ), вы можете получить их подробный список (с именем хоста и IP-адресом), выполнив:
Если вы хотите узнать все IP-адреса, используемые в вашей сети, вы можете использовать arp-scan :
Как он не установлен по умолчанию, вам придется установить его с помощью sudo apt-get install arp-scan . arp-scan отправляет ARP-пакеты в локальную сеть и отображает полученные ответы, поэтому показывает даже узлы с брандмауэром (которые блокируют трафик на основе IP-пакетов).
fping - отличный инструмент для сканирования нескольких хостов в сети через ICMP. Если он не установлен, вы можете установить его следующим образом:
fping отправляет ICMP ECHO_REQUEST пакеты и помечает хост как Up, если он получает ECHO_RESPONSE от хоста.
Например, для сканирования хостов подсети 192.168.1.0/24 , вы можете сделать:
Для определенного количества хостов, например от 192.168.1.15 до 192.168.1.140 :
fping легко настраивается, например сколько пакетов будет отправлено, время ожидания ответа, формат вывода и т. д.
Проверьте man fping , чтобы получить более подробную информацию.
Примечание для читателя : Оригинальный ответ был опубликован некоторое время назад и в то время, когда я был только изучение сценариев оболочки. См. Обновленную версию ниже, чтобы увидеть новый и улучшенный сценарий, который работает намного быстрее.
Исходный ответ
nmap был бы моим выбором №1, но что делать, если у вас его нет? Самостоятельный способ - это сценарий ping, который вручную перебирает все возможные IP-адреса в сети. У нас есть просто цикл while, в котором мы устанавливаем последнее число в адресе, выполняем тихий одиночный пинг для адреса, проверяем, выполнена ли команда успешно или нет (и если она была успешной, то хост, очевидно, работает) и printf оператор. Быстрый и грязный способ, у меня ушло около 10 минут, чтобы написать его, но время выполнения может быть немного медленным.
Повторный ответ
Первоначально я опубликовал этот ответ в августе 2015 года. С тех пор я немного узнал подробнее о сценариях оболочки, и как только я увидел этот сценарий, я подумал, что было бы неплохо вернуться к этому ответу, чтобы добавить несколько улучшений. Вот несколько идей:
Сценарий явно медленный, и ping ожидает ответа от хоста. По умолчанию ping для двух RTT, который может варьироваться в зависимости от того, насколько загружена ваша сеть, и, насколько я понимаю, протокол TCP удваивает время ожидания каждый раз (по крайней мере, согласно это ]). Таким образом, мы могли заставить ping истечь время ожидания с флагом -w 1 . Так как у нас 256 адресов, и мы предполагаем, что 1 секунда для каждого адреса, сценарий займет примерно 256/60 = 4,27 минуты.
Выполнение команды и последующее получение ее статуса выхода с помощью $? не было действительно необходимо. if . then; . fi может работать с командами напрямую. Другими словами, достаточно сделать следующее:
Команду printf можно переписать так:
Это скорее стилистическое изменение, но оно согласуется с тем, как printf работает и выглядит во многих других языках, с заключением в кавычки переменной «$ NUM» . Цитирование здесь не обязательно - поскольку мы имеем дело только с числами, нам не нужно ожидать разбиения слов из-за наличия пробелов в переменной.
Намного лучшего повышения производительности можно достичь, если мы создадим несколько фоновых процессов . Редактирование скрипта ниже делает именно это. Я поместил ping и printf в функцию pingf (да, банальное название, я знаю). Теперь есть еще одна единственная функция main , которая выполняет цикл и вызов pingf .
Насколько лучше это работает? Неплохо, на самом деле, занимает считанные секунды.
Читайте также: