Як використовувати Linux для пошуку невикористаних IP-адрес у своїй мережі?


28

У мене в мережі є доступ до двох комп’ютерів (A і B). Обидва отримали статичну IP-адресу з маскою підмережі 255.255.255.128 (я перевірив , чи не використовується сервер DHCP). Я хочу налаштувати кілька IP-адрес на одній машині, і тому я хочу знати, які всі IP-адреси вже використовуються в підмережі.

З попереднього запитання я спробував nmap -sP -PR 172.16.128.*командувати, але я скептично ставлюсь до її результату, оскільки одна і та ж команда дає різні результати на моїх двох комп’ютерах (A і B). На А, результат показує, список 8 адрес , які (ймовірно) вже використовується, в тому числі з А і В .

Nmap done: 256 IP addresses (8 hosts up) scanned in 1.23 seconds

Але на B результат результат інший, тобто

Nmap done: 256 IP addresses (0 hosts up) scanned in 0.00 seconds

Результат на B - навіть не показ власної IP-адреси, а також IP-адреси A!

Що саме я тут роблю неправильно? Чи є в Red Hat Linux (RHEL) якийсь бездоганний спосіб виявити всі IP-адреси, які використовуються в підмережі, до якої входить мій комп'ютер?

RHEL: 6.5
Nmap version: 5.51

9
Хто керує мережею? У вас є дозвіл на призначення довільних IP-адрес вашим хостам?
Роджер Ліпскомб

4
Так, я маю дозвіл. Це гарне запитання.
Вішал Шарма

11
Єдиний спосіб отримати правильну відповідь - це запитати у вашого адміністратора мережі. Все, що ви робите, ризикує бути неточним, оскільки пристрої можуть бути вимкнені, перезавантажені, відреагувати тощо.
Джон Бентлі

7
Щоб завершити коментарі Роджера та Йона, якщо IP-адреси у вашій мережі призначаються вручну та без DHCP, десь повинен бути реєстр (нехай це буде база даних, аркуш Excel або старий каталог паперу), де записується кожен розподіл IP-адреси та люди Управління мережею повинно мати та використовувати цю інформацію. Жодне технічне рішення не гарантує, що ви не бажаєте красти IP-адресу іншої машини (нехай це буде сервер вниз або віддалений користувальницький ноутбук). Якщо цей реєстр втрачено чи не існує, необхідний повний інвентар.
закінстер

Вам слід навести заздалегідь відзначені IP-адреси, щоб ваша оболонка не намагалася розширити її як можливе ім'я файлу. Наприклад,nmap -sP -PR '172.16.128.*'
roaima

Відповіді:


39

Будь-який добре сприйнятий пристрій в локальній мережі Ethernet може ігнорувати майже будь-який трафік, тому PING, сканування портів тощо подібні не є надійними. Однак пристрої не можуть ігнорувати ARP-запити , afaik. З огляду на те, що ви вказуєте, що ви скануєте локальну мережу, я знаходжу найменш крихкий метод зробити те, що ви хочете, - спробувати підключитися до віддаленої адреси, а потім заглянути в мій кеш ARP.

Ось простий нефільтруючий пристрій (тобто той, який не налаштований ігнорувати деякі класи IP-трафіку):

[me@risby tmp]$ ping -c 1 -W 1 192.168.3.1
PING 192.168.3.1 (192.168.3.1) 56(84) bytes of data.
64 bytes from 192.168.3.1: icmp_seq=1 ttl=64 time=0.351 ms
[...]
[me@risby tmp]$ arp -a -n|grep -w 192.168.3.1
? (192.168.3.1) at b8:27:eb:05:f5:71 [ether] on p1p1

Ось фільтруючий пристрій (налаштований на один рядок, iptablesщоб ігнорувати весь трафік):

[me@risby tmp]$ ping -c 1 -W 1 192.168.3.31
[...]
1 packets transmitted, 0 received, 100% packet loss, time 0ms
[me@risby tmp]$ arp -a -n|grep -w 192.168.3.31
? (192.168.3.31) at b8:27:eb:02:e4:46 [ether] on p1p1

