Відображення списку комп'ютерів у локальній мережі в Linux


62

Я веб-розробник, який намагається вдосконалити безпеку. Я намагаюся з'ясувати спосіб (в дистрибутивах на базі Linux / Debian) перерахувати всі комп'ютери в тій самій локальній мережі, на якій працює моя нетбук. Я спробував "arp -n", але не відчуваю, що це повний список, оскільки мій iPhone знаходиться на тому ж wi-fi роутері, що і мій нетбук, і це не вийшло. Чи існує якийсь кращий спосіб отримати повний список машин, які мають спільний шлюз?


Відповіді:


58

Отримати nmap . Це програма Trinity, яка використовується в The Matrix, і ви можете виконати сканування, щоб знайти всі пристрої, підключені до локальної мережі, на якій ви працюєте, і багато іншого.

Ось довідник.


16
ГАРАЗД. Виглядає як "sudo nmap -sL 123.123.123. *" - це те, що я шукаю, або, можливо, -sP замість -sL. Дякую!
CaptSaltyJack

2
встановити nmap зsudo apt-get install nmap
saintali

1
Я подумав, що це насправді серйозний веб-сайт, lol +1
user10089632

38

Це те, що я використовую, nmap та адресу, використовуючи позначення блоку CIDR мережі, яку ви хочете сканувати. Спочатку потрібно встановити nmap, оскільки він може не бути попередньо встановленим разом із вами distro. На Ubuntu:

sudo apt-get install nmap

Далі з’ясуйте свою мережеву адресу, використовуючи ifconfig:

ifconfig

ifconfig вихід для інтерфейсу, який я хочу сканувати:

wlan1     Link encap:Ethernet  HWaddr 00:1f:3b:03:d2:bf  
          inet addr:192.168.1.104  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::21f:3bff:fe03:d2bf/64 Scope:Link
          ...

Використовуйте inet addr та Mask, щоб визначити мережеву адресу в нотаціях CIDR, детальніше про CIDR тут . Адреса:

192.168.1.0/24

Запустіть nmap за допомогою параметра -sP, який сканує не далі, ніж перевірка, чи хост в мережі:

sudo nmap -sP 192.168.1.0/24

Вихід nmap буде виглядати приблизно так:

