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


94

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

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


4
попробуйтеangry ip scanner
Web-E


2
шутки в сторону? Вы хотите, чтобы наша помощь разыгрывала ваших коллег?
Дан Х

Ответы:


141

Как правило, 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

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


2
Не все хосты отвечают на пинги. ARP - это путь, по крайней мере, в IPv4.
Марцин Камински

3
этого достаточно для меня, и это работает в Интернете

1
это только мой компьютер, или эта команда выполняется вечно?
JohnMerlino

4
Обратите внимание, чтобы ускорить сканирование nmap, вы должны добавить флаги -T4 (скорость) и -n (только числовые).
Сергей Колодяжный

3
Помните, что вам нужен sudo для команды nmap, иначе возвращается ноль результатов.
machineaddict

40

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


3
Эта команда определенно лучше, чем приведенная выше. Запуск nmap занял много лет, но тот немедленно ответил с узлами в указанной сети.
JohnMerlino

3
В моем случае очень часто arp-scanне находит все устройства, связанные с моей беспроводной сетью. Теперь, например, sudo arp-scan 192.168.2.0/24показывает 2 результата (.1 и .1), а nmap -sn 192.168.2.0/24показывает 4 результата (.1, .2, .3 и .4). Итак, кажется, что nmapэто более точно (я точно знаю, что к сети подключено 4 устройства). Почему это?
tigerjack89

2
Возможно, я нашел ответ в комментарии к другому вопросу. «Следует отметить, что некоторые устройства могут не отображаться, если они не включены. Мой Nexus 4 не будет отображаться, если не включен экран». Тем не менее, интересно, что одни и те же устройства всегда отвечают на эхо-запросы nmap.
tigerjack89

arp-scanэто мило !
forzagreen

17

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

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

nmapбыл бы моим выбором № 1, но что, если у вас его нет? Самодельный способ будет с помощью сценария ping, который проходит через каждый возможный IP-адрес в сети вручную. Здесь мы имеем только цикл while, где мы устанавливаем последнее число в адресе, делаем одиночный пинг по адресу, проверяем, выполнена ли команда успешно или нет (и если она прошла успешно, то, очевидно, хост работает) и 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 может быть проверен, но не Windows, что с этим?» Просто помните о том, что для более новых версий Windows вам необходимо включить ответ на эхо-запрос ICMP.

2
Мне нравится такое решение
Szenis

15

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

Для установки через терминал:

sudo apt-get install netdiscover

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

sudo netdiscover -r 192.168.1.0/24 -i wlan0

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

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

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

ссылка


Кажется , очень плохо, попробуйте сначала и*** buffer overflow detected ***: netdiscover terminated .
Пабло А

Этот инструмент не находит несколько вещей в моей сети.
Энтони

4

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

sudo apt-get install fping

fping отправляет пакеты ICMP ECHO_REQUEST и помечает хост как Up, если он получает 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чтобы получить больше идей.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.