在Ruby中构建UDP数据报

在Ruby中构建UDP数据报,ruby,networking,udp,Ruby,Networking,Udp,在Ruby库中,或者作为RubyGem,是否有任何东西可以帮助我构建UDP数据报?我已经研究过套接字,但似乎没有一种方法可以简单地构建一个套接字而不发送它 我的用例是: 我需要构建一个UDP数据报,然后将其传递给另一个模块,该模块将负责发送数据报。简单地说,我只需要能够指定src/dst地址和端口,以及有效负载 我想在更糟糕的情况下,我可以构建某种结构,并手动填充相应的部分,但这感觉就像是重新发明轮子和大量工作。socket API中的底层内容应该有一些类似的东西,我可以利用,不是吗?所谓的so

在Ruby库中,或者作为RubyGem,是否有任何东西可以帮助我构建UDP数据报?我已经研究过套接字,但似乎没有一种方法可以简单地构建一个套接字而不发送它

我的用例是: 我需要构建一个UDP数据报,然后将其传递给另一个模块,该模块将负责发送数据报。简单地说,我只需要能够指定src/dst地址和端口,以及有效负载


我想在更糟糕的情况下,我可以构建某种结构,并手动填充相应的部分,但这感觉就像是重新发明轮子和大量工作。socket API中的底层内容应该有一些类似的东西,我可以利用,不是吗?

所谓的socket API本质上是一个非常低级的C语言API。创建UDP套接字时,连接信息存储在内核中。您永远不会“构建UDP数据报”,而是将数据写入UDP套接字文件描述符,然后在内核内部构造要通过线路发送的物理数据包

是的,如果您想要一个可以在应用程序中传递的数据结构,其中包含目标地址和一些数据,那么您需要自己创建这个结构,因为它本身在其他任何地方都不存在

没那么多工作。只有两个(或三个)数据元素。您可以使用一个简单的
Struct
来完成这项工作,除非您需要更复杂的功能,然后只构建一个普通的类

编辑

看来我误解了你的问题。请参阅下面我的评论以获取资源。例如,下面是来自的一些代码,可能更接近您要查找的内容:

 # tack on UDP
 n.l4 = UDP.new
 # randomize source port
 n.l4.src_port = 1024 + rand(65535-1024)
 # take destination port from the commandline
 n.l4.dst_port = ARGV[2].to_i
 # build a random amount of garbage for the payload
 n.l4.payload = Misc.randstring(ARGV[3].to_i)

 # fix 'er  up (checksum, length) prior to sending
 n.l4.fix!(n.l3.src_ip, n.l3.dst_ip)

它不仅仅是一个传递的数据结构,它还必须是一个正确的数据包,正确设置所有相应的IP和UDP头位,包括长度、校验和等等。@Calreth Oh ok。我误解了你想做的事。为此,我找到了一些你可能想看的库。它们似乎都以这样或那样的形式实现低级数据包类,因此您可以从中提取代码,或者在代码中包含最合适的库:| | | |谢谢!:)我成功地利用了球拍。唯一一件它似乎没有做的事(至少在没有使用它来实际发送数据包的情况下)是填充短帧以满足最小以太网长度,但我能够很容易地处理这个问题。