Ось пристрій, який просто вниз; відзначте відсутність MAC-адреси:

[me@risby tmp]$ ping -c 1 -W 1 192.168.3.241
[...]
1 packets transmitted, 0 received, 100% packet loss, time 0ms
[me@risby tmp]$ arp -a -n|grep -w 192.168.3.241
? (192.168.3.241) at <incomplete> on p1p1

Цей метод не є непогрішним - він пропускає пристрої, які вимкнено, з одного - але це найменш жахливий метод, який я ще намагався.

Редагувати : Ерік Дюмініл, так, він працює лише в локальній мережі; див. абзац перший.

Вішаль, методи функціонально ідентичні. Зверніть увагу на текст, цитований у відповіді Лева про nmap:

Коли привілейований користувач намагається сканувати цілі в локальній мережі Ethernet, використовуються запити ARP, якщо не --send-ipбуло вказано.

Його метод передбачає менше типізації. Виконувати шахту можна без пільг і може краще зрозуміти, що відбувається насправді. Але те ж саме робиться на дроті в обох випадках.


2
Це працює лише з пристроями тієї ж локальної мережі, правда? Я спробував це на моєму сервері, запити ping скидаються десь між ними, і я не можу знайти відповідну лінію arp.
Ерік Думініл

Дякуємо за відповідь. Мені просто хотілося знати, як ваш метод порівнюється з методом @Leo? Чи краще це в чомусь (бо інакше простіше використовувати лише одну команду).
Вішал Шарма

2
@VishalSharma, EricDuminil: див. Редагування вище.
MadHatter підтримує Моніку

Щоб було зрозуміло, чи означає це, що метод @ Лео буде подібний до вашого лише тоді, коли він використовується привілейованим користувачем, а отже, коли його використовує непривілейований користувач, результат не буде повним / неправильним? Також під привілейованим користувачем ви маєте на увазі користувача, який має доступ до sudo?
Вішал Шарма

1
@VishalSharma перша частина вашого коментаря правильна. Привілейований користувач включає в себе щось , що робиться під цим sudo -u root(часто скорочується до sudo), а також просто входить у систему як корінь або зробив /bin/su, отже, термін парасольки.
MadHatter підтримує Моніку

20

Оскільки пристрій не може ігнорувати ARP-запити, я люблю використовувати інструмент з назвою arp-scan. Він доступний у більшості сховищ.

Коли ви запускаєте команду за допомогою --localnetперемикача, вона надасть вам огляд всієї вашої внутрішньої мережі.

sudo arp-scan --localnet

Подає мені список усіх IP-та MAC-адрес у моїй мережі. Також можна вказати діапазон мережі для сканування.

sudo arp-scan 172.16.128.0/25

Якщо у вас налаштовано кілька мережевих інтерфейсів, ви можете вказати той, який ви хочете використовувати з комутатором -I.

sudo arp-scan -I eth0 172.16.128.0/25

Більш детальну інформацію про можливі перемикачі можна знайти на https://linux.die.net/man/1/arp-scan або запустивши man arp-scan.


Схоже на перспективний інструмент, але він не постачається з RHEL 6.5 (у моєму випадку, як мінімум, він відсутній).
Вішал Шарма

@VishalSharma Це прикро. Він доступний для CentOS, тому я би подумав, що він повинен бути доступний і на RHEL.
Торкі

4
Він знаходиться в EPEL, додаткових пакетах Fedora для Enterprise Linux.
mattdm

Не працює, якщо працює LaBrea.
Джошудсон

@joshudson Я майже впевнений, що жоден інструмент / програмне забезпечення не може сканувати мережу на невикористані IP-адреси, коли LaBrea працює.
Торкі

11

Я не знаю, яку версію nmap ви використовуєте у вашій Red Hat 6.5, але для останніх випусків правильним (і швидшим) способом я вважаю це:

nmap -sn -n 172.16.128.0/25

Тут відображатиметься список усіх хостів у вашій мережі (отже, ви можете використовувати будь-який інший IP з цієї підмережі, як це має бути доступно).

