0

我喜欢将数据包发送到仅关联 MAC 地址并连接到本地 LAN 的设备。

ruby / gem 库中有什么东西可以用来执行这样的任务吗?

我想做一些类似 tcpreplay 的事情,但是用 ruby​​ 代替。谢谢!

4

2 回答 2

1

我想有几种方法。你没有说你是否想发送某种 IP 数据包,如果是,你没有说哪个 IP 协议。(我可以告诉你想发送一个以太网但是......什么封装协议?)

无论如何,您可以使用 Ruby 打开 SOCK_RAW,例如:

Socket.open(Socket::PF_INET, Socket::SOCK_RAW, Socket::IPPROTO_RAW)

另一种方法可能是只选择一个链接本地 IP,然后在本地 ARP 缓存中建立一个 IP/MAC 映射,如下所示:

system "arp -s host hw_addr"

然后,您可以使用链接本地 IP 地址使用更熟悉的套接字操作与它通信。

你需要成为所有这些事情的根源。

于 2012-04-20T21:36:47.800 回答
1

MAC 是 OSI 第 2 层上使用的地址,您在该层上使用的包类型是例如以太网帧。IP 套接字位于第 3/4 层,因此如果您使用 IP 套接字,则您正在发送 IP 数据包。

因此,如果您想向“MAC 地址”发送某些内容,则需要发送原始以太网帧,这些帧需要对方理解。鉴于这些东西的水平非常低,这很少是你真正想做的。

相反,您应该尝试使用广播/回复机制或多播(例如 Bonjour 使用)在本地网络(技术上是广播域)中获取远程设备的正确 IP 地址。这样,您始终可以使用更多受支持的 IP 层。为此,您的设备当然需要有一个 IP 地址。您可以使用 DHCP 或 IPv6 的地址自动配置等机制来建立它们。

至于您的问题,我不知道 Ruby 有任何库可以发送原始以太网帧。但是考虑到你无论如何都需要发明一个除了 IP 之外的新协议(这很难,真的很难),发送包可能是你最不关心的问题。

于 2012-04-21T07:59:46.697 回答