Поиск компьютеров в локальной сети 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-адресами будет отображаться на вашем терминале. Смотрите скриншот

enter image description here

надеюсь помочь вам

Если все компьютеры в вашей сети - это 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 .

Насколько лучше это работает? Неплохо, на самом деле, занимает считанные секунды.

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