Як знайти, які інші машини підключені до локальної мережі


27

Як я бачу список усіх машин, доступних у локальній мережі, до якої я входять.

Відповіді:


28

Скільки ви знаєте про відповідну локальну мережу? Я припускаю, що ви нічого не знаєте, просто підключений до кабелю або підключений до wifi.

  1. Спробуйте запросити IP-адресу за допомогою DHCP. Ви отримуєте його? Тоді ви вже знаєте кілька речей: IP шлюзу, IP-сервер DHCP, маска підмережі та, можливо, сервери DNS.
  2. Якщо ви не отримаєте його, немає або сервера DHCP, або мережа відфільтрована MAC.
  3. У будь-якому випадку, почніть захоплювати пакети за допомогою дротяного оскалу . Якщо ви бездротові або підключені до концентратора, це легко. Якщо ви підключені до комутатора, ви можете спробувати затоплення MAC, щоб повернути його в «режим концентратора», але розумніший комутатор просто відключить ваш порт. Якщо ви хочете спробувати це, ettercap може зробити це за вас. (Або macchanger та сценарій оболонки :))
  4. Дивлячись на пакети, ви можете знайти IP-адреси, але найголовніше, ви можете відгадати параметри мережі. Якщо ви підозрюєте, що фільтрування MAC змінить вам MAC-адресу на одну із спостережуваних, після того як вона вийде (на деякий час нічого не надсилає).
  5. Коли у вас є гарна ідея про конфігурацію мережі (мережева маска, шлюз тощо), використовуйте nmap для сканування. Nmap може зробити набагато більше, ніж -sPу випадку, якщо деякі хости не відповідають на ping (ознайомтеся з документацією ). Важливо, щоб nmap працював лише в тому випадку, якщо ваші мережеві налаштування та маршрути правильні.
  6. Можливо, ви можете знайти ще більше хостів, коли сканувати в режимі очікування nmap .

Деяким (більшість?) Системним адміністраторам не подобається кілька перерахованих вище методів, тому переконайтеся, що це дозволено (наприклад, це ваша мережа). Також зауважте, що ваш власний брандмауер може запобігти деяким із цих методів (навіть отримання IP-адреси за допомогою DHCP), тому спочатку перевірте свої правила.

Nmap

Ось як зробити базове відкриття хоста за допомогою nmap . Як я вже сказав, ваша мережна конфігурація повинна бути правильною при спробі цього. Скажімо, ви 192.168.0.50 ви перебуваєте в підмережі / 24. Ваша MAC-адреса - це те, що дозволено підключати і т. Д. Мені подобається проводити проводку, щоб побачити, що я роблю.

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

nmap -vvv -sn -sL 192.168.1.0/16

Це може не знайти нічого, або це може сказати вам, що кожен IP-адрес працює.

Тоді я зазвичай йду на сканування ARP. Він надсилає ARP-запити (ви бачите їх як "Who has <target IP>? Tell <your IP>"у wireshark). Це досить надійно, оскільки ніхто не фільтрує та не підробляє ARP. Основним недоліком є ​​те, що він працює лише у вашій підмережі.

nmap -vvv -sn -PR 192.168.1.0/24

Якщо ви хочете щось сканувати за маршрутизаторами або брандмауерами, тоді використовуйте сканування SYN та ACK. SYN запускає TCP-з'єднання, і ви отримуєте у відповідь RST або SYNACK. У будь-якому випадку господаря. Ви можете заборонити зв'язок ICMP або щось подібне, якщо є брандмауер. Більшість випадків, якщо брандмауер фільтрував ваші пакети, ви нічого не отримаєте. Деякі типи брандмауерів фільтрують лише пакети TCP SYN і пропускають всі інші TCP-пакети. Ось чому сканування ACK є корисним. Ви отримаєте RST у відповідь, якщо хост працює. Оскільки ви не знаєте, що є брандмауером, спробуйте обидва.

nmap -vvv -sn -PS 10.1.2.0/24
nmap -vvv -sn -PA 10.1.2.0/24

Тоді, звичайно, ви можете використовувати сканування на основі ICMP з -PE -PP -PM.

Інший цікавий метод - -PO з неіснуючим номером протоколу. Часто на брандмауерах розглядаються лише TCP та UDP, і ніхто не перевіряє, що відбувається при спробі якогось невідомого протоколу. Ви отримуєте протокол ICMP недоступним, якщо хост працює.

nmap -vvv -sn -PO160 10.1.2.0/24

Ви також можете сказати nmap, щоб пропустити відкриття хоста (-Pn) і зробити портикант на кожному хості. Це дуже повільно, але ви можете знайти інших хостів, яких хост-відкриття чомусь пропустило.


Це виглядає як відмінна відповідь, і тепер мені доведеться попросити мене подати ложкою, включивши, які команди виконувати для кожного завдання. Мене спеціально цікавить, як використовувати Nmap, щоб відповісти на моє запитання (не змушуйте мене читати документи :)
tshepang

5
@Tshepang: Я додав кілька прикладів nmap, але сподіваюся, ви подумаєте читати документи. Nmap - один з найбільших мережевих інструментів, і документація добре написана, вона дійсно варта часу.
stribika

9

Мені подобається ip neighкоманда, яка поставляється з IpRoute2.

ip neigh
192.168.1.1 dev eth0 lladdr 00:1d:7e:f8:21:66 REACHABLE

Однак я думаю, що це працює лише з arp-able-вузлами.


Що це робить саме? Щодо мене, він містить лише декілька записів.
thepang

Я думаю, що він просто надсилає арпу до широкомовного IP та перераховує, що відповідає. Чесно кажучи, я не знаю, як це працює.
ксенотеррацид

1
man ipпоказує, що робить сусід чи сусід.
slm

9

Встановіть nmap та запустіть nmap -sP <mynetwork>.


Я отримую Nmap done: 1 IP address (1 host up) scanned in 0.01 seconds.
tshepang

1
@Tshepang - Я це зробив, nmap -sP 192.168.0.*і він повернув список результатів форми:Nmap scan report for justin-desktop2 (192.168.0.61) Host is up (0.00056s latency).
Джастін Етьє,

@justin Я використовую версію 5.00, і тепер він показує ряд машин у моїй мережі, з формою Host 192.168.2.23 is up (0.0088s latency)..
thepang

3
На що я повинен замінити <mynetwork>?
thepang

@tshepang Номер мережі з нульовою частиною хоста та маскою CIDR. Ось так: 192.169.1.0/24
Кіт

0

Для обох відповідей: НІ nmap не потрібно / НЕ потрібно судо .

Відповідь 1

$ arp

Відповідь 2

Спираючись на ксенотеррациди, відповідь ip neighі hosts:

#!/usr/bin/env python

"""List all hosts with their IP adress of the current network."""

import os

out = os.popen('ip neigh').read().splitlines()
for i, line in enumerate(out, start=1):
    ip = line.split(' ')[0]
    h = os.popen('host {}'.format(ip)).read()
    hostname = h.split(' ')[-1]
    print("{:>3}: {} ({})".format(i, hostname.strip(), ip))

Завантажити через

wget https://gist.githubusercontent.com/MartinThoma/699ae445b8a08b5afd16f7d6f5e5d0f8/raw/577fc32b57a7f9e66fdc9be60e7e498bbec7951a/neighbors.py
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.