Ruby将数据包发送到已知的MAC地址

时间:2012-04-20 21:26:42

标签: ruby

我喜欢将数据包发送到只有与之关联的MAC地址并连接到本地局域网的设备。

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

我想做一些像tcpreplay的东西,而不是红宝石。谢谢!

2 个答案:

答案 0 :(得分: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地址使用更熟悉的套接字操作与其进行通信。

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

答案 1 :(得分:1)

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

因此,如果要将某些内容发送到“MAC地址”,则需要发送原始以太网帧,这需要在另一侧进行理解。鉴于这些东西真的很低,这很少是你真正想做的事情。

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

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

相关问题