【问题标题】:using ruby packetfu to send raw TCP packet- need destination MAC address?使用 ruby​​ packetfu 发送原始 TCP 数据包 - 需要目标 MAC 地址?
【发布时间】:2012-06-17 06:50:14
【问题描述】:

我正在使用 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 的代码和文档后我无法弄清楚......

有人吗?

【问题讨论】:

    标签: ruby mac-address


    【解决方案1】:

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

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

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

    【讨论】:

    • 这正是我所需要的。 :) 谢谢托德。
    猜你喜欢
    • 2012-08-26
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 2012-10-28
    • 2012-04-08
    • 2022-01-22
    • 2021-06-05
    相关资源
    最近更新 更多