У моїй роботі багато комп’ютера, і я хочу пожартувати. Я можу закрити комп’ютер через мережу, але мені важко знайти IP-адреси.
Як мені легко знайти всі Інтернет-адреси IP від 192.168.1.aa до 192.168.1.zz?
У моїй роботі багато комп’ютера, і я хочу пожартувати. Я можу закрити комп’ютер через мережу, але мені важко знайти 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
Додаткові посилання див. На наступних сторінках:
Це дуже корисний інструмент для навчання.
Якщо всі комп'ютери у вашій мережі є 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-пакетів).
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 пристрої). Чому це?
nmap
.
arp-scan
гарний !
Примітка читачеві : Оригінальна відповідь була опублікована деякий час тому і в той час, коли я тільки вивчав сценарій оболонки. Дивіться оновлену версію нижче щодо нового та вдосконаленого сценарію, який працює набагато швидше.
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
Netdiscover може бути вашою відповіддю.
Щоб встановити через термінал:
sudo apt-get install netdiscover
Приклад використання:
sudo netdiscover -r 192.168.1.0/24 -i wlan0
На вашому терміналі відобразиться IP з адресами MAC. Дивіться скріншот
сподіваюся допомогти вам
*** buffer overflow detected ***: netdiscover terminated
.
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
щоб отримати більше уявлень.
angry ip scanner