Как узнать, какие другие машины подключены к локальной сети?


27

Как я могу увидеть список всех машин, которые доступны в локальной сети, частью которой я являюсь.

Ответы:


28

Как много вы знаете о рассматриваемой локальной сети? Я предполагаю, что вы ничего не знаете, просто подключен кабель или подключен к Wi-Fi.

  1. Попробуйте запросить IP-адрес с помощью DHCP. Вы получаете один? Тогда вы уже знаете несколько вещей: IP-адрес шлюза, IP-адрес DHCP-сервера, маску подсети и, возможно, DNS-серверы.
  2. Если вы его не получили, либо DHCP-сервер отсутствует, либо сеть фильтруется по MAC-адресу.
  3. В любом случае, начните захват пакетов с помощью wireshark . Если вы подключены к беспроводной сети или подключены к концентратору, это легко. Если вы подключены к коммутатору, вы можете попробовать MAC-flooding, чтобы переключить его обратно в «режим концентратора», но более умный коммутатор просто отключит ваш порт. Если вы все равно хотите попробовать, ettercap может сделать это для вас. (Или macchanger и скрипт оболочки :))
  4. Глядя на пакеты, вы можете найти IP-адреса, но самое главное, вы можете угадать параметры сети. Если вы подозреваете, что фильтрация MAC-адресов изменит ваш MAC-адрес на один из наблюдаемых после того, как он уйдет (некоторое время ничего не отправляет)
  5. Если у вас есть хорошее представление о конфигурации сети (маска сети, шлюз и т. Д.), Используйте nmap для сканирования. Nmap может сделать намного больше, чем -sPв случае, если некоторые хосты не отвечают на ping (ознакомьтесь с документацией ). Важно, чтобы nmap работал, только если ваши сетевые настройки и маршруты правильные.
  6. Вы можете найти еще больше хостов с помощью сканирования холостого хода nmap .

Некоторым (большинству?) Системным администраторам не нравятся некоторые из перечисленных выше методов, поэтому убедитесь, что это разрешено (например, это ваша сеть). Также обратите внимание, что ваш собственный брандмауэр может предотвратить некоторые из этих методов (даже получение IP с DHCP), поэтому сначала проверьте ваши правила.

Nmap

Вот как можно выполнить базовое обнаружение хоста с помощью nmap . Как я уже сказал, ваша конфигурация сети должна быть правильной, когда вы пытаетесь это сделать. Допустим, вы 192.168.0.50 и находитесь в подсети / 24. Ваш MAC-адрес разрешен для подключения и т. Д. Мне нравится запускать Wireshark, чтобы посмотреть, что я делаю.

Сначала я хотел бы попробовать сканирование списка, которое только пытается разрешить записи 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 - один из лучших сетевых инструментов, и документация хорошо написана, это действительно того стоит.
стрибика

9

Мне нравится ip neighкоманда, которая идет с IpRoute2.

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

Тем не менее, я думаю, что он работает только с arp-able узлами.


Что именно это делает? Для меня это просто перечисляет несколько записей.
Чепанг

Я думаю, что он просто отправляет arp на широковещательный 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)..
Чепанг

3
Чем я должен заменить <mynetwork>?
Чепанг

@tshepang Номер сети с обнуленной частью хоста и маской CIDR. Примерно так: 192.169.1.0/24
Кит

0

Для обоих ответов: НЕТ Nmap требуется / НЕТ sudo требуется .

Ответ 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.