2011-07-15 17:51:44 +0000 2011-07-15 17:51:44 +0000
65
65

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

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

Ответы (11)

61
61
61
2011-07-15 17:55:50 +0000

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

41
41
41
2014-12-09 15:56:20 +0000

Это то, что я использую, 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
          ...

Используйте addr и Mask inet для выяснения сетевого адреса в 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
```.
18
18
18
2011-07-15 19:12:18 +0000

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
8
8
2017-04-03 21:54:39 +0000

ip neigh и hosts. NO требуется nmap / NO 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 … Я не видел этого раньше)

4
4
4
2016-05-10 08:21:24 +0000

Вы можете попробовать пинговать все подсети с помощью небольшого скрипта оболочки 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
```.
4
4
4
2013-12-18 01:44:36 +0000

Я не нашел достаточно удовлетворительными существующие ответы, поэтому решил попробовать. В конце концов, 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 ...>

Я был бы рад узнать, есть ли более эффективные пути. До тех пор я придерживаюсь этого.

3
3
3
2011-07-15 18:16:48 +0000

Hunt - это инструмент командной строки, способный строить список машин, транслируемых по сети для получения информации. Оно использует TCP, UDP, ICMP и ARP данные для построения списка активных MAC адресов в сети. Это пассивный инструмент, который работает путем прослушивания по проводу.

3
3
3
2019-05-23 17:18:32 +0000
3
3
3
2017-11-08 13:22:31 +0000

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

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

2a. или просто спросите ваш сервер доменных имен :

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. pings all pingable Network-Devices in the 192.168.2.0/24 subnet in parallel (для уменьшения времени выполнения). После этого arp должно отобразить каждое устройство, которое ответило.

  2. не проверяет на наличие активных или текущих соединений, но перечисляет все соединения, которые хранит служба локального домена, даже действительно старые.

Более подробное объяснение:

  • seq 254 создать все номера от 1 до 254 (для всех номеров от 100 до 150: seq 100 150)
  • xargs звонки ping и заменить “IP” (-iIP) на sequence номер из 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= для удаления каждой строки, содержащей лишнюю информацию, нас интересуют только ответы, которые обеспечивают время обхода (=got a response)
  • arp -a для отображения действительных имён(ip) пар

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

alias pingall='seq 254 | xargs -iIP -P255 ping -c1 192.168.2.IP |grep time='
3
3
3
2016-07-25 17:31:07 +0000

Для сканирования состояния ряда IP-адресов, это хорошо и просто:

sudo nmap -sn 192.168.1.2-20

Где:

-sn: Ping Scan - disable port scan

Примечание:

  • В предыдущих релизах Nmap, -sn была известна как -sP

Я делал это на Mac OS X (которая основана на BSD). Я не уверен, есть ли в Linux версии какие-либо различия.

2
2
2
2016-10-20 10:28:47 +0000

Для более компактного списка подключенных устройств:

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 (обратная косая черта необходима, чтобы избежать скобок)

Quirk Остерегайтесь, что если два устройства имеют одинаковое имя, nmap покажет только одно, которое было подключено к маршрутизатору last.

Похожие вопросы

3
5
13
5
7