Як знайти всі використовувані IP-адреси в мережі


94

У моїй роботі багато комп’ютера, і я хочу пожартувати. Я можу закрити комп’ютер через мережу, але мені важко знайти IP-адреси.

Як мені легко знайти всі Інтернет-адреси IP від ​​192.168.1.aa до 192.168.1.zz?


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


2
серйозно? Ви хочете, щоб наша допомога розіграла ваших колег?
Dan H

Відповіді:


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 (speed) та -n (тільки цифрові).
Сергій Колодяжний

3
Пам'ятайте, що вам потрібен sudo для nmap команди, інакше повернеться нульові результати.
машинобудівний вирок

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
Можливо, я знайшов відповідь у коментарі до іншого питання. "Слід зазначити, що деякі пристрої можуть не відображатися, якщо вони не увімкнено. Мій зв’язок 4 не з’явиться, якщо екран не увімкнений." Однак цікаво, що одні й ті ж пристрої завжди реагують на пінг-файли з nmap.
tigerjack89

arp-scanгарний !
forzagreen

17

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

Оригінальний відповідь

nmapбув би моїм вибором №1, але що робити, якщо у вас його немає? Шлях "Зробіть сам" - це сценарій ping, який проходить через кожну можливу IP-адресу в мережі вручну. У нас тут є лише цикл, коли ми встановлюємо останнє число в адресу, робимо безшумний одиночний 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 може пінгнути, але не 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.