如何使用 tcpdump 捕获本地网络上的所有数据包?

如何使用 tcpdump 捕获本地网络上的所有数据包?

我家里有一个无线路由器,一台 Linux 笔记本电脑和一台 Android 电脑都连接到它。假设 Linux 的 IP 地址为 10.5.5.1,mac 地址为 AA:AA:AA:AA:AA:AA,Android 的 IP 地址为 10.5.5.2,mac 地址为 AA:AA:AA:AA:AA:AB。

发送到我的 android 的数据包也应该到达 linux nic,我认为 tcpdump 只是忽略它们。

有没有办法在 Linux 上使用 tcpdump 获取发送到 Android 的数据包?tcpdump 是否只捕获通过链路层和网络层的数据包?

谢谢。

答案1

不幸的是(至少对于您想要的),如果不改变硬件和网络架构,您将无法记录所有数据包。

与在共享总线上运行或使用多端口中继器(集线器)的旧网络不同,现代交换网络通常不会向未连接到请求的目标 MAC 地址的任何交换机端口发送流量。此规则的例外是 MAC 和 IP 层的广播流量,通常由设备和服务发现协议使用。

为了达到您的目的,您需要将交换机在连接到您的 Linux 机器的端口上以混杂模式运行,以便交换机上的所有流量对于您的 tcpdump 进程都是可见的。

大多数情况下,最好的方法是购买支持端口镜像的交换机,并将其设置为将所有流量发送到 Linux 机器上的第二个网卡。

如果你希望采用此选项,请查看这些说明,为 SNORT 准备网络http://www.symantec.com/connect/articles/complete-snort-based-ids-architecture-part-one

请注意,如果您可以隔离您想要监控的单个协议,您可能能够在您的 Linux 机器上为其设置一个代理,配置 Android 设备以使用它,然后在传递流量时捕获它,因为它现在通过您的 Linux 机器。

不确定你问题的最后一部分。所有数据包都使用网络和数据链路层,并且 TCPdump 可以记录 l2 协议(如 ARP)和 l3(ICMP)上的非 IP 协议,所以我想是又不是?

答案2

如果您正在连接(或可以连接)笔记本电脑和 Android 设备无线到 Wi-Fi AP,如果您在 Wi-Fi AP 上仅使用 WEP 或不采用任何安全措施,那么您的笔记本电脑可能将能够看到并解码往返于您的 Android 设备的所有流量。

您可能需要将您的 AP 限制为更容易可靠接收的旧 802.11 调制方案(例如,通过禁用 802.11n 以便它只执行 802.11g),和/或将您的笔记本电脑放置在 AP 和 Android 设备“之间”。

从技术上讲,即使使用 WPA-PSK 或 WPA2-PSK 加密,也可以监听 Android 设备的 Wi-Fi 流量,但这比较棘手,因为每次 Android 设备加入或重新加入网络时,您都必须捕获前几个数据包。禁用加密可以解决这个问题,切换到老旧的 WEP 也可以,因为给定 WEP 网络上的每个人都始终使用完全相同的密钥。

是的,tcpdump会看到这些数据包,因为它默认以混杂模式运行,除非您添加参数-p来禁用它。tcpdump无法解密 WEP(或 WPA 或 WPA2),因此您必须使用 Wireshark(或 Wireshark 的“tshark”,如果您真的喜欢命令行工具)来执行此操作。

相关内容