Как найти все используемые IP-адреса в сети

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

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

Как я могу легко найти все онлайн IP-адреса от 192.168.1.aa до 192.168.1.zz?

Вообще, nmap весьма полезен для быстрой проверки сетей.

Чтобы установить nmap, введите следующую команду в терминале:

sudo apt-get install nmap

После установки приложения введите следующую команду:

nmap -sn 192.168.1.0/24

Это покажет вам, какие узлы ответили на запросы ping в сети между 192.168.1.0 и 192.168.1.255.


Для старых версий Nmap используйте -sP:

nmap -sP 192.168.1.0/24

Для дополнительной информации смотрите следующие страницы:

Руководство по установке NMAP

Руководство по NMAP

Это очень полезный инструмент для изучения.

Если все компьютеры в вашей сети используют Ubuntu или какое-либо другое дистрибутив, использующий avahi-daemon (DNS-SD), вы можете получить детальный список их (с именем хоста и IP-адресом), используя:

avahi-browse -rt _workstation._tcp

Если вы хотите узнать все IP-адреса, используемые в вашей сети, вы можете использовать arp-scan:

sudo arp-scan 192.168.1.0/24

Так как он не установлен по умолчанию, вам нужно будет установить его с помощью sudo apt-get install arp-scan. arp-scan отправляет ARP-пакеты в локальную сеть и отображает полученные ответы, поэтому он показывает даже защищённые узлы (которые блокируют трафик на основе IP-пакетов).

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

Оригинальный ответ

nmap был бы моим выбором №1, но что, если его нет? Простейший способ — это скрипт ping, который поочерёдно проверяет каждый возможный IP-адрес в сети. У нас здесь просто цикл while, где мы задаём последний номер в адресе, делаем молчаливый одиночный ping на адрес, проверяем, удалось ли выполнение команды или нет (если удалось, то хост явно доступен), и используем команду printf. Быстрый и грязный способ, занял у меня примерно 10 минут на написание, но время выполнения может быть несколько медленным.

#!/bin/sh
# set -x
NUM=1

while [ $NUM -lt 256  ];do 
    ping -q -c 1 192.168.0.$NUM > /dev/null 
    RESULT=$(echo $?)
    if [ $RESULT -eq 0 ]; then 
        printf 192.168.0.$NUM"\n"
    fi
    NUM=$(expr $NUM + 1)
done

Пересмотренный ответ

Изначально я разместил этот ответ в августе 2015 года. С тех пор я узнал немного больше о написании скриптов, и как только я увидел этот скрипт, я подумал, что будет неплохо пересмотреть его, добавив несколько улучшений. Вот несколько идей:

  • Скрипт, очевидно, медленный, а ping ожидает ответа от хоста. По умолчанию, ping ожидает два RTT, которые могут варьироваться в зависимости от загруженности вашей сети, и, насколько я понимаю, протокол TCP удваивает время ожидания каждый раз (по крайней мере, согласно этому). Поэтому мы могли бы заставить ping завершаться через -w 1. Так как у нас 256 адресов и, предположим, по 1 секунде на каждый адрес, скрипт займёт около 256/60 = 4.27 минут.

  • Выполнение команды, а затем захват её статуса завершения с помощью $? было не совсем необходимо. if ... then;...fi может использовать команды напрямую. Другими словами, достаточно сделать вот так:

    if ping -w 1 -q -c 1 192.168.0.$NUM > /dev/null ;
    then
         <some other code here>
    fi
    
  • Команду printf можно переписать следующим образом:

    printf "IP %s is up\n" 192.168.0."$NUM"
    

    Это больше стилистическое изменение, но оно соответствует тому, как printf работает и выглядит во многих других языках, с кавычками вокруг переменной "$NUM". Кавычки здесь не обязательны, так как мы имеем дело только с числами, нам не надо ожидать разбиения на слова из-за наличия пробелов в переменной.

  • Гораздо более существенное улучшение производительности может быть достигнуто, если мы создадим несколько фоновых процессов. Редактированный ниже скрипт делает именно это. Я разместил ping и printf в функции pingf (да, банальное название, я знаю). Теперь есть одна функция main, которая выполняет цикл и вызывает pingf.

#!/bin/sh
# Uncomment for debugging
#set -x
pingf(){
    if ping -w 2 -q -c 1 192.168.0."$1" > /dev/null ;
    then 
        printf "IP %s is up\n" 192.168.0."$1"
    fi
}

main(){

    NUM=1
    while [ $NUM -lt 255  ];do 
        pingf "$NUM" &
        NUM=$(expr "$NUM" + 1)
    done
    wait
}

main

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

$ time ./ping_script.sh                                                                      
IP 192.168.0.1 is up
IP 192.168.0.101 is up
IP 192.168.0.27 is up
IP 192.168.0.29 is up
    0m02.50s real     0m00.01s user     0m00.12s system

Вещи, которые следует учитывать

  • Windows (начиная с Windows 7, я думаю) начали блокировать ответ на запросы ICMP. На Ask Ubuntu и других подобных сайтах есть множество вопросов типа “Эй, мой Linux-компьютер отвечает на ping, а Windows-нет, что происходит?”. Просто имейте в виду, что для новых версий Windows вам нужно включить ответ на запросы ICMP.