Редагування та зауваження: підмережа, яку ви згадуєте, становить 255.255.255.128, але тоді ви показуєте вихід як сканування 254 хостів. Якщо я щось не пропускаю, це має бути маска / 25 та 126 хостів. Якщо ви хочете сканувати a / 24, змініть команду вище, щоб запитувати всіх 254 хостів.

З книги nmap -sPвін припиняється та замінюється наступним -sn:

-sn (Немає сканування портів)

Цей параметр повідомляє Nmap не робити сканування портів після виявлення хоста, а роздруковувати лише доступні хости, які відповіли на зонди виявлення хоста. Це часто відоме як "сканування пінг", але ви також можете попросити запустити сценарії відстеження та хост-сценарії NSE. Це за замовчуванням на один крок більш нав'язливий, ніж сканування списку, і його часто можна використовувати для тих же цілей. Це дозволяє легко розвідувати цільову мережу, не привертаючи особливої ​​уваги. Знання того, скільки хостів нараховується, є більш цінним для зловмисників, ніж список, який надається скануванням списку кожного окремого IP-адреси та імені хоста.

Системні адміністратори також часто вважають цей варіант цінним. Його можна легко використовувати для підрахунку доступних машин у мережі або для моніторингу наявності сервера. Це часто називають розгортанням пінг-програми і є більш надійним, ніж пінг-адреса широкомовної програми, оскільки багато хостів не відповідають на запити широкомовної програми.

Виявлення хоста за замовчуванням, виконане за допомогою -sn, складається з запиту ехо ICMP, TCP SYN до порту 443, TCP ACK до порту 80 та запиту часової мітки ICMP за замовчуванням. Коли виконується непривілейованим користувачем, лише SYN-пакети надсилаються (використовуючи дзвінок підключення) до портів 80 та 443 в цільовій. Коли привілейований користувач намагається сканувати цілі в локальній мережі Ethernet, використовуються ARP-запити, якщо не вказано --send-ip. Для більшої гнучкості параметр -sn може поєднуватися з будь-яким із типів зондування відкриття (параметри -P *, виключаючи -Pn). Якщо використовується будь-який з цих параметрів типу зонду та номера порту, зонди за замовчуванням переосмислюються. Якщо між вихідним хостом, на якому працює Nmap, і цільовою мережею, встановлено жорсткі міжмережеві екрани, рекомендується використовувати ці передові методи.

У попередніх випусках Nmap, -sn був відомий як -sP.

-nЩоб уникнути дозволу DNS - клієнтів (робить сканування швидше):

-n (Немає роздільної здатності DNS)

Показує Nmap ніколи не робити зворотну роздільну здатність DNS на активних IP-адресах, які він знаходить. Оскільки DNS може бути повільним навіть за допомогою вбудованого паралельного розв'язувача Nmap, ця опція може зменшити час сканування.

Ви можете використовувати інші комбінації для поглиблення сканування або послуг, але цього має бути достатньо для того, що ви шукаєте, якщо тільки господарі не маскують себе або не скидають все.

Джерело: https://nmap.org/book/man-host-discovery.html


Вихід, про який я згадував, має команду nmap -sP -PR 172.16.128. *, Тому він сканує 254 хостів.
Вішал Шарма

У моєму випадку ідентифікатор мережі становить 172.16.128.128, тому мені довелося змінити запропоновану вами команду. Я використав nmap -sn -n 172.16.128.128/25.
Вішал Шарма

Я не впевнений, що ви мали на увазі під ідентифікатором мережі, але якщо ваш пристрій має цю адресу, і ви хочете, щоб усі 254 хости були відскановані у вашій підмережі, nmap -sn -n 172.16.128.1/24замість цього слід запустити (як я зазначив у відповіді вище, це сканує 255.255. 255.0 маска)
Лев

Під мережевим ідентифікатором я мав на увазі рядок, отриманий виконанням "логічного And" IP_Address і маски підмережі.
Вішал Шарма

Розумію. Отже, чи відповідає команда nmap, яку я опублікував, відповідає на ваше запитання? Чи використовуються обидва пристрої з однаковими адресами?
Лев

8

Частина 1 - фпінг

Цей інструмент записує все у вказаному діапазоні мережі та показує ті, хто відповідає через ICMP.

