Simple UDP-only STUN client for resolving external IP address:port behind NAT.
Supports both sync and async.
Example (sync):
```rust use std::net::UdpSocket; use stunclient::StunClient; use std::net::{SocketAddr,ToSocketAddrs}; let localaddr : SocketAddr = "0.0.0.0:0".parse().unwrap(); let stunaddr = "stun.counterpath.net:3478".tosocketaddrs().unwrap().filter(|x|x.isipv4()).next().unwrap(); let udp = UdpSocket::bind(localaddr).unwrap();
let c = StunClient::new(stun_addr);
let myexternaladdr = c.queryexternaladdress(&udp).unwrap(); ```
Example (async):
```rust use stunclient::StunClient; use std::net::{SocketAddr,ToSocketAddrs};
let localaddr : SocketAddr = "0.0.0.0:0".parse().unwrap(); let stunaddr = "stun.counterpath.net:3478".tosocketaddrs().unwrap().filter(|x|x.isipv4()).next().unwrap(); let udp = tokio::net::udp::UdpSocket::bind(&localaddr).unwrap();
let c = StunClient::new(stunaddr); let f = c.queryexternaladdressasync(udp); let (udp, myexternaladdr) = tokio::runtime::currentthread::blockon_all(f).unwrap(); ```