如何最好通过终端列出连接的网络中的所有IP?


219

使用Ubuntu 10.10,我想知道是否有一个命令行命令可以列出连接到网络的设备的所有IP?

例如,我将使用它来列出连接到我的家庭网络的所有计算机。理想情况下,它需要是命令行,因为我将从C ++运行它。

有任何想法吗?




Answers:


243

签出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

完美,谢谢。精确返回我需要的格式。
Christopher Gwilliams 2011年

1
也可以在OSX上完美运行!与Brew一起安装,并且接口是en0,而不是eth0,但是效果很好。
nthonygreen 2013年

6
如果您使用wifi连接到网络,请使用wlan0代替eth0
Neil 2013年

3
您能获得列出主机名和IP地址的信息吗?
user1527227 2014年

2
值得注意的是,它不使用ARP缓存:它执行实际扫描。与大多数nmap扫描不同,这不能跨越第3层边界,这通常是您在此情况下想要的。(换句话说,它仅限于您的子网。)
Zenexer 2014年

112

使用nmap。示例:nmap -sn 10.10.10.0/24arp缓存只会告诉您您最近尝试联系的人。


2
给定的IP是10.10.10.0吗?在这种情况下24是多少?谢谢。
kolonel 2015年

4
@kolonel仅仅是一个例子。您应该用网络代替它。24是子网掩码的“斜杠表示法”。这意味着从左边开始使用24位。相当于255.255.255.0。
基思

2
@Keith您知道我如何找到要使用的网络地址吗?还是只是我的IP以0/24结尾?
TMH


20

在Windows中,这将是“ arp -a”,我相信与Linux中的等效将是“ arp -e”。

这些信息可以在arp的手册页中找到:

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

看起来好像
可行

如果我在家庭网络上,它会仅列出连接到路由器的设备吗?谢谢!
Christopher Gwilliams,2011年

1
该命令将仅列出主机当前arp缓存中的设备,并且只会是主机最近与之联系的设备。
Linker3000 2011年

两者都可以在Linux上运行,但是arp -a以备用(BSD)样式显示(所有)主机。Simpy运行arp与运行相同,arp -e因为这是默认设置。
simplegamer

15

如果您的网络是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

嗨,安德斯...您的用户网络可能不是192.168.0.0/24;我做了笔记。该网站的格式不像是一个简单的#!,因此破坏了代码片段的格式:输入代码时,请使用blockquote或预格式化的文本按钮,并在提交前检查答案是否正确,以回车,制表符,并且空间可能已经被剥夺。
内文·威廉姆斯

同样,在提供需要放入文件并使其可执行的脚本时,而不是简单地剪切和粘贴时,最好指定此名称;对于某些人来说,实现您的解决方案所需的全部内容可能并不明显。
内文·威廉姆斯

12
从技术上讲,这只会返回响应ping的主机。可能有一些主机已连接,但没有回复ICMP回显请求。同样,通过指定广播地址(这是IP网络中的最后一个地址),可以将一个数据包广播到整个网络:ping -c 1 -W 1 192.168.0.255将完成与for循环相同的操作。
内文·威廉姆斯

@NevinWilliams(必需-b,已删除-W以等待更多)ping -b -c 1 192.168.0.255结果“发送了1个数据包,接收了0个数据包,丢失了100%的数据包,时间为0ms”
Aquarius Power

13

尝试安装nmapsudo 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网络上的每台计算机发出a ,但以我的经验,并不总是能正常运行。


实际上,所有答案都将永远无法正常运行。IP并非在设计时就考虑了这一要求,并且诸如Private VLAN之类的东西使在同一LAN上找不到其他主机成为可能。
罗恩·莫平

2

在仓库中使用tmuxas arp-scan来解决以下问题,但不是nmap预安装,而是预安装,仅显示ip地址:

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

1

有关连接设备的更紧凑列表:

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

由于所有有趣的记录都以括号(和digit开头1,因此我们用过滤| grep \(1(需要使用反斜杠来避免括号)

怪癖
要注意,如果两个设备具有相同的名称,则nmap只会显示最后连接到路由器的一个


如果您对两个问题有完全相同的答案,那么可能值得考虑将问题标记为重复,而不是发布重复的答案。这样,当相似的问题联系在一起时,就可以共享知识。
Mokubai

1
@Mokubai是的,我已经在OP中添加了评论。这显示了一个有趣的问题。一个快速搜索发现6个副本(此Q和5个环节),分布在4个网络站点(SU,向Ubuntu的,SF,UNIX)。当然还有更多!我该如何处理?理想情况下,这6个帖子中的每一个都应链接到其他5个帖子。手动添加所有这些链接显然无法扩展。所以,到目前为止,我已经链接到了这篇文章(被最高评价)。另一个问题是,不可能在AskUbuntu上将Q标记为SU上Q的副本。嗯...可能已经在meta上讨论过了?
亚历山大·马拉霍夫

在Centos 7上对我不起作用,仅列出网络中所有可能的IP地址且没有名称。arp-scan为我工作。
杰夫

0

详细说明安德斯·拉尔森(Anders Larrson)的答案-

#!/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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.