root@thionite:~# fping -a -g 10.28.1.0/24
10.28.1.1
10.28.1.2
10.28.1.3
10.28.1.4
10.28.1.5
10.28.1.12.....

Частина 2 - арп

Оскільки fping розмовляв із усім в локальній мережі, це призвело до додавання запису до таблиці ARP системи. Прочитайте його протягом декількох хвилин, оскільки таблиця арп вимиває старі записи.

root@thionite:~# arp -a | grep -v incomplete
? (10.28.1.1) at 00:0d:b9:35:29:c4 [ether] on eth0
? (10.28.1.2) at 68:05:ca:10:53:5f [ether] on eth0
? (10.28.1.3) at d2:f1:6e:54:05:22 [ether] on eth0
? (10.28.1.4) at 00:1a:4d:26:85:ee [ether] on eth0
? (10.28.1.5) at 6e:a6:e5:78:da:ca [ether] on eth0
? (10.28.1.12) at 3c:4a:92:76:85:d8 [ether] on eth0

Також зауважте, що таблиця ARP має максимальний розмір, і ядро ​​видалить старі записи з низьким рівнем використання.

Покладіть це все разом

 fping -a -g 10.28.1.0/24 && arp -a | grep -v incomplete > arp.txt

потім перегляньте arp.txt у своє дозвілля.


5

IPv6

Не вважайте, що IPv4 - ваш єдиний варіант. Багато сучасних операційних систем справляються з IPv6 просто чудово, навіть якщо ваш провайдер не забезпечує підключення V6.

Можуть бути навіть пристрої, доступні лише за IPv6 або навіть іншими протоколами.

Існує купа зручних адрес для багатоадресної передачі, задокументованих на https://en.wikipedia.org/wiki/Multicast_address#IPv6 Але цікавим для вас є ff02 :: 1

root@thionite:~# ping6 -I eth0 ff02::1
PING ff02::1(ff02::1) from fe80::4261:86ff:fec4:cbaa%eth0 eth0: 56 data bytes
64 bytes from fe80::4261:86ff:fec4:cbaa%eth0: icmp_seq=1 ttl=64 time=0.047 ms
64 bytes from fe80::21a:4dff:fe26:85ee%eth0: icmp_seq=1 ttl=64 time=0.215 ms (DUP!)
64 bytes from fe80::6a05:caff:fe10:535f%eth0: icmp_seq=1 ttl=64 time=0.233 ms (DUP!)
64 bytes from fe80::226:55ff:feda:299c%eth0: icmp_seq=1 ttl=64 time=0.334 ms (DUP!)
64 bytes from fe80::20d:b9ff:fe35:29c4%eth0: icmp_seq=1 ttl=64 time=0.501 ms (DUP!)
64 bytes from fe80::21e:c2ff:fe13:36bf%eth0: icmp_seq=1 ttl=64 time=0.512 ms (DUP!)
64 bytes from fe80::3e4a:92ff:fe76:85d8%eth0: icmp_seq=1 ttl=1 time=0.518 ms (DUP!)
64 bytes from fe80::3e4a:92ff:fe76:8506%eth0: icmp_seq=1 ttl=1 time=0.757 ms (DUP!)
64 bytes from fe80::3e4a:92ff:fe76:e550%eth0: icmp_seq=1 ttl=1 time=0.772 ms (DUP!)
64 bytes from fe80::60cc:69ff:fe4f:7db0%eth0: icmp_seq=1 ttl=64 time=0.992 ms (DUP!)
64 bytes from fe80::90e4:77ff:fe32:3232%eth0: icmp_seq=1 ttl=64 time=1.00 ms (DUP!)
64 bytes from fe80::90e4:77ff:fe30:3030%eth0: icmp_seq=1 ttl=64 time=1.24 ms (DUP!)
64 bytes from fe80::90e4:77ff:fe31:3131%eth0: icmp_seq=1 ttl=64 time=1.34 ms (DUP!)
64 bytes from fe80::6ca6:e5ff:fe78:daca%eth0: icmp_seq=1 ttl=64 time=2.35 ms (DUP!)
64 bytes from fe80::b639:d6ff:feab:1000%eth0: icmp_seq=1 ttl=64 time=7.04 ms (DUP!)
64 bytes from fe80::3e4a:92ff:fe76:85d8%eth0: icmp_seq=1 ttl=1 time=8.02 ms (DUP!)
64 bytes from fe80::3e4a:92ff:fe76:8506%eth0: icmp_seq=1 ttl=1 time=8.03 ms (DUP!)
64 bytes from fe80::3e4a:92ff:fe76:e550%eth0: icmp_seq=1 ttl=1 time=8.06 ms (DUP!)
64 bytes from fe80::212:12ff:fef7:8044%eth0: icmp_seq=1 ttl=64 time=8.24 ms (DUP!)
64 bytes from fe80::8edc:d4ff:fef2:67e0%eth0: icmp_seq=1 ttl=64 time=18.3 ms (DUP!)
64 bytes from fe80::21e:c2ff:fea9:6d71%eth0: icmp_seq=1 ttl=64 time=295 ms (DUP!)
...repeats

