我正在使用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查询等等。
我想我在这里遗漏了一些东西,就像我需要打电话的那样......但是在阅读了包装的代码和文档后我无法弄清楚....
人
答案 0 :(得分:1)
PacketFu不维护状态表或类似的东西。因此,确定目标地址将需要一些类似arp的功能,您需要在适当的地方自行实现。 PacketFu::Utils.arp("192.168.0.13")
通常足以开始。
如果您要回复您所见过的数据包,另一种方法是简单地复制该数据包的MAC地址。
最后,如果您确定目的地超出了本地网络,并且像大多数网络一样,您只有一个网关,则可以使用网关的mac地址。 PacketFu::Utils.whoami?
可以帮助您获取该信息。