问题:
我有一台机器 Sender,它将数据包发送到本地网络中的某个 IP 地址。我还有机器 A、B、C 等,它们连接到同一个本地网络。我希望这些机器监听来自发送者的数据包比如说,在 Python 脚本中。此外,我无法更改发送方发送的数据包的目标 IP 地址。
问题:
我认为一个简单的解决方案是在机器 A、B、C... 上设置自定义广播 IP,这样它们就会监听发送数据包的 IP 地址。ifconfig
据我所知,这可以在 Linux 中使用命令完成。
但是这些机器运行的是 Windows。我如何在这些机器上设置自定义广播 IP?
答案1
您的问题的答案取决于多种情况。
捕获发件人内部信息
- 如果您想直接在 Sender 中捕获数据,请使用 Wireshark 或 Tshark 安装附带的特殊捕获驱动程序。捕获的数据可以存储在文件中并通过网络共享。
- Wireshark 甚至可以“远程”捕获数据。请参阅使用 Wireshark 进行远程数据包捕获:
https://www.golinuxcloud.com/wireshark-remote-packet-capture/
https://www.comparitech.com/net-admin/tcpdump-capture-wireshark/ -
Wireshark 还可以实时读取从另一个应用程序捕获的数据包。如果您想要实时查看网络,而 Wireshark 无法从该网络捕获数据包(例如,由于该网络类型不受您计算机上的 libpcap/WinPcap 版本支持),或者因为您想要捕获另一台计算机上的接口上的流量,而您的 libpcap/WinPcap 版本不支持从该计算机进行远程捕获),那么此功能非常有用。Windows 上的
Python
以下小型 Python 脚本展示了如何在 Windows 上使用 Python... https://wiki.wireshark.org/CaptureSetup/Pipes
发送方之外的其他可能性
- 您的网络由哪些网络元素组成?如果是交换机,则发送方与另一个网络节点 (X) 之间的通信根本无法被机器 A、B、C 拦截。交换机仅在通信对发送方<-->X 的端口之间发送数据帧。IPv4 通信中的广播是例外。这些通常仅在启动连接或请求 IP 地址时使用:ARP 请求、DHCP 发现等。
- 广播通常只占总通信量的一小部分,并且您不需要任何特殊设置来捕获它们,它们传播到整个网络,并且可以被广播域中的所有节点听到。
- 接收广播数据包只能提供少量信息。广播并非设计用于传输大量数据,而是具有辅助服务功能,例如在建立连接时。
- 仅在机器 A、B、C 上进行任何设置都无法实现 A、B、C 可以接收发送方和节点 X 之间的单播(即非广播)通信的副本。例外是网络攻击方法,其中您攻击交换机并迫使其进入泛洪模式。或者您攻击发送方并迫使它将通信的副本发送到其他节点(A、B、C...)。
- 获取通信对之外的另一个节点上的网络通信副本的一种正确且常用的方法是镜像交换机上的端口。这需要拥有一个托管交换机并设置一个由源和目标交换机端口组成的监控实例。然后,节点 A、B、C 连接到目标监控端口并接收发送方发送(和接收)内容的副本。
- 使用多播可以解决从源到多个节点的批量长期数据传输。它是一种使用多播目标地址的特殊通信类型。根据模式类型(稀疏模式/密集模式等),客户端会自动接收数据流或在订阅后接收数据流。多播最常用于多媒体(音频/视频)数据流。
答案2
在 IPV4 中,设置“自定义”广播地址与设置“自定义”子网的广播地址相同。
现在最小的合法子网是 /31。255.255.255.254,但大多数版本的 Windows 都不允许你轻松设置它。但你可以使用 .252
如果您的目标位于该范围的合法广播地址 (xxx.xxx.xxx.bbbbbb11),则该子网中的任何内容都将看到广播。目标不需要知道它位于小子网的广播地址,并且镜像不限于仅在一个子网中:按照适配器设置从 IPV4 到“高级”并添加另一个地址和子网。是的,这会将目标 IP 限制为 4 个地址中的 1 个,但这就是滥用系统超出其原始设计限制的结果。
世界正在转向“多播”的原因是它比“广播”效果更好,包括最初的“套接字”API 并非真正用于多个适配器或多个子网。即使你让它工作起来,它也会很脆弱。