#stun #nat #ip-address #sockets #rfc5389

stunclient

Simple STUN client for resolving external IP address and port of a UDP socket

9 releases

0.4.1 May 21, 2024
0.4.0 Dec 30, 2022
0.3.1 Oct 29, 2021
0.3.0 Jul 25, 2021
0.1.0 Jan 31, 2019

#1223 in Network programming

Download history 1001/week @ 2024-10-10 758/week @ 2024-10-17 1266/week @ 2024-10-24 771/week @ 2024-10-31 121/week @ 2024-11-07 207/week @ 2024-11-14 302/week @ 2024-11-21 340/week @ 2024-11-28 535/week @ 2024-12-05 414/week @ 2024-12-12 268/week @ 2024-12-19 368/week @ 2024-12-26 943/week @ 2025-01-02 1379/week @ 2025-01-09 790/week @ 2025-01-16 560/week @ 2025-01-23

3,698 downloads per month
Used in 3 crates (2 directly)

MIT/Apache

14KB
230 lines

Simple UDP-only STUN client for resolving external IP address:port behind NAT.

Supports both sync and async.

Example (sync):

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();

Example (async):

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();

Old version (0.1) of stunclient is almost the same, but is for Tokio 0.1.

Dependencies

~3–12MB
~125K SLoC