显示Linux中LAN上的计算机列表


62

我是一位网络开发人员,正在尝试更好地处理安全性。我试图找出一种方法(在基于Linux / Debian的发行版上)列出我的上网本所在的同一LAN上的所有计算机。我尝试使用“ arp -n”,但我不认为它是完整的列表,因为我的iPhone与上网本在同一个Wi-Fi路由器上,而且没有出现。有没有更好的方法来获取所有共享同一网关的计算机的完整列表?


Answers:


58

获取nmap。它是《黑客帝国》中使用的Trinity程序,您可以进行扫描以查找所有连接到您所在的LAN的设备以及更多其他设备。

是参考指南。


16
好。看起来像“ sudo nmap -sL 123.123.123。*”是我要的东西,或者也许是-sP而不是-sL。谢谢!
CaptSaltyJack 2011年

2
使用sudo apt-get install nmap
saintali

1
我以为这实际上是一个严肃的网站,哈哈+1
user10089632 '18

38

这是我使用的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
          ...

使用inet addr和Mask可以CIDR格式找出网络地址,更多有关CIDR的信息,请参见。地址是:

192.168.1.0/24

使用-sP参数运行nmap,它将仅检查主机是否在线来进行扫描:

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 

2
nmap -sA 192.168.1.0/24 nmap选项-sA显示了相似的描述性结果,具有更好的可读性,其中包括与选项-sP.. 一起使用的设备名称,IP,mac等。出于可读性考虑,我个人更喜欢-sA而不是-sP。
Jayzcode '16

@Jayzcode在我的计算机上-sA永不返回,而-sP只用了3.73秒(检测到路由器,我的PC和另一台PC)。知道为什么吗?
罗德里戈

17

arp -n仅向您显示您的计算机已经与之通信的LAN上的计算机。通过ping广播和所有主机的多播地址,可以使该列表更好地填充:

“所有”(二进制)广播地址。请注意,大多数IP堆栈会将其转换为您所连接的所有子网的子网广播地址:

ping 255.255.255.255

当前子网的子网广播地址。因此,假设您使用的是192.168.1.0/24:

ping 192.168.1.255

“所有主机”多播地址。我非常喜欢这一点,因为它更有可能找到为其他IP子网配置的主机,这些主机恰好与您连接到同一以太网LAN:

ping 224.0.0.1

请注意,此方法以及到目前为止在其他“答案”中提到的其他方法仅在当前网络上查找可访问IP的主机。那可能就是您所需要关心的,但是攻击者可能会窥探网络或对网络造成不良影响而无法通过IP看到。


8

ip neighhosts不需要nmap /不需要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……以前我没看到过)


或只是ip neigh | awk '{ print $1 }' | xargs -n1 host
blockloop

ip n简而言之。也许更好ip n | grep REACHABLE
Pablo A

4

我没有找到足够令人满意的现有答案,因此我想尝试一下。毕竟,FAQ建议为链接提供上下文

nmap太好了,如果使用起来有点混乱。这是我发现一些本地网络设备的基本方法,这些设备大多可复制粘贴。nmap -sP(或nmap -sn)通过ping扫描。“主机发现”还有其他选项,例如nmap -sLnmap -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 ...>

我很高兴知道是否还有更有效的方法。在那之前,我一直坚持下去。


4

例如,您可以尝试使用小型linux shell脚本ping所有给定的子网

$ 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

就我而言,对所有人说“ UP”,然后对所有人ip n说“失败”。
Pablo A

3

Hunt是一种命令行工具,能够在机器通过网络广播以获取信息时构建机器列表。它使用TCP,UDP,ICMP和ARP数据来构建网络上活动MAC地址的列表。它是一种被动工具,可以通过监听电线来工作。


4
我知道有手册页,但是在答案中查看示例将很有用。
Ehtesh Choudhury

2

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

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只会显示最后连接到路由器的一个


2

要扫描一系列IP地址的状态,这很简单:

sudo nmap -sn 192.168.1.2-20

哪里:

         -sn: Ping Scan - disable port scan

注意:

  • 在以前的Nmap版本中,-sn被称为-sP

我是在Mac OS X(基于BSD)上完成的。我不确定Linux版本是否有任何差异。


1
很棒,我所要做的只是输入:sudo nmap -sP 192.168.178.0-255。这确实子网扫描我英寸
狮子座格柏

2

您可以使用fping sudo apt-get install fping(在类似debian的操作系统中)。

fping与ping类似,但在ping多个主机时性能要好得多。该-r 1标志告诉fping只进行一轮。的2> 1 部分允许grep来过滤输出。

$ fping -g -r 1 192.168.1.0/24 2>1 | grep "alive"

将显示如下内容:

192.168.1.1 is alive
192.168.1.10 is alive
192.168.1.15 is alive
192.168.1.27 is alive

对于nmap,还有一个有趣的标志,可以让您看到MAC供应商-如果知道的话。与sudo一起使用以查看MAC地址。

$ sudo nmap -sP 192.168.1.0/24

您将得到例如:

Starting Nmap 7.40 ( https://nmap.org ) at 2019-05-23 18:49 CEST
Nmap scan report for 192.168.1.14
Host is up (-0.036s latency).
MAC Address: 20:F4:1B:E5:8F:7B (Shenzhen Bilian electronic)
Nmap scan report for 192.168.1.15
Host is up (-0.084s latency).
MAC Address: A4:31:35:E8:58:9E (Apple)
Nmap scan report for 192.168.1.27
Host is up (-0.15s latency).
MAC Address: 34:8A:7B:38:E3:14 (Samsung Electronics)
Nmap scan report for 192.168.1.29
Host is up (0.010s latency).
MAC Address: 80:2B:F9:75:F8:FF (Unknown)
Nmap scan report for 192.168.1.10
Host is up.
Nmap done: 256 IP addresses (5 hosts up) scanned in 25.52 seconds

1

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. 并行ping 192.168.2.0/24子网中的所有 ping 通的网络设备(以减少运行时间)。之后arp应显示所有已回答的设备。

  2. 不检查活动连接或当前连接,而是列出本地域服务保留的所有连接,甚至是真正的旧连接。

更详细的解释:

  • seq 254创建所有号码从1到254(对于从100到150的所有数字:seq 100 150
  • xargs调用ping并将“ IP”(-iIP)替换seq为stdin中的唯一编号,因此192.168.2.IP将第一个seq数字更改为192.168.2.1 ,-P指定应开始的并发ping进程数xargs,我选择与地址相同的数量+1( = 254)我有兴趣。
  • ping使用xargs(192.168.2.IP)修改ip地址,并且仅ping一次(-c1); -i在这种情况下,必须在参数上使用与xargs指定的标识符相同的标识符IP
  • grep time= 要删除每条包含多余信息的行,我们只对提供往返时间的答案感兴趣(=得到响应)
  • arp -a 显示有效的名称(ip)对

我将其称为pingall命令,并通过以下别名提供了该命令~/.bashrc

alias pingall='seq 254 | xargs -iIP -P255 ping -c1 192.168.2.IP |grep time='
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.