Starting Nmap 5.21 ( http://nmap.org ) at 2014-12-09 10:52 EST
Nmap scan report for 192.168.1.1
Host is up (0.013s latency).
MAC Address: -MAC ADDRESS- (Cameo Communications)
...
Nmap done: 256 IP addresses (5 hosts up) scanned in 3.26 seconds

Ось це, якщо вам потрібна додаткова допомога з nmap, перегляньте офіційну документацію nmap або запустіть:

nmap --help 

2
nmap -sA 192.168.1.0/24 Параметр nmap -sAпоказує подібні описові результати з кращою читабельністю, що включає ім'я пристрою, IP, mac тощо, як і варіант -sP. Я особисто віддаю перевагу -sA over -sP заради читабельності.
Jayzcode

@Jayzcode На моїй машині -sA ніколи не повертається, тоді як -sP займає всього 3,73 секунди (виявлено роутер, мій ПК та інший ПК). Будь-яка ідея чому?
Родріго

17

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

Адреса мовлення "всі" (у двійковій). Зауважте, що більшість стеків IP перекладуть це на всі підмережі, до яких ви приєднані:

ping 255.255.255.255

Адреса трансляції підмережі для вашої поточної підмережі. Тож припустимо, що ви перебуваєте на 192.168.1.0/24:

ping 192.168.1.255

Багатоадресна адреса "всіх хостів". Мені це дуже подобається, тому що більш шансово знайти хости, налаштовані для інших IP-підмереж, які, можливо, будуть приєднані до тієї ж Ethernet LAN як і ви:

ping 224.0.0.1

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


8

ip neighі hosts. НЕ потрібно nmap / НЕ потрібно судо .

Спираючись на це, ви можете побудувати сценарій Python:

#!/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

(або просто arp... Я цього раніше не бачив)


або простоip neigh | awk '{ print $1 }' | xargs -n1 host
blockloop

ip nкоротко. Можливо, краще ip n | grep REACHABLE.
Пабло А

4

Я не знайшов відповіді, що відповіли достатньо, тому подумав, що спробую. Зрештою, FAQ задає контекст для посилань .

nmapчудово, якщо трохи заплутати у використанні. Ось що я запускаю, щоб виявити пристрої локальної мережі, які в основному можуть копіювати і вставляти. nmap -sP(або nmap -sn) сканування за допомогою pinging . Існують і інші варіанти "відкриття хоста", наприклад, з nmap -sLабо nmap -Pn.

Шлях №1.

ehtesh@x200arch:~$ # my wireless interface is listed as wlp3s0. Yours could be wlan0 or eth1.
ehtesh@x200arch:~$ ip addr show wlp3s0 | grep "inet "
    inet 172.18.72.53/22 brd 172.18.75.255 scope global wlp3s0
ehtesh@x200arch:~$ arp -a
? (172.18.72.1) at c8:4c:75:76:bd:74 [ether] on wlp3s0
ehtesh@x200arch:~$ nmap -sP 172.18.72.0/24
Starting Nmap 6.41SVN ( http://nmap.org ) at 2013-12-17 20:08 EST
Nmap scan report for 172.18.72.2
Host is up (0.017s latency).
<... 15 IP addresses snipped ...>
Nmap scan report for 172.18.72.253
Host is up (0.13s latency).
Nmap done: 256 IP addresses (17 hosts up) scanned in 5.74 seconds
ehtesh@x200arch:~$ arp -a | sort -n -k 1,1                            
? (172.18.72.126) at ec:35:86:4a:37:d2 [ether] on wlp3s0
? (172.18.72.148) at 10:9a:dd:b8:79:71 [ether] on wlp3s0
? (172.18.72.178) at 9c:20:7b:7b:08:ba [ether] on wlp3s0
? (172.18.72.1) at c8:4c:75:76:bd:74 [ether] on wlp3s0
? (172.18.72.253) at b8:78:2e:19:05:0b [ether] on wlp3s0
? (172.18.72.2) at 00:14:1c:da:e1:c2 [ether] on wlp3s0
? (172.18.72.40) at d8:c7:c8:ca:f9:88 [ether] on wlp3s0
? (172.18.72.43) at d8:c7:c8:ce:0f:60 [ether] on wlp3s0
? (172.18.72.44) at d8:c7:c8:ce:0f:68 [ether] on wlp3s0
? (172.18.72.45) at 6c:f3:7f:c6:71:16 [ether] on wlp3s0
? (172.18.72.46) at 6c:f3:7f:c4:4c:b3 [ether] on wlp3s0
? (172.18.72.47) at d8:c7:c8:ca:f9:88 [ether] on wlp3s0
? (172.18.72.48) at 24:de:c6:c6:b6:78 [ether] on wlp3s0
? (172.18.72.49) at 24:de:c6:c6:b6:e6 [ether] on wlp3s0
? (172.18.72.51) at 00:9c:02:d0:4c:4e [ether] on wlp3s0
? (172.18.72.54) at 00:23:76:99:99:bf [ether] on wlp3s0
? (172.18.72.62) at 8c:70:5a:0d:06:18 [ether] on wlp3s0
? (172.18.72.63) at 7c:e9:d3:51:86:55 [ether] on wlp3s0
? (172.18.72.64) at a0:88:b4:47:eb:c8 [ether] on wlp3s0

Шлях №2. Я знаю, що це працює, але я не можу сказати, чи це правильний шлях.

ehtesh@x200arch:~$ #ifconfig | grep broadcast
ehtesh@x200arch:~$ ip address show wlp3s0 | grep brd
    link/ether 00:1e:65:bf:1b:42 brd ff:ff:ff:ff:ff:ff
    inet 172.18.72.53/22 brd 172.18.75.255 scope global wlp3s0
ehtesh@x200arch:~$ ping -b -c 3 -i 20 172.18.75.255
<... similar output to above ...>

Буду радий дізнатися, чи існують ефективніші способи. До цього я дотримуюся цього.


4

Ви можете спробувати пінгінг усієї заданої підмережі, наприклад, з невеликим скриптом оболонки Linux

$ for ip in $(seq 1 254); do ping -c 1 192.168.1.$ip>/dev/null; [ $? -eq 0 ] && echo "192.168.1.$ip UP" || : ; done

У моєму випадку сказав UP для всіх, а потім ip nскажіть FAILED для всіх.
Пабло А

3

Hunt - це інструмент командного рядка, який здатний складати список машин під час трансляції по мережі інформації. Він використовує дані TCP, UDP, ICMP та ARP для створення списку активних MAC-адрес у мережі. Це пасивний інструмент, який працює, слухаючи на дроті.


4
Я знаю, що існують чоловічі сторінки, але було б корисно побачити приклад у відповіді.
Ехтеш Чудхурі

2

Для більш компактного переліку підключених пристроїв:

nmap -sL 192.168.0.* | grep \(1

Пояснення.

nmap -sL 192.168.0.* перерахує всі IP-адреси в підмережі та позначить ті, що мають ім'я:

Nmap scan report for 192.168.0.0
Nmap scan report for Dlink-Router.Dlink (192.168.0.1)
Nmap scan report for 192.168.0.2
...
Nmap scan report for android-473e80f183648322.Dlink (192.168.0.53)
...
Nmap scan report for 192.168.0.255

Оскільки всі цікаві записи починаються з дужок (і цифр 1, ми фільтруємо для цього за допомогою | grep \(1(зворотний косий рядок потрібен, щоб уникнути дужок)

Химерно
Остерігайтеся, що якщо два пристрої мають однакове ім’я, nmapбуде показано лише той, який останнім часом був підключений до маршрутизатора


2

Щоб сканувати стан діапазону IP-адрес, це добре і просто:

sudo nmap -sn 192.168.1.2-20

Де:

         -sn: Ping Scan - disable port scan

Примітка:

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

Я робив це на Mac OS X (який базується на BSD). Я не впевнений, чи є у версії Linux якісь відмінності.


1
Блискуче, все, що мені довелося, було тип: sudo nmap -sP 192.168.178.0-255. Це робило сканування в підмережі, в якій я перебуваю.
Лев Гербер

2

Ви можете використовувати fping sudo apt-get install fping (в ОС, схожий на debian).

fping схожий на ping, але набагато краще працює під час pinging кількох хостів. Прапор -r 1 повідомляє fping виконувати лише один раунд. Частина 2> 1 дозволяє грепу фільтрувати вихід.

$ fping -g -r 1 192.168.1.0/24 2>1 | grep "alive"

Буде відображено щось на кшталт:

192.168.1.1 is alive
192.168.1.10 is alive
192.168.1.15 is alive
192.168.1.27 is alive

Також є цікавий прапор nmap, який дозволить вам побачити постачальника MAC - якщо він відомий. Використовуйте з sudo , щоб бачити MAC адреси.

$ sudo nmap -sP 192.168.1.0/24

Ви отримаєте, наприклад:

Starting Nmap 7.40 ( https://nmap.org ) at 2019-05-23 18:49 CEST
Nmap scan report for 192.168.1.14
Host is up (-0.036s latency).
MAC Address: 20:F4:1B:E5:8F:7B (Shenzhen Bilian electronic)
Nmap scan report for 192.168.1.15
Host is up (-0.084s latency).
MAC Address: A4:31:35:E8:58:9E (Apple)
Nmap scan report for 192.168.1.27
Host is up (-0.15s latency).
MAC Address: 34:8A:7B:38:E3:14 (Samsung Electronics)
Nmap scan report for 192.168.1.29
Host is up (0.010s latency).
MAC Address: 80:2B:F9:75:F8:FF (Unknown)
Nmap scan report for 192.168.1.10
Host is up.
Nmap done: 256 IP addresses (5 hosts up) scanned in 25.52 seconds

1

1. Альтернативне рішення, якщо трансляції та nmapнедоступні:

seq 254 | xargs -iIP -P255 ping -c1 192.168.2.IP |grep time=
arp -a

2а. або просто запитайте ваш сервер доменних імен :

seq 254| awk '{print "192.168.2."$1}' |nslookup | grep name

2б. без пробудження

echo -e 192.168.2.{1..10}"\n" |nslookup |grep name
  1. паралельно передає всі підключаються мережеві пристрої в підмережі 192.168.2.0/24 (щоб скоротити час роботи). Після цього arpслід відобразити кожен пристрій, який відповів.

  2. не перевіряє активні чи поточні з'єднання, але перераховує всі з'єднання, які локальна служба домену зберігає запис, навіть справді старі.

Більш детальне пояснення:

  • seq 254створити всі числа від 1 до 254 (для всіх чисел від 100 до 150: seq 100 150)
  • xargsвикликає pingта замінює "IP" ( -iIP) seqномером уенса від stdin, тому 192.168.2.IP змінюється на 192.168.2.1 для першого seqномера, -Pвизначає кількість одночасних pingпроцесів, які xargsслід розпочати, я вибираю ту саму суму +1, що й адреси ( = 254) я зацікавлений.
  • pingз ip-адресою, зміненою xargs ( 192.168.2.IP) і лише ping один раз ( -c1); Ви повинні використовувати той самий ідентифікатор, що вказаний для xargs над -iаргументом у цьому випадкуIP
  • grep time= щоб видалити кожен рядок, що містить зайву інформацію, нас цікавлять лише відповіді, які забезпечують час в обидва кінці (= отримали відповідь)
  • arp -a для відображення дійсних імен (ip) пар

Я назвав цю свою команду pingall і зробив її доступною через псевдонім у ~/.bashrc:

alias pingall='seq 254 | xargs -iIP -P255 ping -c1 192.168.2.IP |grep time='
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.