Показать список компьютеров в локальной сети в Linux

62

Я веб-разработчик, который пытается лучше справиться с безопасностью. Я пытаюсь найти способ (в дистрибутивах на основе Linux / Debian) перечислить все компьютеры в той же локальной сети, где находится мой нетбук. Я попробовал "arp -n", но я не чувствую, что это полный список, так как мой iPhone находится на том же Wi-Fi-маршрутизаторе, что и мой нетбук, и это не помогло. Есть ли какой-нибудь лучший способ получить полный список машин, которые используют один и тот же шлюз?

CaptSaltyJack
источник
2
Возможный дубликат Как я могу перечислить все IP-адреса в подключенной сети, предпочтительно через Терминал?
Сиро Сантилли 新疆 改造 中心 法轮功 六四 事件

Ответы:

58

Получите Nmap . Это программа Trinity, используемая в The Matrix, и вы можете выполнить сканирование, чтобы найти все устройства, подключенные к локальной сети, в которой вы находитесь, и многое другое.

Вот справочник.

Тайлер Фэйл
источник
16
ХОРОШО. Похоже, что "sudo nmap -sL 123.123.123. *" - это то, что я ищу, или, может быть, -sP вместо -sL. Спасибо!
CaptSaltyJack
2
установить sudo apt-get install nmap
Nmap
1
Я думал, что это на самом деле серьезный веб-сайт, lol +1
user10089632
38

Это то, что я использую, nmap и адрес, используя блочную нотацию CIDR для сети, которую вы хотите сканировать. Для начала вам нужно установить nmap, так как он может не поставляться с предустановленным дистрибутивом. На 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 
radtek
источник
2
nmap -sA 192.168.1.0/24 Опция nmap -sAпоказывает аналогичные описательные результаты с лучшей читабельностью, которая включает имя устройства, IP, mac и т. д., как и с опцией -sP. Я лично предпочитаю -sA -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, что и вы:

ping 224.0.0.1

Обратите внимание, что этот метод и другие методы, о которых я уже упоминал в других ответах, ищут только узлы с достижимым IP-адресом в текущей сети. Это, вероятно, все, что вам нужно заботиться, но злоумышленник может отслеживать или совершать плохие действия в сети, не будучи видимым через IP.

Spiff
источник
8

ip neighи hosts. НЕТ Nmap требуется / НЕТ sudo требуется .

Основываясь на этом, вы можете создать скрипт на 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) сканирует с помощью пинга . Существуют и другие варианты «обнаружения хоста», например, с помощью 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
dmn8
источник
В моем случае сказал 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, но гораздо лучше работает при пинге нескольких хостов. -R 1 флаг указан Fping выполнить только один раунд. Часть 2> 1 позволяет grep фильтровать вывод.

$ 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
user9869932
источник
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

2b. без awk

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номер uence из stdin, поэтому 192.168.2.IP меняется на 192.168.2.1 для первого seqномера, -Pуказывает количество одновременных pingпроцессов, которые xargsдолжны начаться, я выбираю то же количество +1, что и адреса ( = 254) Мне интересно.
  • pingс ip-адресом, измененным функцией xargs ( 192.168.2.IP) и только ping один раз ( -c1); -iв этом случае вы должны использовать тот же идентификатор, который указан для аргумента xargs, вместо аргументаIP
  • grep time= чтобы удалить каждую строку, содержащую лишнюю информацию, нас интересуют только ответы, которые обеспечивают время прохождения туда-обратно (= получил ответ)
  • arp -a отображать действительные пары имен (ip)

Я называю это моей командой pingall и сделал ее доступной через псевдоним в ~/.bashrc:

alias pingall='seq 254 | xargs -iIP -P255 ping -c1 192.168.2.IP |grep time='
Дон Вопрос
источник