Как я могу перечислить все IP-адреса в подключенной сети, желательно через Терминал?

Вопрос или проблема

Используя командную строку Ubuntu 10.10, как я могу перечислить все IP-адреса, подключенные к моей домашней сети?

Идеально, чтобы это была команда CLI, так как я буду запускать ее из C++.

Попробуйте команду arp-scan – вам, вероятно, придется ее установить, например:

sudo apt-get install arp-scan

http://manpages.ubuntu.com/manpages/hardy/man1/arp-scan.1.html

И для более детальной информации:

sudo arp-scan --interface=eth0 --localnet

Где eth0 – это ваше устройство. Вы можете найти ваше устройство с помощью:

ifconfig

Используйте nmap. пример: nmap -sn 10.10.10.0/24 Кэш arp покажет только те, с которыми вы недавно пытались связаться.

В Windows это будет arp -a, эквивалентом этого в Linux будет arp -e.

Из страницы man для arp:

arp без указания режима выведет текущее содержимое таблицы.
-e : Используйте формат вывода в стиле Linux по умолчанию (с фиксированными столбцами).

Если ваша сеть 192.168.0.0/24, создайте исполняемый файл с следующим кодом; Измените 192.168.0 на вашу фактическую сеть.

#!/bin/bash
for ip in 192.168.0.{1..254}; do
  ping -c 1 -W 1 $ip | grep "64 bytes" &
done

Попробуйте установить nmap (sudo apt-get install nmap) и введите nmap 192.168.1.0/24, заменив 192.168.1 первыми тремя частями вашего IP-адреса (узнайте его с помощью ip addr).

Вы также можете получить немного менее точную (по моему опыту) карту сети, запустив ping 192.168.1.255 (снова заменив 192.168.1), что должно вызвать ping для каждой машины в сети, но, по моему опыту, это не всегда работает правильно.

Для более компактного списка подключенных устройств:

