1

我正在使用 Ruby packetfu 库来构造和发送原始数据包。我可以让它工作,但我认为我做错了一些事情。(顺便说一句,ruby+packetfu 真的让整个原始数据包操作变得容易..)

这是我的代码:(MAC地址被掩盖了一点)

            packet.eth_saddr = "XX:XX:88:XX:03:BD"
            packet.eth_daddr = "XX:6D:57:AD:XX:A3"

            packet.ip_header.ip_saddr="192.168.0.16"
            packet.ip_header.ip_daddr="192.168.0.13"

当我调用 packet.to_w('eth0') 时,它会被传递。正如你所看到的,是 MAC 地址让我摸不着头脑。每次需要发送数据包时都必须弄清楚目标MAC地址真的很不方便......我已经测试过源MAC地址不是那么重要,没有它它仍然可以工作。但是目标 MAC 地址是必须的(没有它,数据包不会出去)。

而且我不记得必须在 C 中使用原始套接字执行此操作...如果我需要在将数据包放在网络上之前执行 ARP 会很糟糕,更糟糕的是,如果我需要执行 DNS 查询或其他操作我将数据包发送到互联网....

我想我在这里遗漏了一些东西,比如我需要打电话的单线……但在阅读了 packetfu 的代码和文档后,我无法弄清楚……

任何人?

4

1 回答 1

2

PacketFu 不维护状态表或类似的东西。因此,确定目标地址将需要一些类似 arp 的功能,您需要自己在适当的地方实现这些功能。PacketFu::Utils.arp("192.168.0.13")通常足以开始。

如果您正在回复您看到的数据包,另一种技术是简单地复制该数据包的 MAC 地址。

最后,如果您确定您的目的地在本地网络之外,并且像大多数网络一样,您只有一个网关,您可以只使用网关的 MAC 地址。PacketFu::Utils.whoami?可以帮助您获取该信息。

于 2012-06-19T13:38:04.917 回答