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.l.google.com:19302".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.l.google.com:19302".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 myexternaladdr = f.await.unwrap(); ```

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