使用ruby packetfu发送原始TCP数据包 - 需要目标MAC地址?

时间:2012-06-17 06:50:15

标签: ruby mac-address

我正在使用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查询等等。

我想我在这里遗漏了一些东西,就像我需要打电话的那样......但是在阅读了包装的代码和文档后我无法弄清楚....

1 个答案:

答案 0 :(得分:1)

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

如果您要回复您所见过的数据包,另一种方法是简单地复制该数据包的MAC地址。

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