nmap -sL 192.168.0.* | grep \(1

Объяснение.

nmap -sL 192.168.0.* выведет все IP-адреса в подсети и отметит те, которые имеют имя:

Nmap scan report for 192.168.0.0
Nmap scan report for Dlink-Router.Dlink (192.168.0.1)
Nmap scan report for 192.168.0.2
...
Nmap scan report for android-473e80f183648322.Dlink (192.168.0.53)
...
Nmap scan report for 192.168.0.255

Так как все интересные записи начинаются со скобки ( и цифры 1, мы фильтруем их с помощью | grep \(1 (для скобки необходим обратный слэш)

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

Получил следующий результат на Nexus, используя tmux, так как arp-scan нет в репозитории, но nmap был предустановлен, отображает только IP-адреса:

nmap -sn 192.168.1.1-254/24 | egrep "scan report" | awk '{print $5}'

Этот ответ самостоятельно определяет подсеть, в отличие от других ответов, где вы должны её указать.

Скрипт использует arp -a или ip -o -f inet addr show, чтобы найти подсеть.

Я разработал скрипт, основываясь на ответах @anders-larsson и @mathieu-caroff. Я избегаю использования ‘nmap’, но скрипт легко подгонять под использование nmap.

По сути, $baseip строится с использованием макросов замены bash во второй части скрипта, если параметр не предоставлен в командной строке. В противном случае он будет сканировать предоставленную подсеть (в формате: 192.1.5 без третьей точки последнего байта IP).

#!/bin/bash
function scan ()
{
    for ip in $1.{1..254}; do
        ping -c 1 -W 1 $ip &
    done | sed -nE 's:^.* from ([0-9.]+).*time=(.*s)$:\1 (\2):p'
    wait
}

if [ $1 ]; then
    for baseip; do
        scan $baseip
    done
else
    baseip=$(arp -a) && baseip=${baseip%%\)*} && baseip=${baseip##*\(}
    if [ $baseip"" == "" ] ; then
      baseip=$(ip -o -f inet addr show|grep "scope global") && baseip=${baseip##* inet} && baseip=${baseip%%/*}
    fi
    baseip=${baseip%.*}
    scan $baseip 
fi

Развивая ответ Андерса Ларссона –

#!/bin/bash
function scan ()
{
    for ip in $1.{1..254}; do
        ping -c 1 -W 1 $ip &
    done | sed -nE 's:^.* from ([0-9.]+).*time=(.*s)$:\1 (\2):p'
}

if [ $1 ]; then
    for baseip; do
        scan $baseip
    done
else
    scan 192.168.1
fi

Вот еще одно решение в терминале:

nmap -sn 192.168.1.0/24

(если IP вашего маршрутизатора начинается с 192.168.1._ )

или

ip n

или

ip -r n

Это работает для моих целей.

#!/bin/bash
# Ex : write as ~/bin/netscan.sh; chmod +x ~/bin/netscan.sh; ~/bin/netscan.sh 192.168.1
# cat /sys/class/net/*/address ; cat /sys/class/net/$(ip route show default | awk '/default/ {print $5}')/address

scannet() { for IP in "${1}."{1..254}; do ping -c1 $IP | grep "64 bytes" & done;  wait ;}
# wait for receive or time - sleep 6; : ; sleep 1 "
sleep 2 # for some sleepers
#
scan () { Devices=$(scannet "${1}" 2>/dev/null); echo "$Devices"; echo "# Done" ;}

if [[ $1 = '' ]]; then

  output=$(ip route list exact default)
  # ip route show default
  echo "$output"
  read  null null default null dev null <<< "$output"
  srcvalue=${null##*src } srcvalue=${srcvalue%% *}
  value=${default%.*}
  echo
  echo "default = $dev $srcvalue $default '${value}.0/24'"
  echo
  echo "### Ex : netscan.sh $value ; netscan.sh 192.168.1 -"'[${1}].{1..254}'
  echo "### ip route list exact default"
  echo "### ip -resolve show"
  echo "### ip -resolve neighb show {IP}"
  echo "### sudo nmap -O -n '${value}.*' ###"
  echo
  echo "# Wait - ping -c1 ${value}"'.{1..254} :'
  scan ${value}
  echo
  PresentIP=$(ip neighb show | grep "lladdr")
  echo "# Net : $dev $srcvalue : ip neighb show :"
  echo "$PresentIP"
  exit
else
 echo "### ping -c1 ${1}.{1..254}"
 echo "### Ex : ip route list exact default ; ip -resolve neigh show ; sudo nmap -O ${1}. ###"
 echo "# Wait - ping -c1 ${1}"'.{1..254} :'
 scan ${1}
 PresentIP=$(ip neighb show | grep "lladdr")
 echo "# ip neighb show :"
 echo "$PresentIP"
 exit
fi

Пример: напишите как ~/bin/netscan.sh # netscan.sh 192.168.1

.

Ответ или решение

Для поиска всех IP-адресов, подключенных к домашней сети, используя командную строку Ubuntu 10.10, существует несколько подходов. Ниже описаны наиболее эффективные и распространенные способы решения этой задачи.

Теория

Основная задача заключается в определении всех активных устройств в локальной сети, что требует выполнения сетевого сканирования. Существует множество инструментов, которые могут помочь в этом, но наиболее распространенные — это nmap и arp-scan. Каждый из этих инструментов имеет свои сильные и слабые стороны, о которых стоит упомянуть.

nmap — это мощный инструмент для сканирования сети, который может обнаружить активные устройства, определить их IP и MAC-адреса, а также выяснить многие другие параметры. Он использует ICMP-запросы и запросы на открытие TCP/UDP-портов для идентификации устройств.

arp-scan — это более простой инструмент, который использует ARP-запросы для определения активных устройств в сети. Он хорош для быстрого и простого сканирования сети на уровне второго уровня модели OSI.

Пример

Установка инструментов

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

sudo apt-get install nmap
sudo apt-get install arp-scan

Использование nmap

nmap может быть использован для простого поиска всех устройств в сети:

nmap -sn 192.168.1.0/24

В этой команде 192.168.1.0/24 должно быть заменено на вашу конкретную IP-подсеть. Команда -sn указывает nmap на выполнение простого пинга без полного сканирования портов.

Использование arp-scan

arp-scan предоставляет более быстрый метод для получения информации о всех устройствах в вашей сети:

sudo arp-scan --interface=eth0 --localnet

Здесь eth0 замените на имя вашего сетевого интерфейса, чтобы узнать его, выполните команду ifconfig или ip addr.

Применение

Для автоматизации процесса или интеграции его в вашу программу на C++, можно использовать либо системные вызовы для выполнения команд, либо взаимодействовать с сетью напрямую через API и библиотеки, такие как libpcap для C++, которые предоставляют функциональность для работы на более низком уровне сети.

Автоматизация через Bash скрипт

Для удобства можно написать скрипт, который будет выполнять перечисленные действия и выводить список доступных IP-адресов. Приведем пример:

#!/bin/bash
SUBNET="192.168.1"
for ip in $SUBNET.{1..254}; do
  ping -c 1 -W 1 $ip | grep "64 bytes" &
done
wait

Этот скрипт выполняет пинг всех IP-адресов в указанной подсети и отображает только те, которые доступны.

Заключение

Выбор метода зависит от ваших целей: если требуется простота и быстрота — arp-scan, если глубина анализа и дополнительные данные — nmap. Однако нужно помнить, что оба метода имеют ограничения, зависящие от конфигурации сети и настроек оборудования (например, отключение ответов на ICMP-запросы).

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

Оцените материал
Добавить комментарий

Капча загружается...