![如何查找哪些其他机器连接到本地网络](https://linux22.com/image/16128/%E5%A6%82%E4%BD%95%E6%9F%A5%E6%89%BE%E5%93%AA%E4%BA%9B%E5%85%B6%E4%BB%96%E6%9C%BA%E5%99%A8%E8%BF%9E%E6%8E%A5%E5%88%B0%E6%9C%AC%E5%9C%B0%E7%BD%91%E7%BB%9C.png)
我怎样才能看到我所在的 LAN 上可用的所有计算机的列表。
答案1
您对相关 LAN 了解多少?我假设您不知道任何只是插入电缆或连接到 WiFi 的事情。
- 尝试使用 DHCP 请求 IP 地址。你得到一个吗?那么您已经知道一些事情:网关 IP、DHCP 服务器 IP、子网掩码,也许还有 DNS 服务器。
- 如果您没有收到,则要么没有 DHCP 服务器,要么网络经过 MAC 过滤。
- 无论哪种方式,开始捕获数据包线鲨。如果您使用无线网络或连接到集线器,则很容易。如果您连接到交换机,您可以尝试MAC泛洪将其切换回“集线器模式”,但更智能的交换机只会禁用您的端口。如果你无论如何都想尝试一下埃特卡普可以为您做到这一点。 (或者 macchanger 和 shell 脚本:))
- 通过查看数据包,您可以找到 IP 地址,但最重要的是,您可以猜测网络参数。如果您怀疑 MAC 过滤会在 MAC 地址离开后将您的 MAC 地址更改为观察到的地址之一(一段时间内不发送任何内容)。
- 当您对网络配置(网络掩码、网关等)有很好的了解时,请使用 nmap 进行扫描。 Nmap 可以做的事情比
-sP
某些主机不响应 ping 的情况要多得多(查看文档)。重要的是,nmap 仅在您的网络设置和路由正确时才起作用。 - 您可能可以使用 nmap 找到更多主机空闲扫描。
一些(大多数?)系统管理员不喜欢上述一些方法,因此请确保允许它(例如,这是您的网络)。另请注意,您自己的防火墙可以阻止其中一些方法(甚至通过 DHCP 获取 IP),因此请先检查您的规则。
地图
这是基本的操作方法使用 nmap 发现主机。正如我所说,当您尝试此操作时,您的网络配置应该是正确的。假设您的地址为 192.168.0.50,位于 /24 子网中。你的MAC地址是允许连接的东西,等等。我喜欢运行wireshark来看看我在做什么。
首先,我喜欢尝试列表扫描,它只尝试解析 DNS 中指定 IP 地址的 PTR 记录。它不会向主机发送任何内容,因此不能保证它确实已连接或打开,但很有可能。这种模式显然需要一个愿意与你对话的 DNS 服务器。
nmap -vvv -sn -sL 192.168.1.0/16
这可能什么也找不到,或者可能会告诉您每个 IP 都已启动。
然后我通常会进行ARP扫描。它发送 ARP 请求(您可以像"Who has <target IP>? Tell <your IP>"
在wireshark 中看到的那样)。这是非常可靠的,因为没有人过滤或伪造 ARP。主要缺点是它仅适用于您的子网。
nmap -vvv -sn -PR 192.168.1.0/24
如果您想扫描路由器或防火墙后面的内容,请使用 SYN 和 ACK 扫描。 SYN 启动 TCP 连接,您会收到 RST 或 SYNACK 作为响应。不管怎样,主人已经起来了。如果有防火墙,您可能会遇到 ICMP 通信被禁止或类似的情况。大多数情况下,如果防火墙过滤了您的数据包,您将一无所获。某些类型的防火墙仅过滤 TCP SYN 数据包并让所有其他 TCP 数据包通过。这就是 ACK 扫描有用的原因。如果主机启动,您将收到 RST 响应。由于您不知道安装了什么防火墙,因此请尝试两者。
nmap -vvv -sn -PS 10.1.2.0/24
nmap -vvv -sn -PA 10.1.2.0/24
当然,您可以使用 -PE -PP -PM 进行基于 ICMP 的扫描。
另一个有趣的方法是使用不存在的协议号的-PO。通常,防火墙只考虑 TCP 和 UDP,并且没有人测试当您尝试某些未知协议时会发生什么。如果主机已启动,则会出现 ICMP 协议无法访问的情况。
nmap -vvv -sn -PO160 10.1.2.0/24
您还可以告诉 nmap 跳过主机发现 (-Pn) 并在每个主机上执行端口扫描。这非常慢,但您可能会发现主机发现由于某种原因错过的其他主机。
答案2
我喜欢ip neigh
IpRoute2 附带的命令。
ip neigh
192.168.1.1 dev eth0 lladdr 00:1d:7e:f8:21:66 REACHABLE
但是,我认为它仅适用于arp
-able 节点。
答案3
安装地图并运行nmap -sP <mynetwork>
。
答案4
对于这两个答案:无需 nmap / 无需 sudo。
答案1
$ arp
答案2
以 xenoterracides 为基础,用ip neigh
和回答hosts
:
#!/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