2012-04-20 27 views
0

我喜欢将数据包发送到仅与其关联的MAC地址的设备,并且还连接到本地LAN。Ruby将数据包发送到已知的MAC地址

ruby​​/gem库中是否有任何东西可以用来执行此类任务?

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

+0

MAC地址不是真的应该在没有知识的情况下联系他们所属的IP。你不能确定给定的MAC将始终具有相同的IP吗? – Jasper 2012-04-20 21:32:15

回答

1

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

所以如果你想发送一些“到一个MAC地址”,你需要发送原始的以太网帧,这些帧需要在另一侧理解。鉴于这些东西真的很低,这很少是你真正想要做的。

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

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

+0

谢谢你回复。我很好奇tcpreplay如何发送。所有它需要的是重放pcap到哪个接口。再次感谢所有的帮助。我将需要深入tcpreplay代码,并看到 – 2012-04-24 15:35:38

+0

感谢您的答案。我很好奇程序'tcpreplay'如何将pcap转储到eth接口。 – 2012-10-12 19:40:44

1

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

无论如何,你可以打开一个SOCK_RAW使用Ruby,是这样的:

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

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

system "arp -s host hw_addr" 

然后,你可以用更熟悉的插座OPS使用链路本地IP地址,它沟通。

你需要成为所有这些东西的根。

相关问题