使用Ubuntu 10.10命令行,如何列出连接到家庭网络的所有IP?
理想情况下,它必须是CLI命令,因为我将从C ++运行它。

评论

askubuntu.com/questions/82480/…|| serverfault.com/questions/72380/…

更多重复:1.获取连接到同一路由器的设备的所有IP。 2.在Linux中显示局域网中计算机的列表

3.本地IP扫描的最佳方法和工具

#1 楼

签出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)
11 Mar 24 '11 at 14:09

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

–nthonygreen
13年4月13日在16:00

如果您使用wifi连接到网络,请使用wlan0而不是eth0。

–尼尔
13年9月15日在12:04

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

–user1527227
2014年2月4日在18:57

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

–辛尼泽
2014年9月29日在12:26

#2 楼

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

评论


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

–科隆
15年4月20日在7:15

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

–基思
2015年4月25日在17:05

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

–TMH
16年1月25日在11:01

@kolonel:zh.wikipedia.org/wiki/Classless_Inter-Domain_Routing

– arkod
16年2月10日在19:56

他是对的。 “ arp”仅显示我们最近尝试联系的IP地址。我清除了arp缓存,然后再次列出了“ arp -a”,却一无所获。如果万一有人要清除arp缓存,请使用此命令“ ip -s -s neigh flush all”。

–学习者
19/12/8在14:37

#3 楼

在Windows中,这将是arp -a,与Linux中的等价于arp -e
manarp页面上:
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年3月24日13:37

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

–克里斯托弗·威廉姆斯(Christopher Gwilliams)
2011年3月24日13:37

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

– Linker3000
2011年3月24日13:38



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

– simplegamer
16 Sep 2'在20:48



#4 楼

如果您的网络是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或预格式化的文本按钮,并在提交前检查答案是否正确,以回车,制表符,并且空间可能已经被剥夺。

– Nevin Williams
13年5月17日在19:34

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

– Nevin Williams
13年5月17日在19:37

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

– Nevin Williams
13年5月17日在19:45

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

–水瓶座力量
16-10-31在21:17

#5 楼

尝试安装nmapsudo apt-get install nmap),然后键入nmap 192.168.1.0/24,用您的IP地址的前三个部分替换192.168.1(使用ip addr进行查找)。

您还可以获得准确度略低的地图(根据我的经验)通过运行ping 192.168.1.255(再次替换为192.168.1)来建立网络,这应该向网络上的每台计算机发出ping,但是以我的经验,它并不总是能正常运行。

评论


实际上,所有答案都不会始终正确起作用。 IP并非在设计时就考虑了这一要求,并且诸如Private VLAN之类的东西使在同一LAN上找不到其他主机成为可能。

–罗恩·莫平(Ron Maupin)
16年4月9日在23:22

#6 楼

使用tmux在网络上出现以下内容,因为arp-scan不在存储库中,但nmap已预先安装,仅显示ip地址:

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


#7 楼

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

nmap -sL 192.168.0.* | grep \(1


说明。

nmap -sL 192.168.0.*将列出子网中的所有IP并标记具有名称的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将仅显示连接到路由器最后一个的那个

评论


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

–Mokubai♦
16-10-22在7:02

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

–亚历山大·马拉霍夫(Alexander Malakhov)
16-10-22在9:35

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

–杰夫
17-10-11在0:20

#8 楼

详细说明Anders Larsson答案-

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

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


#9 楼

此Anwswer自行确定子网,而在其他Anwsers中则需要提供子网。

脚本使用arp -aip -o -f inet addr show查找子网。

我已经构建了脚本详细说明了@ anders-larsson和@ mathieu-caroff的答案。我避免使用'nmap',但是该脚本已被简单地修改为使用nmap。

基本上,如果脚本的第二部分中未提供参数,则$baseip是使用bash替换宏构建的。命令行。否则,它将扫描提供的子网(样式:192.1.5,不带IP的最后一个字节的第三个点)。

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

if [  ]; then
    for baseip; do
        scan $baseip
    done
else
    baseip=$(arp -a) && baseip=${baseip%%\)*} && baseip=${baseip##*\(}
    if [ $baseip"" == "" ] ; then
      baseip=$(ip -o -f inet addr show|grep "scope global") && baseip=${baseip##* inet} && baseip=${baseip%%/*}
    fi
    baseip=${baseip%.*}
    scan $baseip 
fi