-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathnat_behavior_discovery.rs
36 lines (30 loc) · 1.14 KB
/
nat_behavior_discovery.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
use std::env;
use anyhow::Error;
use async_std::net::ToSocketAddrs;
use async_std::task;
use stun_client::*;
fn main() -> Result<(), Error> {
let args: Vec<String> = env::args().collect();
if args.len() != 2 {
println!("Usage: cargo run --example nat_behavior_discovery -- <STUN Server IP:Port (that supports OTHER-ADDRESS and CHANGE-REQUEST)>");
panic!("invalid argument");
}
let stun_addr = &args[1];
task::block_on(async {
nat_behavior_discovery(stun_addr).await.unwrap();
});
Ok(())
}
async fn nat_behavior_discovery<A: ToSocketAddrs>(stun_addr: A) -> Result<(), Error> {
let mut client = Client::new("0.0.0.0:0", None).await?;
let result =
stun_client::nat_behavior_discovery::check_nat_mapping_behavior(&mut client, &stun_addr)
.await?;
println!("NAT Mapping Type: {:?}", result.mapping_type);
let mut client = Client::new("0.0.0.0:0", None).await?;
let result =
stun_client::nat_behavior_discovery::check_nat_filtering_behavior(&mut client, &stun_addr)
.await?;
println!("NAT Filtering Type: {:?}", result.filtering_type);
Ok(())
}