#udp-socket #sockets #udp #multicast #ip-address #ip-pktinfo #udp-packet

socket-pktinfo

用于通过 socket2 crate 在跨平台上处理 IP_PKTINFO 和 IPV6_PKTINFO 的小型库

3 个不稳定版本

0.2.1 2024 年 3 月 27 日
0.2.0 2024 年 3 月 27 日
0.1.0 2024 年 3 月 19 日

#1940 in 网络编程

MIT 许可证

22KB
425 代码行

socket-pktinfo

Build Cargo docs.rs Rust version: 1.63+

通过 socket2 crate 在跨平台上处理 IP_PKTINFO 和 IPV6_PKTINFO 的小型库。该 crate 的主要用例是确定 UDP 数据包是否发送到单播、广播或多播 IP 地址。兼容 Windows、Linux 和 macOS。

示例

use std::net::{Ipv4Addr, SocketAddrV4};
use socket2::{Domain, SockAddr};
use socket_pktinfo::PktInfoUdpSocket;

fn main() -> std::io::Result<()> {

    let mut buf = [0; 1024];
    let mut socket = PktInfoUdpSocket::new(Domain::IPV4)?;
    socket.bind(&SocketAddrV4::new(Ipv4Addr::UNSPECIFIED, 8000).into())?;
        
    match socket.recv(&mut buf) {//!
         Ok((bytes_received, info)) => {
             println!("{} bytes received on interface index {} from src {} with destination ip {}",
              bytes_received, info.if_index, info.addr_src, info.addr_dst);
         }
         Err(e) => {
             eprintln!("Error receiving packet - {}", e);
         }
    }
     
    Ok(())
}

依赖项

~0.2–13MB
~95K SLoC