如何查找哪些其他机器连接到本地网络

如何查找哪些其他机器连接到本地网络

我怎样才能看到我所在的 LAN 上可用的所有计算机的列表。

答案1

您对相关 LAN 了解多少?我假设您不知道任何只是插入电缆或连接到 WiFi 的事情。

  1. 尝试使用 DHCP 请求 IP 地址。你得到一个吗?那么您已经知道一些事情:网关 IP、DHCP 服务器 IP、子网掩码,也许还有 DNS 服务器。
  2. 如果您没有收到,则要么没有 DHCP 服务器,要么网络经过 MAC 过滤。
  3. 无论哪种方式,开始捕获数据包线鲨。如果您使用无线网络或连接到集线器,则很容易。如果您连接到交换机,您可以尝试MAC泛洪将其切换回“集线器模式”,但更智能的交换机只会禁用您的端口。如果你无论如何都想尝试一下埃特卡普可以为您做到这一点。 (或者 macchanger 和 shell 脚本:))
  4. 通过查看数据包,您可以找到 IP 地址,但最重要的是,您可以猜测网络参数。如果您怀疑 MAC 过滤会在 MAC 地址离开后将您的 MAC 地址更改为观察到的地址之一(一段时间内不发送任何内容)。
  5. 当您对网络配置(网络掩码、网关等)有很好的了解时,请使用 nmap 进行扫描。 Nmap 可以做的事情比-sP某些主机不响应 ping 的情况要多得多(查看文档)。重要的是,nmap 仅在您的网络设置和路由正确时才起作用。
  6. 您可能可以使用 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 neighIpRoute2 附带的命令。

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

相关内容