3

Погана відповідь - надіслати номер трансляції на адресу

root@thionite:~# ping -b 10.28.255.255
WARNING: pinging broadcast address
PING 10.28.255.255 (10.28.255.255) 56(84) bytes of data.
64 bytes from 10.28.2.7: icmp_seq=1 ttl=64 time=0.220 ms
64 bytes from 10.28.3.12: icmp_seq=1 ttl=255 time=0.594 ms (DUP!)
64 bytes from 10.28.9.4: icmp_seq=1 ttl=64 time=1.03 ms (DUP!)
64 bytes from 10.28.1.151: icmp_seq=1 ttl=255 time=1.04 ms (DUP!)
64 bytes from 10.28.3.13: icmp_seq=1 ttl=255 time=2.22 ms (DUP!)
64 bytes from 10.28.3.11: icmp_seq=1 ttl=255 time=2.43 ms (DUP!)

У цій мережі є ~ 50 IP-адрес з мережевою маскою / 16 і відповіли лише сім. Тож це не гарне рішення.


1
Чому різна відповідь? Ви можете редагувати пост
ромашка

3
@daisy, тому що вони різні відповіді. Одна монолітна відповідь може бути хорошою, але її затримує одна частина. Окремі відповіді дозволяють механізму голосування вгору / вниз працювати належним чином. Ця відповідь була справді лише для повноти, її не дуже корисна на практиці.
Кріггі

1
Єдине, що тестує ping - це налаштований пристрій на відповідь на pings чи ні.
Роб Моїр

@RobMoir true - головний момент цього полягає в тому, що адреса широкомовної програми існує і що вона була вбудована в IPv4.
Criggie

3

На додаток до відповіді MadHatter, є інструмент пошуку арп, не намагаючись спочатку надіслати мережевий пакет: arping .

Здається, є дві реалізації:

Для вашої мети я б просто взяв пакунок з вашого дистрибутива Linux, оскільки відмінності, ймовірно, полягають лише у деталях.


1

Ще коли динозаври блукали землею, протонорми використовували арпучеч

arpwatch - це програмне забезпечення для комп'ютерного програмного забезпечення для моніторингу трафіку протоколу дозволу адреси в комп'ютерній мережі. [1] Він генерує журнал спостережуваного сполучення IP-адрес з MAC-адресами разом із часовою позначкою, коли парування з'являється в мережі. Він також має можливість відправити електронний лист адміністратору, коли з’єднання змінюється або додається.

сторінка людини arpwatch


0

Увійдіть до своїх комутаторів і видайте show mac-address або подібні команди (залежно від марки та моделі). Це дасть вам всі MAC-адреси активних пристроїв (крім самого перемикача). Якщо будь-який з цих MAC не зустрічається серед MAC, знайдених за допомогою будь-якого з ping або інших методів в інших відповідях, можливо, ви захочете додатково дослідити, що це за пристрій. Можливо, це не має значення, оскільки він навіть не розмовляє з IP або належить до іншої VLAN, але принаймні ви можете отримати огляд, чи інші ваші зонди точні.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.