理想情况下,它必须是CLI命令,因为我将从C ++运行它。
#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
。在
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).
评论
看起来好像可行(可能需要像我在公共网络上一样玩,所以它似乎只列出了网络上的所有服务器。
–克里斯托弗·威廉姆斯(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 楼
尝试安装nmap
(sudo 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 -a
或ip -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
评论
askubuntu.com/questions/82480/…|| serverfault.com/questions/72380/…更多重复:1.获取连接到同一路由器的设备的所有IP。 2.在Linux中显示局域网中计算机的列表
3.本地IP扫描的最佳方法和工具