Создание сценария для сканирования IP-адресов [dубликат]

Короткий ответ: ДА! Вы получили это на 100% правильно. Хотя, если вы хотите сделать эту переменную доступной для других скриптов, не забудьте запустить export TARGET.

81
задан 2 December 2012 в 21:14

10 ответов

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

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

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

117
ответ дан 18 July 2018 в 01:59

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

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

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

118
ответ дан 24 July 2018 в 17:29

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

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

sudo apt-get install netdiscover

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

sudo netdiscover -r 192.168.1.0/24 -i wlan0

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

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

13
ответ дан 18 July 2018 в 01:59

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

35
ответ дан 18 July 2018 в 01:59

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, чтобы получить больше информации.

4
ответ дан 18 July 2018 в 01:59

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

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

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

Revisited Answer

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

Скрипт явно медленный, и ping ждет ответа от хоста. По умолчанию ping для двух RTT, которые могут различаться в зависимости от того, насколько перегружена ваша сеть, и насколько я понимаю протокол TCP удваивает время ожидания каждый раз (по крайней мере, в соответствии с этим). Поэтому мы могли бы заставить ping тайм-аут с флагом -w 1. Поскольку у нас 256 адресов, и мы принимаем 1 секунду для каждого адреса, сценарий займет около 256/60 = 4,27 минуты. Выполнение команды, а затем захват ее статуса выхода с помощью $? не было действительно необходимым. [F13] может работать с командами напрямую. Другими словами, этого достаточно: 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

Вещи для поддержания в уме

Скрипт явно медленный, и ping ждет ответа от хоста. По умолчанию ping для двух RTT, которые могут различаться в зависимости от того, насколько перегружена ваша сеть, и насколько я понимаю протокол TCP удваивает время ожидания каждый раз (по крайней мере, в соответствии с этим). Поэтому мы могли бы заставить ping тайм-аут с флагом -w 1. Поскольку у нас 256 адресов, и мы принимаем 1 секунду для каждого адреса, сценарий займет около 256/60 = 4,27 минут.
13
ответ дан 18 July 2018 в 01:59

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

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

sudo apt-get install netdiscover

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

sudo netdiscover -r 192.168.1.0/24 -i wlan0

IP с MAC Addreses будет показать на своем терминале. См. Скриншот

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

13
ответ дан 24 July 2018 в 17:29

если все компьютеры в вашей сети Ubuntu или любой другой дистрибутив, который использует avahi-daemon (ДНС-Южная Дакота), вы можете получить подробный их список (с хоста и 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-пакетов).

35
ответ дан 24 July 2018 в 17:29
  • 1
    Эта команда определенно лучше, чем выше. Запуск nmap занимал возрасты, но этот ответ мгновенно отвечал узлам в указанной сети. – JohnMerlino 14 April 2014 в 05:19
  • 2
    В моем случае очень часто 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 26 March 2016 в 20:12
  • 3
    Возможно, я нашел ответ в комментарии к другому вопросу. «Следует отметить, что некоторые устройства могут не отображаться, если они не включены. Моя связь 4 не появится, если экран не включен. & Quot; Тем не менее, интересно, что одни и те же устройства всегда реагируют на пинги с nmap. – tigerjack89 26 March 2016 в 20:22
  • 4
    arp-scan приятно! – ForzaGreen 27 June 2017 в 22:04

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, чтобы получить больше информации.

4
ответ дан 24 July 2018 в 17:29

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

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

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

Revisited Answer

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

Скрипт явно медленный, и ping ждет ответа от хоста. По умолчанию ping для двух RTT, которые могут различаться в зависимости от того, насколько перегружена ваша сеть, и насколько я понимаю протокол TCP удваивает время ожидания каждый раз (по крайней мере, в соответствии с этим). Поэтому мы могли бы заставить ping тайм-аут с флагом -w 1. Поскольку у нас 256 адресов, и мы принимаем 1 секунду для каждого адреса, сценарий займет около 256/60 = 4,27 минуты. Выполнение команды, а затем захват ее статуса выхода с помощью $? не было действительно необходимым. [F13] может работать с командами напрямую. Другими словами, этого достаточно: 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

Вещи для поддержания в уме

Скрипт явно медленный, и ping ждет ответа от хоста. По умолчанию ping для двух RTT, которые могут различаться в зависимости от того, насколько перегружена ваша сеть, и насколько я понимаю протокол TCP удваивает время ожидания каждый раз (по крайней мере, в соответствии с этим). Поэтому мы могли бы заставить ping тайм-аут с флагом -w 1. Поскольку у нас 256 адресов, и мы принимаем 1 секунду для каждого адреса, сценарий займет около 256/60 = 4,27 минут.
13
ответ дан 24 July 2018 в 17:29

Другие вопросы по тегам:

Похожие вопросы: