204

Используя Ubuntu 10.10, мне было интересно, есть ли команда командной строки, которая может перечислить все IP-адреса устройств, подключенных к сети?

Я хотел бы использовать это, например, для перечисления всех компьютеров, подключенных к моей домашней сети. В идеале это должна быть командная строка, так как я буду запускать ее из C++.

Есть идеи?

8 ответов8

231

Проверьте команду arp-scan - вам, вероятно, придется установить ее, например:

sudo apt-get install arp-scan

http://manpages.ubuntu.com/manpages/hardy/man1/arp-scan.1.html

И дать более подробную информацию:

sudo arp-scan --interface=eth0 --localnet

Где eth0 ваше устройство. Вы можете найти свое устройство с помощью:

ifconfig
107

Используйте nmap. пример: nmap -sn 10.10.10.0/24 Кеш arp будет сообщать вам только те, с которыми вы пытались связаться недавно.

19

В Windows это будет " arp -a ". Я считаю, что эквивалентом этого в Linux будет " arp -e ".

Эту информацию можно найти на странице man для arp:

arp with no mode specifier will print the current content of the table.
-e : Use default Linux style output format (with fixed columns).
14

Если ваша сеть 192.168.0.0/24 , создайте исполняемый файл со следующим кодом; Измените 192.168.0 на вашу реальную сеть.

#!/bin/bash
for ip in 192.168.0.{1..254}; do
  ping -c 1 -W 1 $ip | grep "64 bytes" &
done
11

Попробуйте установить nmap (sudo apt-get install nmap) и наберите nmap 192.168.1.0/24 заменив 192.168.1 на первые три части своего ip-адреса (узнайте, используя ip addr).

Вы также можете получить немного менее точную (по моему опыту) карту сети, выполнив ping 192.168.1.255 (снова заменяя 192.168.1), которая должна выдать команду ping на каждую машину в сети, но, по моему опыту, не всегда функционирует правильно.

2

Придумал следующее на нексусе, использующем tmux как arp-scan отсутствует в репозитории, но nmap был предустановлен, отображает только ip-адреса:

nmap -sn 192.168.1.1-254/24 | egrep "scan report" | awk '{print $5}'
0

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

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 покажет только то, что было подключено к маршрутизатору последним

0

Разрабатывая ответ Андерса Ларрсона -

#!/bin/bash
function scan ()
{
    for ip in $1.{1..254}; do
        ping -c 1 -W 1 $ip &
    done | sed -nE 's:^.* from ([0-9.]+).*time=(.*s)$:\1 (\2):p'
}

if [ $1 ]; then
    for baseip; do
        scan $baseip
    done
else
    scan 192.168.1
fi

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .