Merge branch 'master' into develop

This commit is contained in:
pradt2
2022-08-23 21:00:27 +01:00
11 changed files with 3117 additions and 886 deletions

62
.github/workflows/run-hourly-check.yml vendored Normal file
View File

@@ -0,0 +1,62 @@
name: Hourly check
on:
schedule:
# Minute zero of every hour
- cron: '0 * * * *'
env:
CARGO_TERM_COLOR: always
IS_BEHIND_NAT: true
RUST_LOG: info
IPGEOLOCATIONIO_API_KEY: ${{ secrets.IPGEOLOCATIONIO_API_KEY }}
WG_IFACE_PRIVATE_KEY: ${{ secrets.WG_IFACE_PRIVATE_KEY }}
WG_IFACE_ADDRESS: ${{ secrets.WG_IFACE_ADDRESS }}
WG_PEER_PUBLIC_KEY: ${{ secrets.WG_PEER_PUBLIC_KEY }}
WG_PEER_ENDPOINT: ${{ secrets.WG_PEER_ENDPOINT }}
WG_PEER_ALLOWED_IPS: ${{ secrets.WG_PEER_ALLOWED_IPS }}
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Git checkout
uses: actions/checkout@v3
- name: Set up system dependencies
run: sudo apt-get update && sudo apt-get install resolvconf wireguard wireguard-tools
- name: Enable build cache
uses: actions/cache@v3
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
- name: Build executable
run: cargo build
- name: Set up WireGuard
run: |
echo "[Interface]" >> /tmp/wg0.conf
echo "PrivateKey = $WG_IFACE_PRIVATE_KEY" >> /tmp/wg0.conf
echo "Address = $WG_IFACE_ADDRESS" >> /tmp/wg0.conf
echo "DNS = 1.1.1.1" >> /tmp/wg0.conf
echo "[Peer]" >> /tmp/wg0.conf
echo "PublicKey = $WG_PEER_PUBLIC_KEY" >> /tmp/wg0.conf
echo "Endpoint = $WG_PEER_ENDPOINT" >> /tmp/wg0.conf
echo "AllowedIPs = $WG_PEER_ALLOWED_IPS" >> /tmp/wg0.conf
sudo wg-quick up /tmp/wg0.conf
- name: Ensure IPv4 and IPv6 connectivity
run: curl google.com && curl -6 google.com
- name: Run executable
run: cargo run
- name: Create timestamp
id: create-timestamp
run: echo "::set-output name=timestamp::$(echo $(date --utc))"
- name: Git commit & push
uses: stefanzweifel/git-auto-commit-action@v4
with:
commit_message: Check ${{ steps.create-timestamp.outputs.timestamp }}

41
Cargo.lock generated
View File

@@ -15,13 +15,13 @@ dependencies = [
name = "always-online-stun"
version = "0.1.0"
dependencies = [
"async-trait",
"futures",
"log",
"pretty_env_logger",
"rand",
"reqwest",
"serde_json",
"stun_proto",
"stunclient",
"tokio",
"tokio-stream",
@@ -33,6 +33,17 @@ version = "1.0.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ee10e43ae4a853c0a3591d4e2ada1719e553be18199d9da9d4a83f5927c2f5c7"
[[package]]
name = "async-trait"
version = "0.1.56"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "96cf8829f67d2eab0b2dfa42c5d0ef737e0724e4a82b01b3e292456202b19716"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "atty"
version = "0.2.14"
@@ -549,11 +560,11 @@ checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086"
[[package]]
name = "proc-macro2"
version = "1.0.32"
version = "1.0.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba508cc11742c0dc5c1659771673afbab7a0efab23aa17e854cbab0837ed0b43"
checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7"
dependencies = [
"unicode-xid",
"unicode-ident",
]
[[package]]
@@ -789,10 +800,6 @@ dependencies = [
"trackable 0.2.24",
]
[[package]]
name = "stun_proto"
version = "0.1.0"
[[package]]
name = "stunclient"
version = "0.3.1"
@@ -809,13 +816,13 @@ dependencies = [
[[package]]
name = "syn"
version = "1.0.81"
version = "1.0.98"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f2afee18b8beb5a596ecb4a2dce128c719b4ba399d34126b9e4396e3f9860966"
checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd"
dependencies = [
"proc-macro2",
"quote",
"unicode-xid",
"unicode-ident",
]
[[package]]
@@ -984,6 +991,12 @@ version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f"
[[package]]
name = "unicode-ident"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c"
[[package]]
name = "unicode-normalization"
version = "0.1.19"
@@ -993,12 +1006,6 @@ dependencies = [
"tinyvec",
]
[[package]]
name = "unicode-xid"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
[[package]]
name = "untrusted"
version = "0.7.1"

View File

@@ -6,6 +6,7 @@ edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
async-trait = { version = "0.1.56", default-features = false }
futures = { version = "0.3.17" }
log = { version = "0.4.16" }
pretty_env_logger = { version = "0.4.0" }

File diff suppressed because one or more lines are too long

9
run.sh
View File

@@ -1,9 +0,0 @@
#!/usr/bin/env bash
cd "$(dirname "$0")"
timestamp=$(date --utc)
git checkout master && \
git pull && \
cargo run && \
git add . && \
git commit -m "Check ${timestamp}" && \
git push

View File

@@ -1,9 +1,26 @@
use std::collections::{HashMap};
use std::collections::{BTreeMap, HashMap};
use std::io;
use std::io::{ErrorKind};
use std::io::ErrorKind::Other;
use std::net::IpAddr;
use std::time::Duration;
use async_trait::async_trait;
use serde_json::Value;
type GeoIpData = (f32, f32);
#[async_trait]
pub(crate) trait GeoIpClient {
async fn get_hostname_geoip_info(&self, hostname: &str) -> io::Result<GeoIpData> {
self.get_geoip_info(hostname).await
}
async fn get_ip_geoip_info(&self, ip: IpAddr) -> io::Result<GeoIpData> {
self.get_geoip_info(ip.to_string().as_str()).await
}
async fn get_geoip_info(&self, hostname_or_ip: &str) -> io::Result<GeoIpData>;
}
pub(crate) struct IpGeolocationIoClient {
api_key: String,
@@ -11,25 +28,80 @@ pub(crate) struct IpGeolocationIoClient {
client: reqwest::Client,
}
type GeoIpData = (f32, f32);
impl IpGeolocationIoClient {
pub(crate) fn new(api_key: String) -> IpGeolocationIoClient {
IpGeolocationIoClient {
pub(crate) fn new(api_key: String) -> Self {
Self {
api_key,
url: String::from("https://api.ipgeolocation.io/ipgeo"),
client: reqwest::Client::default()
client: reqwest::Client::builder()
.build().unwrap(),
}
}
}
pub(crate) fn default() -> IpGeolocationIoClient {
IpGeolocationIoClient::new(std::env::var("IPGEOLOCATIONIO_API_KEY")
impl Default for IpGeolocationIoClient {
fn default() -> Self {
Self::new(std::env::var("IPGEOLOCATIONIO_API_KEY")
.expect("Env var IPGEOLOCATIONIO_API_KEY required. Get a free API key at https://ipgeolocation.io"))
}
}
impl IpGeolocationIoClient {
pub(crate) async fn get_hostname_geoip_info(&self, hostname: &str) -> io::Result<GeoIpData> {
#[async_trait]
impl GeoIpClient for IpGeolocationIoClient {
async fn get_geoip_info(&self, hostname_or_ip: &str) -> io::Result<GeoIpData> {
let response = self.client.get(self.url.as_str())
.query(&[("apiKey", self.api_key.as_str())])
.query(&[("ip", hostname_or_ip)])
.query(&[("fields", "latitude,longitude")])
.timeout(Duration::from_secs(5))
.send()
.await
.map_err(|err| io::Error::new(ErrorKind::Other, err))?
.json::<Value>()
.await
.map_err(|err| io::Error::new(ErrorKind::Other, err))?;
let lat = response
.get("latitude")
.map(|v| v.as_str().unwrap_or("0"))
.map(|s| s.parse().unwrap_or(0 as f32))
.unwrap_or(0 as f32);
let lon = response
.get("longitude")
.map(|v| v.as_str().unwrap_or("0"))
.map(|s| s.parse().unwrap_or(0 as f32))
.unwrap_or(0 as f32);
Ok((lat, lon))
}
}
pub(crate) struct GeolocationDbClient {
url: String,
client: reqwest::Client,
}
impl Default for GeolocationDbClient {
fn default() -> Self {
Self {
url: String::from("https://geolocation-db.com/json"),
client: reqwest::Client::builder()
.build()
.unwrap(),
}
}
}
struct GeolocationDbClientResponse {
latitude: Option<f32>,
longitude: Option<f32>,
}
#[async_trait]
impl GeoIpClient for GeolocationDbClient {
async fn get_hostname_geoip_info(&self, hostname: &str) -> io::Result<GeoIpData> {
self.get_geoip_info(hostname).await
}
@@ -38,54 +110,55 @@ impl IpGeolocationIoClient {
}
async fn get_geoip_info(&self, hostname_or_ip: &str) -> io::Result<GeoIpData> {
let response = self.client.get(self.url.as_str())
.query(&[("apiKey", self.api_key.as_str())])
.query(&[("ip", hostname_or_ip)])
.query(&[("fields", "latitude,longitude")])
.timeout(Duration::from_secs(1))
let url = self.url.clone() + "/" + hostname_or_ip;
let response = self.client.get(url)
.timeout(Duration::from_secs(5))
.send()
.await
.map_err(|err| io::Error::new(ErrorKind::Other, err))?
.json::<HashMap<String, String>>()
.json::<Value>()
.await
.map_err(|err| io::Error::new(ErrorKind::Other, err))?;
let lat = response.get("latitude")
.map(|lat_str| lat_str.parse().unwrap())
.unwrap_or(0 as f32);
let lat = response
.get("latitude")
.map(|v| v.as_f64().unwrap_or(0 as f64))
.unwrap_or(0 as f64) as f32;
let lon = response.get("longitude")
.map(|lon_str| lon_str.parse().unwrap())
.unwrap_or(0 as f32);
let lon = response
.get("longitude")
.map(|v| v.as_f64().unwrap_or(0 as f64))
.unwrap_or(0 as f64) as f32;
Ok((lat, lon))
}
}
pub(crate) struct CachedIpGeolocationIpClient {
path: String,
client: IpGeolocationIoClient,
map: HashMap<String, GeoIpData>,
pub(crate) struct CachedIpGeolocationIpClient<T: GeoIpClient + Default> {
cachefile_path: String,
client_impl: T,
map: BTreeMap<String, GeoIpData>,
}
impl CachedIpGeolocationIpClient {
pub(crate) async fn new(filename: String) -> io::Result<CachedIpGeolocationIpClient> {
let cache_str = tokio::fs::read_to_string(filename.as_str()).await?;
impl <T: GeoIpClient + Default> CachedIpGeolocationIpClient<T> {
pub(crate) async fn new(cachefile_path: String) -> io::Result<Self> {
let cache_str = tokio::fs::read_to_string(cachefile_path.as_str()).await?;
let map: HashMap<String, GeoIpData> = serde_json::de::from_str(cache_str.as_str())
let map: BTreeMap<String, GeoIpData> = serde_json::de::from_str(cache_str.as_str())
.map_err(|err| io::Error::new(Other, err))?;
let client = CachedIpGeolocationIpClient {
path: filename,
client: IpGeolocationIoClient::default(),
map
};
let client_impl = T::default();
Ok(client)
Ok(Self {
cachefile_path,
client_impl,
map
})
}
pub(crate) async fn default() -> io::Result<CachedIpGeolocationIpClient> {
CachedIpGeolocationIpClient::new(String::from("geoip_cache.txt")).await
pub(crate) async fn default() -> io::Result<Self> {
Self::new(String::from("geoip_cache.txt")).await
}
pub(crate) async fn get_hostname_geoip_info(&mut self, hostname: &str) -> io::Result<GeoIpData> {
@@ -97,17 +170,32 @@ impl CachedIpGeolocationIpClient {
}
pub(crate) async fn save(&self) -> io::Result<()> {
let str = serde_json::ser::to_string(&self.map)
let str = serde_json::ser::to_string_pretty(&self.map)
.map_err(|err| io::Error::new(Other, err))?;
tokio::fs::write(self.path.as_str(), str).await
tokio::fs::write(self.cachefile_path.as_str(), str).await
}
async fn get_geoip_info(&mut self, hostname_or_ip: &str) -> io::Result<GeoIpData> {
if let Some(geo_ip_data) = self.map.get(hostname_or_ip).cloned() {
return Ok(geo_ip_data)
}
let geo_ip_data = self.client.get_geoip_info(hostname_or_ip).await?;
let geo_ip_data = self.client_impl.get_geoip_info(hostname_or_ip).await?;
self.map.insert(String::from(hostname_or_ip), geo_ip_data.clone());
Ok(geo_ip_data)
}
}
}
#[cfg(test)]
mod tests {
use std::net::Ipv4Addr;
use super::*;
#[tokio::test]
async fn geolocation_db_client() {
let (lat, lon) = GeolocationDbClient::default()
.get_ip_geoip_info(IpAddr::V4(Ipv4Addr::from([1,1,1,1]))).await.unwrap();
assert_ne!(0 as f32, lat);
assert_ne!(0 as f32, lon);
}
}

View File

@@ -1,18 +1,14 @@
use std::cell::RefCell;
use std::convert::TryInto;
use std::fmt::format;
use std::io;
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr};
use std::rc::Rc;
use std::time::Duration;
use futures::StreamExt;
use tokio::net::UdpSocket;
use tokio::time::Instant;
use crate::geoip::GeolocationDbClient;
use crate::utils::join_all_with_semaphore;
use crate::outputs::{ValidHosts, ValidIpV4s, ValidIpV6s};
use crate::servers::StunServer;
use crate::stun::{StunServerTestResult, StunSocketResponse};
// use crate::stun_codec::{Attribute, NonParsableAttribute};
extern crate pretty_env_logger;
#[macro_use] extern crate log;
@@ -22,96 +18,30 @@ mod stun;
mod utils;
mod outputs;
mod geoip;
mod git;
const CONCURRENT_SOCKETS_USED_LIMIT: usize = 64;
async fn get_stun_response(addr: &str) -> io::Result<()> {
let sock = UdpSocket::bind("0.0.0.0:0").await?;
sock.connect(addr).await?;
let cookie = 0x2112A442_u32.to_be_bytes();
let req = [0, 1u8.to_be(), 0, 0, cookie[0], cookie[1], cookie[2], cookie[3], 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ];
sock.send(&req).await?;
let mut buf = [0u8; 120];
let bytes_read = tokio::time::timeout(Duration::from_secs(1), sock.recv(&mut buf)).await?;
if bytes_read.is_err() {
info!("Addr {} timed out", addr);
return Ok(());
}
let bytes_read = bytes_read.unwrap();
// let r = stun_codec::StunMessageReader { bytes: buf[0..bytes_read].as_ref() };
// info!("Method {:?} , Class {:?}", r.get_method().unwrap(), r.get_class());
// r.get_attrs().for_each(|attr| {
// match &attr {
// Ok(attr) => {
// match attr {
// Attribute::MappedAddress(r) => info!("MappedAddress {:?}", SocketAddr::new(r.get_address().unwrap(), r.get_port())),
// Attribute::ResponseAddress(r) => info!("ResponseAddress {:?}", SocketAddr::new(r.get_address().unwrap(), r.get_port())),
// Attribute::ChangeAddress(r) => info!("ChangeAddress {:?}", SocketAddr::new(r.get_address().unwrap(), r.get_port())),
// Attribute::SourceAddress(r) => info!("SourceAddress {:?}", SocketAddr::new(r.get_address().unwrap(), r.get_port())),
// Attribute::ChangedAddress(r) => info!("ChangedAddress {:?}", SocketAddr::new(r.get_address().unwrap(), r.get_port())),
// Attribute::XorMappedAddress(r) => info!("XorMappedAddress {:?}", SocketAddr::new(r.get_address().unwrap(), r.get_port())),
// Attribute::OptXorMappedAddress(r) => info!("OptXorMappedAddress {:?}", SocketAddr::new(r.get_address().unwrap(), r.get_port())),
// Attribute::OtherAddress(r) => info!("OtherAddress {:?}", SocketAddr::new(r.get_address().unwrap(), r.get_port())),
// Attribute::ResponseOrigin(r) => info!("ResponseOrigin {:?}", SocketAddr::new(r.get_address().unwrap(), r.get_port())),
// Attribute::AlternateServer(r) => info!("AlternateServer {:?}", SocketAddr::new(r.get_address().unwrap(), r.get_port())),
// Attribute::Software(r) => info!("Software {}", r.get_software().unwrap()),
// Attribute::ReflectedFrom(r) => info!("ReflectedFrom {:?}", SocketAddr::new(r.get_address().unwrap(), r.get_port())),
// Attribute::ErrorCode(r) => info!("ErrorCode {:?}", r.get_error().unwrap()),
// Attribute::Fingerprint(r) => info!("Fingerprint {}", r.get_checksum()),
// Attribute::MessageIntegrity(r) => info!("MessageIntegrity {:?}", r.get_digest()),
// Attribute::Realm(r) => info!("Realm {}", r.get_realm().unwrap()),
// Attribute::Nonce(r) => info!("Nonce {}", r.get_nonce().unwrap()),
// Attribute::Password(r) => info!("Password {}", r.get_password().unwrap()),
// Attribute::UnknownAttributes(r) => {
// for attr_code in r.get_attr_codes() {
// info!("Unknown attribute {}", attr_code)
// }
// },
// Attribute::Username(r) => info!("Username {}", r.get_username().unwrap()),
// }
// }
// Err(attr) => {
// match &attr {
// NonParsableAttribute::Unknown(r) => warn!("UnknownAttr type {:04x} len {}", r.get_type_raw(), r.get_total_length()),
// NonParsableAttribute::Malformed(r) => warn!("MalformedAttr type {:04x} len {}", r.get_type_raw(), r.get_value_length_raw()),
// }
// }
// }
// });
Ok(())
}
#[tokio::main(flavor = "current_thread")]
async fn main() -> io::Result<()> {
pretty_env_logger::init();
let client = Rc::new(RefCell::new(geoip::CachedIpGeolocationIpClient::default().await?));
let is_behind_nat: bool = std::env::var("IS_BEHIND_NAT")
.unwrap_or(String::from("false"))
.parse()
.expect("IS_BEHIND_NAT must be true or false");
let client = Rc::new(RefCell::new(geoip::CachedIpGeolocationIpClient::<GeolocationDbClient>::default().await?));
let stun_servers = servers::get_stun_servers().await?;
let stun_servers_count = stun_servers.len();
info!("Loaded {} stun server hosts", stun_servers.len());
let f = stun_servers.iter().map(|server| {
async move {
let addr = format!("{}:{}", server.hostname, server.port);
get_stun_response(addr.as_str()).await;
}
}).collect::<Vec<_>>();
join_all_with_semaphore(f.into_iter(), 1).await;
let stun_server_test_results = stun_servers.into_iter()
.map(|candidate| {
async move {
let test_result = stun::test_udp_stun_server(candidate).await;
print_stun_server_status(&test_result);
test_result
}
.map(|candidate| async move {
let test_result = stun::test_udp_stun_server(candidate, is_behind_nat).await;
print_stun_server_status(&test_result);
test_result
})
.collect::<Vec<_>>();

View File

@@ -1,5 +1,7 @@
use std::net::{SocketAddr};
use std::time::{Duration, Instant};
use stunclient::Error;
use tokio::net::UdpSocket;
use crate::utils::join_all_with_semaphore;
use crate::StunServer;
@@ -23,22 +25,22 @@ impl StunServerTestResult {
self.is_resolvable()
&& self.is_any_healthy()
&& self.is_any_timeout()
&&! self.is_any_invalid_mapping()
&&! self.is_any_unexpected_response()
&& !self.is_any_invalid_mapping()
&& !self.is_any_unexpected_response()
}
pub(crate) fn is_timeout(&self) -> bool {
self.is_resolvable()
&&! self.is_any_healthy()
&& !self.is_any_healthy()
&& self.is_any_timeout()
&&! self.is_any_invalid_mapping()
&&! self.is_any_unexpected_response()
&& !self.is_any_invalid_mapping()
&& !self.is_any_unexpected_response()
}
fn is_any_healthy(&self) -> bool {
self.is_resolvable() && self.socket_tests.iter()
.any(|result| match result.result {
StunSocketResponse::HealthyResponse {..} => true,
StunSocketResponse::HealthyResponse { .. } => true,
_ => false,
})
}
@@ -46,7 +48,7 @@ impl StunServerTestResult {
fn is_any_timeout(&self) -> bool {
self.is_resolvable() && self.socket_tests.iter()
.any(|result| match result.result {
StunSocketResponse::Timeout {..} => true,
StunSocketResponse::Timeout { .. } => true,
_ => false,
})
}
@@ -54,7 +56,7 @@ impl StunServerTestResult {
fn is_any_invalid_mapping(&self) -> bool {
self.is_resolvable() && self.socket_tests.iter()
.any(|result| match result.result {
StunSocketResponse::InvalidMappingResponse {..} => true,
StunSocketResponse::InvalidMappingResponse { .. } => true,
_ => false,
})
}
@@ -62,7 +64,7 @@ impl StunServerTestResult {
fn is_any_unexpected_response(&self) -> bool {
self.is_resolvable() && self.socket_tests.iter()
.any(|result| match result.result {
StunSocketResponse::UnexpectedError {..} => true,
StunSocketResponse::UnexpectedError { .. } => true,
_ => false,
})
}
@@ -71,7 +73,7 @@ impl StunServerTestResult {
#[derive(Clone, Debug)]
pub(crate) struct StunSocketTestResult {
pub(crate) socket: SocketAddr,
pub(crate) result: StunSocketResponse
pub(crate) result: StunSocketResponse,
}
impl StunSocketTestResult {
@@ -85,7 +87,7 @@ pub(crate) enum StunSocketResponse {
HealthyResponse { rtt: Duration },
InvalidMappingResponse { expected: SocketAddr, actual: SocketAddr, rtt: Duration },
Timeout { deadline: Duration },
UnexpectedError { err: String }
UnexpectedError { err: String },
}
impl StunSocketResponse {
@@ -98,18 +100,21 @@ impl StunSocketResponse {
}
pub(crate) async fn test_udp_stun_server(
server: StunServer
server: StunServer,
behind_nat: bool,
) -> StunServerTestResult {
let socket_addrs = tokio::net::lookup_host(format!("{}:{}", server.hostname, server.port)).await;
if socket_addrs.is_err() {
if socket_addrs.as_ref().err().unwrap().to_string() != "failed to lookup address information: Name or service not known" {
let err_str = socket_addrs.as_ref().err().unwrap().to_string();
if err_str.contains("Name or service not known") ||
err_str.contains("No address associated with hostname") {} else {
warn!("{:<21} -> Unexpected DNS failure: {}", server.hostname, socket_addrs.as_ref().err().unwrap().to_string());
}
return StunServerTestResult {
server,
socket_tests: vec![],
}
};
}
let results = socket_addrs.unwrap()
@@ -119,7 +124,11 @@ pub(crate) async fn test_udp_stun_server(
let hostname = server.hostname.as_str();
async move {
let stun_socket = SocketAddr::new(addr, port);
let res = test_socket_addr(hostname, stun_socket).await;
let res = if behind_nat {
test_socket_addr_against_trusted_party(hostname, stun_socket).await
} else {
test_socket_addr(hostname, stun_socket).await
};
res
}
})
@@ -129,59 +138,107 @@ pub(crate) async fn test_udp_stun_server(
StunServerTestResult {
server,
socket_tests: results
socket_tests: results,
}
}
async fn test_socket_addr(
hostname: &str,
socket_addr: SocketAddr
socket_addr: SocketAddr,
) -> StunSocketTestResult {
let local_socket = tokio::net::UdpSocket::bind(
let local_socket = UdpSocket::bind(
match socket_addr {
SocketAddr::V4(..) => { "0.0.0.0:0" }
SocketAddr::V6(..) => { "[::]:0" }
}
).await.unwrap();
let mut client = stunclient::StunClient::new(socket_addr);
test_socket(hostname, socket_addr, local_socket.local_addr().unwrap(), &local_socket).await
}
async fn test_socket_addr_against_trusted_party(
hostname: &str,
socket_addr: SocketAddr,
) -> StunSocketTestResult {
let local_socket = UdpSocket::bind(
match socket_addr {
SocketAddr::V4(..) => { "0.0.0.0:0" }
SocketAddr::V6(..) => { "[::]:0" }
}
).await.unwrap();
let trusted_party_addr = tokio::net::lookup_host("stun.l.google.com:19305").await
.expect("Trusted party hostname must be resolvable")
.find_map(|resolved_addr| match &socket_addr {
SocketAddr::V4(_) => match &resolved_addr {
SocketAddr::V4(_) => Some(resolved_addr),
SocketAddr::V6(_) => None,
},
SocketAddr::V6(_) => match &resolved_addr {
SocketAddr::V4(_) => None,
SocketAddr::V6(_) => Some(resolved_addr)
}
}).expect("Trusted party must provide IPv4 and v6 connectivity");
let mut local_socket_mapping = None;
for _ in 0..3 {
let mut client = stunclient::StunClient::new(trusted_party_addr);
let deadline = Duration::from_secs(5);
client.set_timeout(deadline);
match client.query_external_address_async(&local_socket).await {
Ok(addr) => {local_socket_mapping = Some(addr); break},
Err(_) => continue
}
};
let local_socket_mapping = local_socket_mapping.expect("Trusted party must provide a valid mapping");
test_socket(hostname, socket_addr, local_socket_mapping, &local_socket).await
}
async fn test_socket(hostname: &str,
stun_server_addr: SocketAddr,
expected_addr: SocketAddr,
local_socket: &UdpSocket,
) -> StunSocketTestResult {
let mut client = stunclient::StunClient::new(stun_server_addr);
let deadline = Duration::from_secs(1);
client.set_timeout(deadline);
let start = Instant::now();
let result = client.query_external_address_async(&local_socket).await;
let result = client.query_external_address_async(local_socket).await;
let request_duration = Instant::now() - start;
return match result {
Ok(return_addr) => if return_addr.port() == local_socket.local_addr().unwrap().port() {
debug!("{:<25} -> Socket {:<21} returned a healthy response", hostname, &socket_addr);
Ok(return_addr) => if return_addr.port() == expected_addr.port() {
debug!("{:<25} -> Socket {:<21} returned a healthy response", hostname, &stun_server_addr);
StunSocketTestResult {
socket: socket_addr,
socket: stun_server_addr,
result: StunSocketResponse::HealthyResponse { rtt: request_duration },
}
} else {
debug!("{:<25} -> Socket {:<21} returned an invalid mapping: expected={}, actual={}", hostname, &socket_addr, local_socket.local_addr().unwrap(), return_addr);
debug!("{:<25} -> Socket {:<21} returned an invalid mapping: expected={}, actual={}", hostname, &stun_server_addr, expected_addr, return_addr);
StunSocketTestResult {
socket: socket_addr,
socket: stun_server_addr,
result: StunSocketResponse::InvalidMappingResponse { expected: local_socket.local_addr().unwrap(), actual: return_addr, rtt: request_duration },
}
},
Err(err) => {
if err.to_string() == "Timed out waiting for STUN server reply" {
debug!("{:<25} -> Socket {:<21} timed out after {:?}", hostname, &socket_addr, deadline);
debug!("{:<25} -> Socket {:<21} timed out after {:?}", hostname, &stun_server_addr, deadline);
StunSocketTestResult {
socket: socket_addr,
socket: stun_server_addr,
result: StunSocketResponse::Timeout { deadline },
}
} else {
debug!("{:<25} -> Socket {:<21} returned an unexpected error: {:?}", hostname, &socket_addr, err.to_string());
debug!("{:<25} -> Socket {:<21} returned an unexpected error: {:?}", hostname, &stun_server_addr, err.to_string());
StunSocketTestResult {
socket: socket_addr,
socket: stun_server_addr,
result: StunSocketResponse::UnexpectedError { err: err.to_string() },
}
}
},
}
}
};
}

View File

@@ -1,387 +1,376 @@
stun.halonet.pl:3478
stun.steinbeis-smi.de:3478
stun.leonde.org:3478
stun.eurosys.be:3478
stun.schoeffel.de:3478
stun.ppdi.com:3478
stun.twt.it:3478
stun.voipcheap.com:3478
stun.savemgo.com:3478
stun.sky.od.ua:3478
stun2.l.google.com:19302
stun.grazertrinkwasseringefahr.at:3478
stun.vivox.com:3478
stun.bluesip.net:3478
stun.rackco.com:3478
stun.ortopediacoam.it:3478
stun.medvc.eu:3478
stun.effexx.com:3478
stun.axialys.net:3478
stun.dus.net:3478
stun.voipxs.nl:3478
stun.beebeetle.com:3478
stun.voipgate.com:3478
stun.voipzoom.com:3478
stun.poivy.com:3478
stun.telnyx.com:3478
stun.t-online.de:3478
stun.lleida.net:3478
stun.piratenbrandenburg.de:3478
stun.eleusi.com:3478
stun.easycall.pl:3478
stun1.l.google.com:19302
stun.syrex.co.za:3478
stun.siplogin.de:3478
stun.wcoil.com:3478
stun.bethesda.net:3478
stun.globalmeet.com:3478
stun.poetamatusel.org:3478
stun.miwifi.com:3478
stun.uabrides.com:3478
stun.streamnow.ch:3478
stun.training-online.eu:3478
stun.localphone.com:3478
stun.openvoip.it:3478
stun.12voip.com:3478
stun.eoni.com:3478
stun.callromania.ro:3478
stun.sylaps.com:3478
stun.nextcloud.com:3478
stun.textz.com:3478
stun.stadtwerke-eutin.de:3478
stun.totalcom.info:3478
stun.freevoipdeal.com:3478
stun.callwithus.com:3478
stun.comrex.com:3478
stun.funwithelectronics.com:3478
stun.cablenet-as.net:3478
stun3.l.google.com:19302
stun2.l.google.com:19305
stun.tula.nu:3478
stun.avigora.fr:3478
stun.palava.tv:3478
stun.meowsbox.com:3478
stun.ooma.com:3478
stun.otos.pl:3478
stun.voipwise.com:3478
stun.l.google.com:19305
stun.sip.us:3478
stun.kanojo.de:3478
stun.zadarma.com:3478
stun.neomedia.it:3478
stun.3deluxe.de:3478
stun.optdyn.com:3478
stun.vo.lu:3478
stun.engineeredarts.co.uk:3478
stun.bernardoprovenzano.net:3478
stun.voipbusterpro.com:3478
stun.tel2.co.uk:3478
stun.netappel.com:3478
stun.voip.eutelia.it:3478
stun.istitutogramscisiciliano.it:3478
stun.voip.aebc.com:3478
stun.smartvoip.com:3478
stun.issabel.org:3478
stun.sipnet.net:3478
stun.trainingspace.online:3478
stun.easyvoip.com:3478
stun.geesthacht.de:3478
stun.stunprotocol.org:3478
stun.thebrassgroup.it:3478
stun.next-gen.ro:3478
stun.meetwife.com:3478
stun.cloopen.com:3478
stun.expandable.io:3478
stun.simlar.org:3478
stun.lundimatin.fr:3478
stun.leibergmbh.de:3478
stun.surjaring.it:3478
stun.highfidelity.io:3478
stun.3wayint.com:3478
stun.nanocosmos.de:3478
stun.clickphone.ro:3478
stun.justvoip.com:3478
stun.piratecinema.org:3478
stun.url.net.au:3478
stun.acronis.com:3478
stun.onthenet.com.au:3478
stun.nfon.net:3478
stun.sparvoip.de:3478
stun.lebendigefluesse.at:3478
stun.sipgate.net:3478
stun.teliax.com:3478
stun.voys.nl:3478
stun.ru-brides.com:3478
stun.tel.lu:3478
stun.officinabit.com:3478
relay.webwormhole.io:3478
stun.infra.net:3478
stun.gntel.nl:3478
stun.voipblast.com:3478
stun.atagverwarming.nl:3478
stun.voztovoice.org:3478
stun.voipraider.com:3478
stun.voipstunt.com:3478
stun.yollacalls.com:3478
stun.wifirst.net:3478
stun1.l.google.com:19305
stun.h4v.eu:3478
stun3.l.google.com:19305
stun.1und1.de:3478
stun.healthtap.com:3478
stun.telonline.com:3478
stun.demos.ru:3478
stun.aaisp.co.uk:3478
stun.alpirsbacher.de:3478
stun.anlx.net:3478
stun.surjaring.it:3478
stun.myvoipapp.com:3478
stun.skydrone.aero:3478
stun.muoversi.net:3478
stun.kore.com:3478
stun.sovtest.ru:3478
stun.l.google.com:19302
stun.medvc.eu:3478
stun.gmx.de:3478
stun.foad.me.uk:3478
stun.godatenow.com:3478
stun.telbo.com:3478
stun.linphone.org:3478
stun.dls.net:3478
stun.komsa.de:3478
stun.voys.nl:3478
stun.siplogin.de:3478
stun.m-online.net:3478
stun.otos.pl:3478
stun.antisip.com:3478
stun.gmx.net:3478
stun.sylaps.com:3478
stun.schlund.de:3478
stun.lleida.net:3478
stun.voicetrading.com:3478
stun.voipzoom.com:3478
stun.nextcloud.com:443
stun.uabrides.com:3478
stun.fmo.de:3478
stun.junet.se:3478
stun.signalwire.com:3478
stun.gigaset.net:3478
stun.sipy.cz:3478
stun.voip.eutelia.it:3478
stun.sipgate.net:3478
stun.schoeffel.de:3478
stun.siedle.com:3478
stun.wxnz.net:3478
stun.talkho.com:3478
stun.vincross.com:3478
stun.funwithelectronics.com:3478
stun.freeswitch.org:3478
stun.ppdi.com:3478
stun.vadacom.co.nz:3478
stun.arkh-edu.ru:3478
stun.ooma.com:3478
stun.symonics.com:3478
stun.ringostat.com:3478
stun.lowratevoip.com:3478
stun.cope.es:3478
stun.yollacalls.com:3478
stun.sipnet.ru:3478
stun.hosteurope.de:3478
stun.nextcloud.com:3478
stun.sipdiscount.com:3478
stun.gravitel.ru:3478
stun.netgsm.com.tr:3478
stun.coffee-sen.com:3478
stun.galeriemagnet.at:3478
stun.studio71.it:3478
stun.mobile-italia.com:3478
stun.openjobs.hu:3478
stun.voipinfocenter.com:3478
stun.bandyer.com:3478
stun.voipdiscount.com:3478
stun.baltmannsweiler.de:3478
stun.netappel.com:3478
stun.voztele.com:3478
stun.voippro.com:3478
stun.kaseya.com:3478
stun.vozelia.com:3478
stun.redworks.nl:3478
stun.eurosys.be:3478
stun.landvast.nl:3478
stun.business-isp.nl:3478
stun.cheapvoip.com:3478
stun.voipconnect.com:3478
stun.stadtwerke-eutin.de:3478
stun.newrocktech.com:3478
stun.spoiltheprincess.com:3478
stun.ttmath.org:3478
stun.peethultra.be:3478
stun.tel2.co.uk:3478
stun.zentauron.de:3478
stun.jabbim.cz:3478
stun.ringvoz.com:3478
stun.dcalling.de:3478
iphone-stun.strato-iphone.de:3478
stun.dus.net:3478
stun.zottel.net:3478
stun.bearstech.com:3478
stun.labs.net:3478
stun.acronis.com:3478
stun.senstar.com:3478
stun.next-gen.ro:3478
stun.voipcheap.com:3478
stun.nautile.nc:3478
stun.vavadating.com:3478
stun.sipgate.net:10000
stun4.l.google.com:19302
stun.voipia.net:3478
stun.peeters.com:3478
stun.framasoft.org:3478
stun.webmatrix.com.br:3478
stun.kedr.io:3478
stun.ipshka.com:3478
stun.zepter.ru:3478
stun.epygi.com:3478
stun.solcon.nl:3478
stun.qq.com:3478
stun.justvoip.com:3478
stun2.l.google.com:19302
stun.voicetech.se:3478
stun.healthtap.com:3478
stun.poetamatusel.org:3478
stun.3deluxe.de:3478
stun.voipblast.com:3478
stun.teamfon.de:3478
stun.lebendigefluesse.at:3478
stun.aa.net.uk:3478
stun.axeos.nl:3478
stun.callromania.ro:3478
stun.atagverwarming.nl:3478
stun.trivenet.it:3478
stun.poivy.com:3478
stun.solnet.ch:3478
stun.tel.lu:3478
stun.bethesda.net:3478
stun.solomo.de:3478
stun.romaaeterna.nl:3478
stun.highfidelity.io:3478
stun.kotter.net:3478
stun.liveo.fr:3478
stun.cellmail.com:3478
stun.wifirst.net:3478
stun.openvoip.it:3478
stun.obovsem.com:3478
stun.wia.cz:3478
stun.sip.us:3478
stun.carlovizzini.it:3478
stun.allflac.com:3478
stun.fitauto.ru:3478
stun.url.net.au:3478
stun.zepter.ru:3478
stun.teliax.com:3478
stun.voip.blackberry.com:3478
stun.cibercloud.com.br:3478
stun.graftlab.com:3478
stun.nonoh.net:3478
stun.bluesip.net:3478
stun.fondazioneroccochinnici.it:3478
stun.geonet.ro:3478
stun.sonetel.net:3478
stun.srce.hr:3478
stun.plexicomm.net:3478
stun2.l.google.com:19305
stun.meowsbox.com:3478
stun.katholischekirche-ruegen.de:3478
stun.bernardoprovenzano.net:3478
stun.lovense.com:3478
stun.rolmail.net:3478
stun.callwithus.com:3478
stun.acquageraci.it:3478
stun.alphacron.de:3478
stun.logic.ky:3478
stun.comrex.com:3478
stun.londonweb.net:3478
stun4.l.google.com:19305
stun.siptraffic.com:3478
stun.demos.su:3478
stun.palava.tv:3478
stun1.l.google.com:19302
stun.streamnow.ch:3478
stun.clickphone.ro:3478
stun.radiojar.com:3478
stun.it1.hr:3478
stun.dunyatelekom.com:3478
stun.gntel.nl:3478
stun.heeds.eu:3478
stun.myvoiptraffic.com:3478
stun.lineaencasa.com:3478
stun.voip.aebc.com:3478
stun.connecteddata.com:3478
stun.syrex.co.za:3478
stun.wemag.com:3478
stun.sipnet.net:3478
stun.stunprotocol.org:3478
stun.ipshka.com:3478
stun.fbsbx.com:3478
stun.goldener-internetpreis.de:3478
stun.isp.net.au:3478
stun.verbo.be:3478
stun.piratenbrandenburg.de:3478
stun.onthenet.com.au:3478
stun.easyvoip.com:3478
stun.telnyx.com:3478
stun.eol.co.nz:3478
stun.thinkrosystem.com:3478
stun.kreis-bergstrasse.de:3478
stun.ivao.aero:3478
stun.files.fm:3478
relay.webwormhole.io:3478
stun.easycall.pl:3478
stun.voipwise.com:3478
stun.engineeredarts.co.uk:3478
stun.moonlight-stream.org:3478
stun.voipgrid.nl:3478
stun.threema.ch:3478
stun.yeymo.com:3478
stun.technosens.fr:3478
stun.twt.it:3478
stun.babelforce.com:3478
stun.sipnet.com:3478
stun.deepfinesse.com:3478
stun.shadrinsk.net:3478
stun.ortopediacoam.it:3478
stun.ru-brides.com:3478
stun.root-1.de:3478
stun.linuxtrent.it:3478
stun.1cbit.ru:3478
stun.avigora.fr:3478
stun.olimontel.it:3478
stun.sparvoip.de:3478
stun.voipcheap.co.uk:3478
stun.oncloud7.ch:3478
stun.imp.ch:3478
stun.vomessen.de:3478
stun.nexxtmobile.de:3478
stun.altar.com.pl:3478
stun.planetarium.com.br:3478
stun.infra.net:3478
stun.nexphone.ch:3478
stun.etoilediese.fr:3478
stun.3wayint.com:3478
stun.tichiamo.it:3478
stun.taxsee.com:3478
stun.voipvoice.it:3478
stun.crimeastar.net:3478
stun.voipxs.nl:3478
stun.voipstunt.com:3478
stun.ixc.ua:3478
stun.megatel.si:3478
stun.selasky.org:3478
stun.halonet.pl:3478
stun.zadarma.com:3478
stun.bridesbay.com:3478
stun.webcalldirect.com:3478
stun.tng.de:3478
stun.tula.nu:3478
stun.smslisto.com:3478
stun.var6.cn:3478
stun.stochastix.de:3478
stun.futurasp.es:3478
stun.nanocosmos.de:3478
stun.sippeer.dk:3478
stun.uls.co.za:3478
stun.rynga.com:3478
stun.swrag.de:3478
stun.1-voip.com:3478
stun.odr.de:3478
stun.l.google.com:19305
stun.jay.net:3478
stun.voipbuster.com:3478
stun.splicecom.com:3478
stun.geesthacht.de:3478
stun.ladridiricette.it:3478
stun.eleusi.com:3478
stun.vo.lu:3478
stun.goldfish.ie:3478
stun.voipgate.com:3478
stun.trainingspace.online:3478
stun.kanojo.de:3478
stun.rockenstein.de:3478
stun.qcol.net:3478
stun.myspeciality.com:3478
stun.mixvoip.com:3478
stun.irishvoip.com:3478
stun.internetcalls.com:3478
stun.optdyn.com:3478
stun.genymotion.com:3478
stun.voipbusterpro.com:3478
stun.fairytel.at:3478
stun.smartvoip.com:3478
stun.hide.me:3478
stun.syncthing.net:3478
stun.uiltucssicilia.it:3478
stun.imafex.sk:3478
stun.sewan.fr:3478
stun.ctafauni.it:3478
stun.sipglobalphone.com:3478
stun.hicare.net:3478
stun.voipraider.com:3478
stun.freevoipdeal.com:3478
stun.jowisoftware.de:3478
stun.voipgain.com:3478
stun.effexx.com:3478
stun.edwin-wiegele.at:3478
stun.marcelproust.it:3478
stun.freecall.com:3478
stun.ippi.com:3478
stun.autosystem.com:3478
stun.elitetele.com:3478
stun.synergiejobs.be:3478
stun.easter-eggs.com:3478
stun.globalmeet.com:3478
stun.bcs2005.net:3478
stun.eoni.com:3478
stun.wcoil.com:3478
stun.cablenet-as.net:3478
stun.issabel.org:3478
stun.miwifi.com:3478
stun.soho66.co.uk:3478
stun.bergophor.de:3478
stun.nfon.net:3478
stun.beebeetle.com:3478
stun.voipplanet.nl:3478
stun.dreifaltigkeit-stralsund.de:3478
stun.voippro.com:3478
stun.arkh-edu.ru:3478
stun.obovsem.com:3478
stun.voipgrid.nl:3478
stun.romaaeterna.nl:3478
stun.imafex.sk:3478
stun.radiojar.com:3478
stun.voipdiscount.com:3478
stun.sipnet.com:3478
stun.plexicomm.net:3478
stun.meetwife.com:3478
stun.megatel.si:3478
stun.smslisto.com:3478
stun.kaznpu.kz:3478
stun.baltmannsweiler.de:3478
stun.wtfismyip.com:3478
stun.sewan.fr:3478
stun.myspeciality.com:3478
stun.landvast.nl:3478
stun4.l.google.com:19305
stun.crimeastar.net:3478
stun.nottingham.ac.uk:3478
stun.solomo.de:3478
stun.imp.ch:3478
stun.dls.net:3478
stun.myvoiptraffic.com:3478
stun.peeters.com:3478
stun.it1.hr:3478
stun.waterpolopalermo.it:3478
stun.bergophor.de:3478
stun.lineaencasa.com:3478
stun.siedle.com:3478
stun.voipbuster.com:3478
stun.kreis-bergstrasse.de:3478
stun.talkho.com:3478
stun.signalwire.com:3478
stun.solcon.nl:3478
stun.freeswitch.org:3478
stun.lowratevoip.com:3478
stun.h4v.eu:3478
stun.antisip.com:3478
stun.bitburger.de:3478
stun.spoiltheprincess.com:3478
stun.odr.de:3478
stun.siptrunk.com:3478
stun.fmo.de:3478
stun.voicetech.se:3478
stun.bridesbay.com:3478
stun.rynga.com:3478
stun.ttmath.org:3478
stun.technosens.fr:3478
stun.labs.net:3478
stun.studio71.it:3478
stun.voipinfocenter.com:3478
stun.demos.su:3478
stun.fbsbx.com:3478
stun.cdosea.org:3478
stun.sippeer.dk:3478
stun.hosteurope.de:3478
stun.sketch.io:3478
stun.1cbit.ru:3478
stun.dowlatow.ru:3478
stun.thinkrosystem.com:3478
stun.internetcalls.com:3478
stun.actionvoip.com:3478
stun.voipvoice.it:3478
stun.voicetrading.com:3478
stun.hide.me:3478
stun.provectio.fr:3478
stun.sipgate.net:10000
stun.levigo.de:3478
stun.tichiamo.it:3478
stun.rolmail.net:3478
stun.gravitel.ru:3478
stun.bearstech.com:3478
stun.telbo.com:3478
stun.files.fm:3478
stun.m-online.net:3478
stun.sonetel.net:3478
stun.mixvoip.com:3478
stun.sipglobalphone.com:3478
stun.graftlab.com:3478
stun.planetarium.com.br:3478
stun.vomessen.de:3478
stun.synergiejobs.be:3478
stun.eaclipt.org:3478
stun.netgsm.com.tr:3478
stun.teamfon.de:3478
stun.olimontel.it:3478
stun.f.haeder.net:3478
stun.redworks.nl:3478
stun.webcalldirect.com:3478
stun.vozelia.com:3478
stun.symonics.com:3478
stun.voipgain.com:3478
stun.leucotron.com.br:3478
stun.shadrinsk.net:3478
stun.wemag.com:3478
stun.lerros.com:3478
stun.sovtest.ru:3478
stun.srce.hr:3478
stun.splicecom.com:3478
stun.moonlight-stream.org:3478
stun.dcalling.de:3478
stun.tele2.net:3478
stun.etoilediese.fr:3478
stun.mywatson.it:3478
stun.babelforce.com:3478
stun.zottel.net:3478
stun.sipdiscount.com:3478
stun.demos.ru:3478
stun.junet.se:3478
stun.voztele.com:3478
stun.heeds.eu:3478
stun.komsa.de:3478
stun.ukh.de:3478
stun.wxnz.net:3478
stun.marble.io:3478
stun.altar.com.pl:3478
stun.carlovizzini.it:3478
stun.zentauron.de:3478
stun.oncloud7.ch:3478
stun.acquageraci.it:3478
stun.lovense.com:3478
stun.alphacron.de:3478
stun.fathomvoice.com:3478
stun.deepfinesse.com:3478
stun.cheapvoip.com:3478
stun.cope.es:3478
stun.trivenet.it:3478
stun.jabbim.cz:3478
stun.stochastix.de:3478
stun.tng.de:3478
stun.ivao.aero:3478
stun4.l.google.com:19302
stun.intervoip.com:3478
stun.dunyatelekom.com:3478
stun.foad.me.uk:3478
stun.chaosmos.de:3478
stun.fondazioneroccochinnici.it:3478
stun.fairytel.at:3478
stun.soho66.co.uk:3478
stun.hot-chilli.net:3478
stun.marcelproust.it:3478
stun.yeymo.com:3478
stun.ippi.com:3478
stun.skydrone.aero:3478
stun.qcol.net:3478
stun.coffee-sen.com:3478
stun.fitauto.ru:3478
stun.gigaset.net:3478
stun.godatenow.com:3478
stun.myvoipapp.com:3478
stun.l.google.com:19302
stun.ladridiricette.it:3478
stun.linuxtrent.it:3478
stun.anlx.net:3478
stun.futurasp.es:3478
stun.isp.net.au:3478
stun.smsdiscount.com:3478
stun.cibercloud.com.br:3478
stun.ctafauni.it:3478
stun.nonoh.net:3478
stun.ringostat.com:3478
numb.viagenie.ca:3478
stun.expandable.io:3478
stun.swrag.de:3478
stun.kaseya.com:3478
stun.taxsee.com:3478
stun.framasoft.org:3478
stun.axeos.nl:3478
stun.studio-link.de:3478
stun.nexphone.ch:3478
stun.nstelcom.com:3478
stun.edwin-wiegele.at:3478
stun.voip.blackberry.com:3478
stun.uiltucssicilia.it:3478
stun.autosystem.com:3478
stun.muoversi.net:3478
stun.acrobits.cz:3478
stun.sonetel.com:3478
stun.nautile.nc:3478
stun.genymotion.com:3478
stun.telonline.com:3478
stun.jowisoftware.de:3478
stun.bau-ha.us:3478
stun.easter-eggs.com:3478
stun.wia.cz:3478
stun.logic.ky:3478
stun.alpirsbacher.de:3478
stun.yesdates.com:3478
stun.nexxtmobile.de:3478
stun.sipy.cz:3478
stun.peethultra.be:3478
stun.ipfire.org:3478
stun.ringvoz.com:3478
stun.verbo.be:3478
stun.mit.de:3478
stun.hicare.net:3478
stun.galeriemagnet.at:3478
stun.kotter.net:3478
stun.shy.cz:3478
stun.rockenstein.de:3478
stun.jumblo.com:3478
stun.siptraffic.com:3478
stun.bandyer.com:3478
stun.webmatrix.com.br:3478
stun.myhowto.org:3478
stun.epygi.com:3478
stun.draci.info:3478
stun.goldfish.ie:3478
stun.openjobs.hu:3478
stun.annatel.net:3478
stun.mobile-italia.com:3478
stun.ixc.ua:3478
stun.ippi.fr:3478
stun.londonweb.net:3478
stun.schulinformatik.at:3478
stun.powervoip.com:3478
stun.linphone.org:3478
stun.newrocktech.com:3478
stun.katholischekirche-ruegen.de:3478
stun.frozenmountain.com:3478
stun.schlund.de:3478
stun.irishvoip.com:3478
stun.voipia.net:3478
stun.eol.co.nz:3478
stun.syncthing.net:3478
stun.bcs2005.net:3478
stun.uls.co.za:3478
stun.elitetele.com:3478
stun.kore.com:3478
stun.kitamaebune.com:3478
stun.senstar.com:3478
stun.vadacom.co.nz:3478
stun.solnet.ch:3478
stun.voipcheap.co.uk:3478
stun.business-isp.nl:3478
stun.sky.od.ua:3478
stun.intervoip.com:3478
stun.leonde.org:3478
stun.istitutogramscisiciliano.it:3478
stun.savemgo.com:3478
stun.thebrassgroup.it:3478
stun.sipthor.net:3478
stun.jay.net:3478
stun.voipconnect.com:3478
stun.romancecompass.com:3478
stun.vavadating.com:3478
stun1.l.google.com:19305
stun.westtel.ky:3478
stun.nextcloud.com:443
stun.goldener-internetpreis.de:3478
stun.threema.ch:3478
stun.sipnet.ru:3478
stun.connecteddata.com:3478
stun.freecall.com:3478
stun.lundimatin.fr:3478
stun.localphone.com:3478
stun.levigo.de:3478
stun.wtfismyip.com:3478
stun.vivox.com:3478
stun.nottingham.ac.uk:3478
stun.f.haeder.net:3478
stun.myhowto.org:3478
stun.axialys.net:3478
stun.waterpolopalermo.it:3478
stun.rackco.com:3478
stun.grazertrinkwasseringefahr.at:3478
stun.sonetel.com:3478
stun.officinabit.com:3478
stun.t-online.de:3478
stun.jumblo.com:3478
stun.leucotron.com.br:3478
stun.1und1.de:3478
stun.annatel.net:3478
stun.studio-link.de:3478
stun.ippi.fr:3478
stun.kitamaebune.com:3478
stun3.l.google.com:19302
stun.hoiio.com:3478
stun.root-1.de:3478
stun.allflac.com:3478
stun.fathomvoice.com:3478
stun.mit.de:3478
stun.schulinformatik.at:3478
stun.westtel.ky:3478
stun.acrobits.cz:3478
stun.neomedia.it:3478
stun.training-online.eu:3478
stun.bitburger.de:3478
stun.ipfire.org:3478
stun.siptrunk.com:3478
stun.12voip.com:3478
stun.hot-chilli.net:3478
stun.yesdates.com:3478
stun.smsdiscount.com:3478
stun.totalcom.info:3478
stun.romancecompass.com:3478
stun.powervoip.com:3478

View File

@@ -1,305 +1,562 @@
208.83.61.2:3478
5.178.34.84:3478
70.42.198.34:3478
203.13.68.16:3478
80.155.54.123:3478
157.22.130.80:3478
18.188.120.144:3478
192.76.120.66:3478
88.218.220.40:3478
217.10.68.152:3478
202.49.164.49:3478
81.162.64.162:3478
176.119.42.11:3478
92.222.127.114:3478
74.125.204.127:19305
51.68.45.75:3478
78.111.72.53:3478
202.49.164.50:3478
77.243.0.75:3478
129.146.30.27:3478
108.177.14.127:19302
5.161.52.174:3478
195.201.86.186:3478
185.45.152.22:3478
212.227.67.33:3478
131.153.146.5:3478
212.144.246.197:3478
212.29.18.56:3478
176.9.24.184:3478
89.106.220.34:3478
91.121.209.194:3478
54.36.67.77:3478
83.96.215.63:3478
104.131.174.103:3478
77.72.169.210:3478
85.197.87.182:3478
77.72.169.211:3478
212.45.38.40:3478
91.121.128.132:3478
193.22.2.248:3478
216.144.89.2:3478
77.237.51.83:3478
199.4.110.11:3478
91.213.98.54:3478
83.125.8.47:3478
180.235.108.91:3478
37.59.92.57:3478
18.196.233.238:3478
188.138.90.169:3478
188.64.120.28:3478
44.224.155.217:3478
104.130.210.14:3478
78.40.125.40:3478
79.174.66.51:3478
182.154.16.7:3478
178.239.90.248:3478
195.145.93.141:3478
212.101.4.120:3478
34.197.205.39:3478
217.19.174.42:3478
35.176.190.183:3478
31.184.236.23:3478
178.63.240.148:3478
84.198.248.217:3478
217.0.136.1:3478
94.130.130.49:3478
94.75.247.45:3478
195.242.206.1:3478
108.171.179.113:3478
52.24.174.49:3478
74.125.24.127:19305
212.227.67.34:3478
139.59.84.212:3478
194.169.214.30:3478
198.100.144.121:3478
81.82.206.117:3478
217.0.136.17:3478
37.157.193.46:3478
212.103.68.7:3478
81.19.224.87:3478
185.88.7.40:3478
208.83.246.100:3478
217.0.11.225:3478
95.216.145.84:3478
85.93.219.114:3478
23.21.199.62:3478
92.63.111.151:3478
52.52.70.85:3478
37.97.65.52:3478
5.161.57.75:3478
51.83.15.212:3478
136.243.202.77:3478
52.71.78.21:3478
69.89.160.30:3478
207.38.89.164:3478
46.193.255.81:3478
37.139.120.14:3478
18.130.166.236:3478
188.123.97.201:3478
142.250.21.127:19302
162.13.119.185:3478
203.20.110.2:3478
54.183.232.212:3478
89.185.235.201:3478
216.190.232.121:3478
194.87.0.22:3478
82.113.193.63:3478
212.211.179.42:3478
87.129.12.229:3478
41.79.23.6:3478
198.72.119.88:3478
45.15.102.31:3478
94.140.180.141:3478
212.80.226.18:3478
74.117.176.114:3478
154.48.203.211:3478
54.197.117.0:3478
162.243.29.166:3478
198.61.197.182:3478
77.72.169.213:3478
130.236.12.148:3478
195.35.115.37:3478
80.156.209.102:3478
217.91.243.229:3478
216.228.192.76:3478
194.61.59.25:3478
185.18.24.50:3478
62.96.96.137:3478
150.254.161.60:3478
159.69.191.124:443
109.69.177.38:3478
213.251.48.147:3478
159.69.191.124:3478
91.151.52.200:3478
95.110.198.3:3478
212.53.40.40:3478
192.99.194.90:3478
115.126.160.126:3478
185.140.24.140:3478
18.195.48.253:3478
81.83.12.46:3478
79.140.42.88:3478
31.13.72.3:3478
154.48.203.210:3478
193.16.148.245:3478
173.255.200.200:3478
54.173.127.160:3478
52.26.251.34:3478
217.0.11.241:3478
217.0.12.1:3478
18.191.223.12:3478
172.217.213.127:19305
141.54.160.48:3478
185.67.224.58:3478
81.25.228.2:3478
212.25.7.87:3478
173.255.213.166:3478
63.211.239.133:3478
157.90.156.59:3478
217.74.179.29:3478
69.20.59.115:3478
80.250.1.173:3478
84.39.99.22:3478
108.177.14.127:19305
66.228.54.23:3478
137.74.112.113:3478
23.253.102.137:3478
82.97.157.254:3478
217.146.224.39:3478
217.10.68.152:10000
109.68.96.189:3478
217.10.68.145:10000
94.23.17.185:3478
111.206.174.2:3478
217.19.216.178:3478
65.17.128.101:3478
49.12.125.53:3478
158.69.221.198:3478
62.157.116.5:3478
66.110.73.74:3478
74.125.24.127:19302
88.86.102.51:3478
88.99.67.241:3478
204.197.144.2:3478
109.235.234.65:3478
121.101.91.194:3478
193.43.148.37:3478
142.250.21.127:19305
157.245.15.73:3478
91.199.161.149:3478
111.206.174.3:3478
34.193.110.91:3478
154.73.34.8:3478
95.163.107.194:3478
217.0.12.17:3478
213.140.209.236:3478
52.47.70.236:3478
34.206.168.53:3478
91.121.31.8:3478
213.239.206.5:3478
185.125.180.70:3478
88.198.151.128:3478
195.35.114.37:3478
195.208.107.138:3478
185.61.119.19:3478
87.253.140.133:3478
185.39.86.17:3478
13.59.93.103:3478
66.51.128.11:3478
90.145.158.66:3478
104.130.214.5:3478
77.246.121.149:3478
212.69.48.253:3478
34.73.197.25:3478
217.119.210.45:3478
37.9.136.90:3478
65.99.199.231:3478
194.61.59.30:3478
217.19.174.41:3478
178.33.166.29:3478
130.244.125.91:3478
54.177.85.190:3478
44.230.252.214:3478
85.17.88.164:3478
134.119.17.210:3478
85.17.186.7:3478
104.238.184.174:3478
161.53.1.100:3478
185.158.144.41:3478
91.205.60.185:3478
195.254.254.20:3478
193.28.184.4:3478
128.243.40.39:3478
176.9.179.80:3478
147.182.188.245:3478
198.211.120.59:3478
5.9.87.18:3478
91.122.224.102:3478
95.56.227.227:3478
134.2.17.14:3478
209.242.17.106:3478
212.103.200.6:3478
193.22.17.97:3478
185.112.247.26:3478
138.201.70.161:3478
143.198.60.79:3478
91.217.201.14:3478
23.252.81.20:3478
95.216.78.222:3478
81.173.115.217:3478
217.10.68.145:3478
3.208.102.142:3478
194.149.74.157:3478
213.239.212.105:3478
27.111.15.93:3478
212.18.0.14:3478
172.105.99.33:3478
178.77.74.88:3478
185.67.224.59:3478
178.63.107.149:3478
149.56.14.164:3478
185.88.236.76:3478
83.64.250.246:3478
35.180.81.93:3478
209.250.250.224:3478
185.41.24.10:3478
81.23.228.150:3478
176.62.31.10:3478
51.68.112.203:3478
34.74.124.204:3478
188.68.43.182:3478
217.92.89.8:3478
213.136.74.244:3478
52.76.91.67:3478
51.83.201.84:3478
74.125.204.127:19302
136.243.59.79:3478
193.22.119.20:3478
213.157.4.53:3478
81.3.27.44:3478
188.118.52.172:3478
217.160.165.10:3478
194.140.246.192:3478
83.211.9.232:3478
54.176.195.118:3478
192.172.233.145:3478
157.161.10.32:3478
78.111.79.151:3478
172.217.213.127:19302
158.69.57.20:3478
64.233.163.127:19302
104.238.184.174:3478
85.197.87.182:3478
77.72.169.210:3478
54.223.41.250:3478
195.201.132.113:3478
77.72.169.212:3478
34.73.197.25:3478
88.99.67.241:3478
178.33.166.29:3478
77.72.169.210:3478
129.153.212.128:3478
154.73.34.8:3478
77.72.169.210:3478
91.122.224.102:3478
91.205.60.185:3478
77.72.169.210:3478
139.59.84.212:3478
37.157.193.46:3478
77.72.169.210:3478
95.216.145.84:3478
37.59.92.57:3478
77.72.169.212:3478
77.246.29.197:3478
193.22.2.248:3478
51.83.201.84:3478
176.9.179.80:3478
77.72.169.210:3478
77.72.169.213:3478
217.119.210.45:3478
77.72.169.211:3478
5.161.52.174:3478
212.45.38.40:3478
217.10.68.145:3478
198.61.197.182:3478
212.211.179.42:3478
77.72.169.213:3478
88.198.203.20:3478
52.24.174.49:3478
77.72.169.213:3478
195.254.254.20:3478
84.198.248.217:3478
77.72.169.210:3478
35.180.81.93:3478
85.17.88.164:3478
217.10.68.152:3478
5.9.87.18:3478
5.161.52.174:3478
70.42.198.34:3478
45.32.217.190:3478
185.41.24.10:3478
212.227.67.33:3478
77.72.169.213:3478
185.18.24.50:3478
92.205.106.161:3478
5.9.87.18:3478
77.72.169.213:3478
77.72.169.211:3478
212.227.67.34:3478
202.49.164.49:3478
217.0.12.17:3478
213.157.4.53:3478
212.227.67.34:3478
83.125.8.47:3478
194.149.74.157:3478
52.47.70.236:3478
77.72.169.210:3478
95.110.198.3:3478
51.68.45.75:3478
182.154.16.7:3478
185.18.24.50:3478
77.72.169.210:3478
77.72.169.212:3478
77.72.169.211:3478
77.72.169.211:3478
77.72.169.211:3478
77.72.169.211:3478
63.211.239.133:3478
77.72.169.212:3478
77.72.169.210:3478
212.103.200.6:3478
54.183.232.212:3478
77.72.169.212:3478
77.72.169.212:3478
106.55.200.13:3478
88.198.151.128:3478
51.68.112.203:3478
77.72.169.213:3478
212.227.67.34:3478
157.161.10.32:3478
178.63.107.149:3478
83.211.9.232:3478
162.243.29.166:3478
77.72.169.211:3478
95.217.228.176:3478
176.62.31.10:3478
212.227.67.34:3478
77.72.169.210:3478
74.125.24.127:19302
204.197.159.2:3478
217.146.224.39:3478
185.39.86.17:3478
213.140.209.236:3478
37.139.120.14:3478
3.67.36.79:3478
94.75.247.45:3478
77.72.169.213:3478
77.72.169.210:3478
54.177.85.190:3478
77.72.169.211:3478
77.72.169.213:3478
217.91.243.229:3478
176.119.42.11:3478
81.187.30.115:3478
77.72.169.210:3478
77.72.169.210:3478
185.112.247.26:3478
143.198.60.79:3478
77.72.169.212:3478
217.10.68.145:3478
212.227.67.33:3478
217.10.68.145:10000
91.217.201.14:3478
77.72.169.211:3478
45.32.217.190:3478
193.22.17.97:3478
77.72.169.213:3478
106.55.200.17:3478
77.72.169.213:3478
52.24.174.49:3478
77.72.169.210:3478
82.97.157.254:3478
212.69.48.253:3478
159.69.191.124:443
88.198.203.20:3478
217.10.68.152:3478
185.39.86.17:3478
195.145.93.141:3478
77.72.169.210:3478
91.121.31.8:3478
217.19.174.42:3478
202.49.164.50:3478
185.18.24.50:3478
136.243.59.79:3478
91.121.128.132:3478
52.52.70.85:3478
91.199.161.149:3478
80.155.54.123:3478
54.173.127.164:3478
82.113.193.63:3478
77.72.169.211:3478
178.239.90.248:3478
41.79.23.6:3478
212.227.67.33:3478
77.72.169.211:3478
81.91.111.11:3478
77.72.169.211:3478
77.72.169.210:3478
77.72.169.212:3478
49.12.125.53:3478
77.72.169.210:3478
77.72.169.213:3478
31.13.72.3:3478
212.53.40.40:3478
44.230.252.214:3478
5.161.57.75:3478
136.243.59.79:3478
188.64.120.28:3478
149.56.14.164:3478
77.72.169.213:3478
83.64.250.246:3478
172.217.213.127:19305
88.86.102.51:3478
77.72.169.210:3478
212.103.68.7:3478
89.106.220.34:3478
54.197.117.0:3478
77.72.169.212:3478
185.18.24.50:3478
77.72.169.211:3478
198.211.120.59:3478
92.63.111.151:3478
217.0.11.241:3478
209.105.241.31:3478
79.174.66.51:3478
195.35.114.37:3478
77.72.169.212:3478
77.72.169.213:3478
77.72.169.212:3478
77.72.169.211:3478
77.72.169.211:3478
193.43.148.37:3478
34.206.168.53:3478
80.250.1.173:3478
212.18.0.14:3478
216.144.89.2:3478
83.64.250.246:3478
77.72.169.211:3478
51.83.15.212:3478
77.72.169.210:3478
216.144.89.2:3478
209.250.250.224:3478
195.242.206.1:3478
185.158.144.41:3478
77.72.169.213:3478
209.242.17.106:3478
185.18.24.50:3478
79.140.42.88:3478
66.110.73.74:3478
18.197.20.73:3478
77.72.169.210:3478
194.169.214.30:3478
64.233.163.127:19305
77.72.169.212:3478
77.72.169.213:3478
77.72.169.210:3478
185.18.24.50:3478
94.130.130.49:3478
83.211.9.232:3478
83.211.9.232:3478
77.72.169.212:3478
193.22.119.20:3478
106.55.202.25:3478
212.101.4.120:3478
77.72.169.210:3478
77.72.169.210:3478
77.72.169.213:3478
194.87.0.22:3478
77.72.169.210:3478
85.93.219.114:3478
77.72.169.211:3478
77.72.169.212:3478
77.72.169.212:3478
185.18.24.50:3478
77.72.169.213:3478
192.172.233.145:3478
77.72.169.213:3478
81.187.30.115:3478
83.125.8.47:3478
77.72.169.210:3478
18.191.223.12:3478
77.72.169.213:3478
109.68.96.189:3478
77.72.169.211:3478
5.161.57.75:3478
34.74.124.204:3478
77.72.169.213:3478
77.72.169.210:3478
213.251.48.147:3478
91.213.98.54:3478
157.22.130.80:3478
31.184.236.23:3478
106.55.202.232:3478
194.140.246.192:3478
106.55.202.114:3478
188.118.52.172:3478
212.227.67.34:3478
185.41.24.6:3478
5.161.52.174:3478
77.72.169.210:3478
177.66.4.31:3478
143.198.60.79:3478
157.161.10.32:3478
109.69.177.38:3478
52.26.251.34:3478
77.72.169.210:3478
161.53.1.100:3478
78.40.125.40:3478
77.72.169.211:3478
77.72.169.210:3478
185.18.24.50:3478
77.72.169.213:3478
77.72.169.210:3478
81.19.224.87:3478
207.38.89.164:3478
185.18.24.50:3478
173.255.200.200:3478
82.113.193.63:3478
87.253.140.133:3478
77.72.169.212:3478
37.97.65.52:3478
77.72.169.212:3478
77.72.169.213:3478
212.227.67.34:3478
77.72.169.212:3478
5.161.57.75:3478
80.250.1.173:3478
77.72.169.213:3478
77.72.169.213:3478
213.239.212.105:3478
52.26.251.34:3478
195.209.116.72:3478
77.72.169.212:3478
3.66.167.46:3478
178.63.240.148:3478
74.117.176.114:3478
77.72.169.211:3478
217.10.68.152:3478
78.111.72.53:3478
77.72.169.213:3478
77.72.169.212:3478
77.72.169.211:3478
77.72.169.211:3478
83.211.9.232:3478
13.59.93.103:3478
128.243.40.39:3478
134.2.17.14:3478
208.83.246.100:3478
91.151.52.200:3478
192.210.11.250:3478
77.72.169.212:3478
77.72.169.212:3478
194.169.214.30:3478
81.25.228.2:3478
77.72.169.213:3478
204.197.144.2:3478
5.161.52.174:3478
108.171.179.113:3478
77.72.169.213:3478
94.130.130.49:3478
101.200.40.149:3478
104.130.214.5:3478
121.101.91.194:3478
27.111.15.93:3478
77.72.169.210:3478
217.10.68.152:10000
77.72.169.212:3478
195.208.107.138:3478
185.18.24.50:3478
212.227.67.33:3478
77.72.169.212:3478
62.138.0.157:3478
177.66.4.31:3478
188.138.90.169:3478
104.130.210.14:3478
185.18.24.50:3478
46.193.255.81:3478
77.72.169.212:3478
81.162.64.162:3478
77.72.169.213:3478
185.18.24.50:3478
208.83.61.2:3478
217.0.12.1:3478
69.89.160.30:3478
194.61.59.25:3478
77.72.169.213:3478
212.227.67.34:3478
88.218.220.40:3478
77.72.169.210:3478
157.245.15.73:3478
194.61.59.30:3478
188.68.43.182:3478
146.185.186.157:3478
54.223.41.250:3478
195.211.238.18:3478
45.32.217.190:3478
88.198.203.20:3478
81.91.111.11:3478
77.72.169.210:3478
77.72.169.212:3478
5.161.57.75:3478
188.68.43.182:3478
106.55.201.252:3478
83.211.9.232:3478
82.113.193.63:3478
85.17.186.7:3478
195.35.115.37:3478
150.254.161.60:3478
198.100.144.121:3478
136.243.202.77:3478
185.45.152.22:3478
83.64.250.246:3478
147.182.188.245:3478
45.15.102.31:3478
85.93.219.114:3478
182.154.16.5:3478
195.209.116.72:3478
185.41.24.6:3478
34.193.110.91:3478
217.19.216.178:3478
185.18.24.50:3478
158.69.57.20:3478
111.206.174.3:3478
44.224.155.217:3478
147.182.188.245:3478
172.217.213.127:19302
77.72.169.213:3478
81.3.27.44:3478
77.72.169.213:3478
212.53.40.40:3478
77.72.169.212:3478
77.72.169.210:3478
77.72.169.212:3478
159.69.191.124:3478
217.10.68.152:3478
65.17.128.101:3478
66.51.128.11:3478
185.125.180.70:3478
176.9.24.184:3478
77.72.169.212:3478
77.72.169.211:3478
77.72.169.212:3478
212.53.40.40:3478
217.10.68.145:3478
51.255.123.123:3478
23.253.102.137:3478
212.53.40.40:3478
77.243.0.75:3478
216.228.192.76:3478
217.19.174.41:3478
217.0.11.225:3478
185.67.224.59:3478
172.105.99.33:3478
77.72.169.212:3478
192.99.194.90:3478
77.72.169.212:3478
173.255.213.166:3478
134.119.17.210:3478
111.206.174.2:3478
212.227.67.33:3478
188.123.97.201:3478
77.72.169.213:3478
81.82.206.117:3478
77.72.169.213:3478
162.13.119.185:3478
217.10.68.145:3478
217.10.68.152:3478
77.72.169.211:3478
185.88.7.40:3478
77.72.169.211:3478
77.72.169.211:3478
185.125.180.70:3478
106.55.200.57:3478
77.72.169.213:3478
106.55.202.194:3478
185.67.224.58:3478
212.53.40.40:3478
212.29.18.56:3478
94.140.180.141:3478
77.72.169.211:3478
84.39.99.22:3478
23.252.81.20:3478
121.101.91.194:3478
185.18.24.50:3478
77.72.169.212:3478
74.125.204.127:19302
70.42.198.30:3478
204.197.159.2:3478
194.140.246.192:3478
77.72.169.213:3478
81.23.228.150:3478
87.129.12.229:3478
18.191.223.12:3478
212.80.226.18:3478
77.72.169.210:3478
77.72.169.211:3478
185.39.86.17:3478
185.18.24.50:3478
185.39.86.17:3478
77.72.169.211:3478
77.72.169.213:3478
106.55.201.94:3478
77.72.169.212:3478
193.16.148.245:3478
217.10.68.152:3478
77.72.169.212:3478
115.126.160.126:3478
217.10.68.145:3478
195.35.115.37:3478
77.72.169.213:3478
77.72.169.213:3478
3.208.102.142:3478
65.99.199.231:3478
142.250.21.127:19302
109.235.234.65:3478
78.111.79.151:3478
77.72.169.211:3478
74.125.204.127:19305
77.72.169.211:3478
77.72.169.213:3478
77.72.169.211:3478
77.72.169.212:3478
142.250.21.127:19305
146.185.186.157:3478
83.64.250.246:3478
77.72.169.212:3478
193.28.184.4:3478
62.96.96.137:3478
77.72.169.211:3478
81.173.115.217:3478
185.61.119.19:3478
91.205.60.185:3478
77.72.169.212:3478
74.125.24.127:19305
95.216.78.222:3478
83.211.9.232:3478
34.73.197.25:3478
212.227.67.33:3478
77.72.169.210:3478
52.71.78.21:3478
34.192.137.246:3478
217.74.179.29:3478
77.72.169.210:3478
77.72.169.211:3478
111.230.157.11:3478
5.178.34.84:3478
77.72.169.211:3478
212.227.67.33:3478
77.72.169.211:3478
131.153.146.5:3478
185.140.24.140:3478
185.18.24.50:3478
77.72.169.212:3478
77.72.169.211:3478
195.211.238.18:3478
37.9.136.90:3478
217.10.68.145:3478
77.72.169.212:3478
77.72.169.210:3478
194.87.0.22:3478
77.72.169.211:3478
77.72.169.213:3478
77.72.169.213:3478
77.72.169.211:3478
217.10.68.152:3478
77.72.169.213:3478
83.96.215.63:3478
195.35.114.37:3478
77.72.169.213:3478
203.13.68.16:3478
77.72.169.210:3478
81.83.12.46:3478
185.18.24.50:3478
90.145.158.66:3478
77.72.169.212:3478
52.76.91.67:3478
77.72.169.211:3478
77.72.169.213:3478
198.72.119.88:3478
42.121.15.99:3478
83.64.250.246:3478
77.72.169.211:3478
106.55.200.177:3478
212.227.67.34:3478
37.59.92.57:3478
77.72.169.210:3478
180.235.108.91:3478
77.72.169.212:3478
192.76.120.66:3478
77.72.169.212:3478
18.195.48.250:3478
137.74.112.113:3478
77.72.169.212:3478
77.72.169.211:3478
212.25.7.87:3478
77.72.169.210:3478
213.136.74.244:3478
185.112.247.26:3478
69.20.59.115:3478
77.72.169.210:3478
213.239.206.5:3478
77.246.121.149:3478
94.23.17.185:3478
203.20.110.2:3478
77.72.169.211:3478
23.21.199.62:3478
77.72.169.211:3478
77.72.169.210:3478
185.88.236.76:3478
77.237.51.83:3478

View File

@@ -1,32 +1,32 @@
[2404:6800:400a:1002::7f]:19305
[2404:6800:400a:1002::7f]:19302
[2a01:4f8:120:1497::148]:3478
[2a01:4f8:1c0c:6374::1]:3478
[2001:41d0:2:12b9::1]:3478
[2a00:1450:4010:c0f::7f]:19305
[2600:1f16:8c5:101::108]:3478
[2a00:1450:4010:c0f::7f]:19302
[2a01:430:27::201]:3478
[2607:5300:201:3100::6a8f]:3478
[2001:6b0:17:f010::3d]:3478
[2a01:4f8:c17:8f74::1]:443
[2404:6800:4003:c03::7f]:19302
[2a01:4f8:c17:8f74::1]:3478
[2001:8d8:961:6400::6:2d58]:3478
[2a01:4f8:242:56ca::2]:3478
[2001:4060:1:1005::10:32]:3478
[2404:6800:400b:c005::7f]:19305
[2a02:c207:3000:7523::1]:3478
[2a02:2b88:2:1::6494:1]:3478
[2404:6800:4003:c03::7f]:19305
[2404:6800:4008:c04::7f]:19302
[2a01:4f8:13b:4285::2]:3478
[2a03:2880:f00a:0:face:b00c:0:24d9]:3478
[2a02:f98:0:50:2ff:23ff:fe42:1b23]:3478
[2404:6800:400b:c005::7f]:19302
[2001:678:b28::118]:3478
[2a01:4f8:13b:39ce::2]:3478
[2a00:1450:4010:c06::7f]:19305
[2a03:b0c0:0:1010::a2:a001]:3478
[2404:6800:4008:c04::7f]:19305
[2a02:2b88:2:1::6494:1]:3478
[2a02:c207:3000:7523::1]:3478
[2a00:1450:4010:c06::7f]:19302
[2001:4060:1:1005::10:32]:3478
[2001:41d0:2:12b9::1]:3478
[2a01:4f8:c17:8f74::1]:3478
[2404:6800:4003:c03::7f]:19302
[2a03:b0c0:0:1010::a2:a001]:3478
[2a03:2880:f00a:0:face:b00c:0:24d9]:3478
[2a01:4f8:1c0c:6374::1]:3478
[2a01:4f8:1c0c:6374::1]:3478
[2a01:4f9:4b:4c8f::2]:3478
[2404:6800:400b:c005::7f]:19302
[2604:a880:800:c1::22f:5001]:3478
[2a01:488:66:1000:b24d:4a58:0:1]:3478
[2a01:4f8:13b:39ce::2]:3478
[2404:6800:4008:c04::7f]:19305
[2600:1f16:8c5:101::108]:3478
[2404:6800:4008:c04::7f]:19302
[2404:6800:400b:c005::7f]:19305
[2404:6800:400a:1002::7f]:19302
[2600:1f16:8c5:101::108]:3478
[2a01:4f8:c17:8f74::1]:443
[2001:4060:1:1005::10:32]:3478
[2a01:4f8:242:56ca::2]:3478
[2a02:f98:0:50:2ff:23ff:fe42:1b23]:3478
[2a01:4f8:120:1497::148]:3478
[2a01:4f8:13b:39ce::2]:3478
[2404:6800:400a:1002::7f]:19305
[2404:6800:4003:c03::7f]:19305
[2001:678:b28::118]:3478