#stun #nat #ip-address #rfc5389

stunclient

一个简单的STUN客户端,用于解析UDP套接字的公网IP地址和端口号

9个版本

0.4.1 2024年5月21日
0.4.0 2022年12月30日
0.3.1 2021年10月29日
0.3.0 2021年7月25日
0.1.0 2019年1月31日

#3 in #nat

Download history 546/week @ 2024-04-26 450/week @ 2024-05-03 379/week @ 2024-05-10 559/week @ 2024-05-17 249/week @ 2024-05-24 190/week @ 2024-05-31 337/week @ 2024-06-07 277/week @ 2024-06-14 188/week @ 2024-06-21 367/week @ 2024-06-28 165/week @ 2024-07-05 154/week @ 2024-07-12 137/week @ 2024-07-19 443/week @ 2024-07-26 685/week @ 2024-08-02 702/week @ 2024-08-09

1,991 每月下载量
用于 turnhammer

MIT/Apache

14KB
230

一个简单的仅支持UDP的STUN客户端,用于解析NAT后的公网IP地址:端口。

支持同步和异步。

示例(同步)

use std::net::UdpSocket;
use stunclient::StunClient;
use std::net::{SocketAddr,ToSocketAddrs};
let local_addr : SocketAddr = "0.0.0.0:0".parse().unwrap();
let stun_addr = "stun.l.google.com:19302".to_socket_addrs().unwrap().filter(|x|x.is_ipv4()).next().unwrap();
let udp = UdpSocket::bind(local_addr).unwrap();

let c = StunClient::new(stun_addr);

let my_external_addr = c.query_external_address(&udp).unwrap();

示例(异步)

use stunclient::StunClient;
use std::net::{SocketAddr,ToSocketAddrs};

let local_addr : SocketAddr = "0.0.0.0:0".parse().unwrap();
let stun_addr = "stun.l.google.com:19302".to_socket_addrs().unwrap().filter(|x|x.is_ipv4()).next().unwrap();
let udp = tokio::net::udp::UdpSocket::bind(&local_addr).unwrap();

let c = StunClient::new(stun_addr);
let f = c.query_external_address_async(&udp);
let my_external_addr = f.await.unwrap();

stunclient的旧版本(0.1)几乎相同,但针对Tokio 0.1

依赖项

~2–11MB
~119K SLoC