Netdiscover может быть вашим решением.

Чтобы установить через терминал:

sudo apt-get install netdiscover

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

sudo netdiscover -r 192.168.1.0/24 -i wlan0

На вашем терминале отобразятся IP с MAC-адресами. Смотрите скриншот

введите описание изображения здесь

надеюсь, это поможет вам

ссылка

fping отличная утилита для сканирования нескольких хостов в сети через ICMP. Если не установлена, вы можете установить её следующим образом:

sudo apt-get install fping

fping отправляет ICMP ECHO_REQUEST пакеты и помечает хост как доступный, если получает ECHO_RESPONSE от хоста.

Например, чтобы просканировать хосты подсети 192.168.1.0/24, вы можете сделать следующее:

fping -g 192.168.1.0/24

Для конкретного числа хостов, например, от 192.168.1.15 до 192.168.1.140:

fping -g 192.168.1.15 192.168.1.140

fping весьма настраиваемый, например, можно настроить, сколько пакетов будет отправлено, время ожидания ответа, формат вывода и т.д.

Изучите man fping для получения большей информации.

Это работает для моих целей. Запустите на сервере/точке доступа:

#!/bin/bash

# создаёт два файла и сопоставляет их для получения
# текущих действительных IP-адресов в сети

echo
echo "Текущие подключенные IP-адреса:"
echo
# это выводит IP и MAC-адреса соседей
ip -r neigh > neighborhood.tmp

# замените wlan0 на любой интерфейс, который хотите изучить.
iw dev wlan0 station dump | grep Station > stations.tmp

# цикл для сопоставления двух файлов
while read station; do
  mac=$(echo $station | awk '{print $2}')
  while read neighbor; do
    testmac=$(echo $neighbor | awk '{print $5}')
    if [ $testmac == $mac ]; then
      echo -e "\t$(echo $neighbor | awk '{print $1}')"
    fi
  done < neighborhood.tmp
done < stations.tmp

rm neighborhood.tmp; rm stations.tmp
echo

Ваши результаты могут отличаться.

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

#!/bin/bash
#ip -r neigh
echo " ping -c1 ${1}.{1..254}"
scannet() { for IP in "${1}."{1..254}; do ping -c1 $IP | grep "64 bytes" & done;  wait ;}
# ждём получения ответа или время - sleep 6; : ; sleep 1 "
#
scan () { Devices=$(scannet "${1}" 2>/dev/null); echo "$Devices"; echo "# Done" ;}
scan ${1}

Например: сохраните как ~/bin/scannet.sh # scannet.sh 192.168.1

.

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

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

Теоретическая часть

Каждое устройство в вашей локальной сети имеет уникальный IP-адрес. Эти адреса задаются либо статически, либо назначаются динамически через DHCP-сервер. Для системного администратора или IT-специалиста важно иметь список активных IP-адресов для мониторинга использования сети и, если необходимо, для проведения какой-либо сетевой диагностики или инвентаризации.

Для поиска IP-адресов можно использовать несколько утилит и методов:

  1. Nmap — популярный инструмент для сканирования сети, который поддерживает определение активных хостов через ICMP-пинг или TCP/UDP-пробы.
  2. Arp-scan — инструмент, работающий на основе ARP-пакетов, который может выявить большинство устройств в локальной сети, включая те, которые не отвечают на стандартные ICMP-запросы.
  3. Avahi — протокол для обнаружения служб в локальной сети на основе DNS-SD, полезный в средах, где используются устройства на базе Linux.
  4. Netdiscover и Fping — дополнительные инструменты, которые могут быть полезны в специфических сценариях для получения быстрого результата.

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

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

Первый шаг — установить nmap и использовать его для простого пинг-сканирования:

sudo apt-get install nmap
nmap -sn 192.168.1.0/24

Данный метод позволяет обнаружить все устройства, которые ответят на ICMP ECHO, пожалуй, наиболее универсальный и быстрый способ из всех перечисленных.

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

Этот инструмент полезен для выявления даже тех устройств, которые не отвечают на ICMP-запросы:

sudo apt-get install arp-scan
sudo arp-scan 192.168.1.0/24

ARP-сканирование работает на уровне канального протокола, максимально приближаясь к "железу", что делает его крайне эффективным.

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

Для пакетной отправки ICMP-запросов:

sudo apt-get install fping
fping -g 192.168.1.0/24

Fping позволяет быстро сканировать большую сеть, определяя живые узлы.

Применение на практике

С практической точки зрения, сканирование сети необходимо не только для шуток или детских забав, как вы упоминали. Управление IP-адресами важно для обеспечения безопасности, оптимизации работы сети и предотвращения конфликтов адресов. Хорошее понимание используемых инструментов и методов позволяет IT-специалисту проводить диагностику сети быстро и эффективно, получая детальную информацию о каждом активном устройстве.

В каждом из рассмотренных методов есть свои преимущества и недостатки, и выбор решения зависит от конкретных условий и задач. Например, Nmap и Arp-scan будет полезен для общего инвентаря сети, в то время как Avahi и другие мультимедиа-протоколы полезны для специфических сред Ubuntu.

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

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

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

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