有什么比在原始套接字上使用libc实现任意协议更好的吗



nix机箱是一个很好的libc包装器,用于处理原始套接字,但事实证明,它只支持那些原始套接字上的TCP和UDP协议。我想在原始套接字上使用ICMP——就像在中一样,我想在ICMP数据包中使用sendto,并在进入网络之前将其封装在IP标头+以太网标头中,就像使用标准libc函数一样。有没有任何包装纸/板条箱可以支持这一点,而不用我自己做丑陋的外国金融机构的事情?如果有一种方法可以将getprotobyname或类似的东西与nix一起使用,那就太好了。

Rust标准库目前没有原始套接字功能。现有的最低级别的网络库是libpcap的直接FFI。如果你想通过标准库使用TCP或UDP之外的任何协议,你必须自己实现它,或者看看pnet是否已经实现了。

使用pcap:

let mut handle = Device::lookup().unwrap().open().unwrap();
let data = &[0, 1, 2, 3, 5];
handle.sendpacket(data);

最新更新