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

82

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

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

    
задан Eric Carvalho 02.12.2012 в 12:35
источник

5 ответов

125

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

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

    
ответ дан Kevin Bowen 02.12.2012 в 12:51
источник
35

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

    
ответ дан Eric Carvalho 02.12.2012 в 16:07
14

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

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

sudo apt-get install netdiscover

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

sudo netdiscover -r 192.168.1.0/24 -i wlan0

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

надеюсь,чтовы

ссылка

    
ответ дан SP3B 03.08.2015 в 08:25
14

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

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

nmap будет моим выбором # 1, но что, если у вас его нет? Метод DIY будет иметь скрипт 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.
ответ дан Sergiy Kolodyazhnyy 03.08.2015 в 09:43
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 , чтобы получить больше информации.

    
ответ дан heemayl 21.02.2016 в 03:21