Merge branch 'master' into behind-nat-testing

This commit is contained in:
pradt2
2022-07-01 09:51:36 +01:00
10 changed files with 1169 additions and 980 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 }}

36
Cargo.lock generated
View File

@@ -15,6 +15,7 @@ dependencies = [
name = "always-online-stun"
version = "0.1.0"
dependencies = [
"async-trait",
"clap",
"futures",
"log",
@@ -33,6 +34,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"
@@ -611,11 +623,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]]
@@ -874,13 +886,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]]
@@ -1044,6 +1056,12 @@ version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992"
[[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"
@@ -1053,12 +1071,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 }
clap = { version = "3.2.5", default-features = false, features = ["color", "derive", "env", "std", "suggestions"] }
futures = { version = "0.3.17" }
log = { version = "0.4.16" }

View File

@@ -247,6 +247,10 @@
37.4224,
-122.08421
],
"173.194.77.127": [
37.4224,
-122.08421
],
"173.255.200.200": [
32.96074,
-96.73297
@@ -471,6 +475,10 @@
38.65514,
-121.06952
],
"192.210.11.250": [
25.76704,
-80.19486
],
"192.76.120.66": [
41.89534,
-87.63628
@@ -535,6 +543,10 @@
50.47914,
12.33547
],
"195.201.59.50": [
50.47914,
12.33547
],
"195.201.86.186": [
50.47914,
12.33547
@@ -879,6 +891,10 @@
33.50943,
-112.00933
],
"2607:f8b0:4023:401::7f": [
37.4224,
-122.08421
],
"27.111.15.93": [
51.51155,
-0.00292
@@ -911,6 +927,10 @@
49.12483,
10.78052
],
"2a01:4f8:13b:705::1234": [
49.12483,
10.78052
],
"2a01:4f8:1c0c:6374::1": [
49.12483,
10.78052

View File

@@ -5,6 +5,23 @@ use std::io::ErrorKind::Other;
use std::net::IpAddr;
use std::path::PathBuf;
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,
@@ -12,25 +29,79 @@ 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()
}
}
}
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
}
@@ -39,56 +110,51 @@ 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")
.cloned()
.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")
.cloned()
.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: PathBuf,
client: IpGeolocationIoClient,
pub(crate) struct CachedIpGeolocationIpClient<T: GeoIpClient + Default> {
cachefile_path: PathBuf,
client_impl: T,
map: BTreeMap<String, GeoIpData>,
}
impl CachedIpGeolocationIpClient {
pub(crate) async fn new(filename: PathBuf) -> io::Result<CachedIpGeolocationIpClient> {
let cache_str = tokio::fs::read_to_string(&filename).await?;
impl <T: GeoIpClient + Default> CachedIpGeolocationIpClient<T> {
pub(crate) async fn new(cachefile_path: PathBuf) -> io::Result<Self> {
let cache_str = tokio::fs::read_to_string(&cachefile_path).await?;
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(),
let client_impl = T::default();
Ok(Self {
cachefile_path,
client_impl,
map
};
Ok(client)
}
pub(crate) async fn default(filepath: PathBuf) -> io::Result<CachedIpGeolocationIpClient> {
CachedIpGeolocationIpClient::new(filepath).await
})
}
pub(crate) async fn get_hostname_geoip_info(&mut self, hostname: &str) -> io::Result<GeoIpData> {
@@ -102,15 +168,30 @@ impl CachedIpGeolocationIpClient {
pub(crate) async fn save(&self) -> io::Result<()> {
let str = serde_json::ser::to_string_pretty(&self.map)
.map_err(|err| io::Error::new(Other, err))?;
tokio::fs::write(&self.path, str).await
tokio::fs::write(&self.cachefile_path, 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

@@ -8,6 +8,7 @@ use futures::StreamExt;
use tokio::time::Instant;
use clap::Parser;
use crate::geoip::GeolocationDbClient;
use crate::utils::join_all_with_semaphore;
use crate::outputs::{ValidHosts, ValidIpV4s, ValidIpV6s};
use crate::servers::StunServer;
@@ -66,7 +67,7 @@ async fn main() -> io::Result<()> {
let cli: Cli = Cli::parse();
let client = Rc::new(RefCell::new(geoip::CachedIpGeolocationIpClient::default(cli.geoip_cache_file).await?));
let client = Rc::new(RefCell::new(geoip::CachedIpGeolocationIpClient::<GeolocationDbClient>::new(cli.candidates_file).await?));
let stun_servers = servers::get_stun_servers(cli.candidates_file).await?;

View File

@@ -1,5 +1,6 @@
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;
@@ -105,7 +106,9 @@ pub(crate) async fn test_udp_stun_server(
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 {
@@ -177,12 +180,18 @@ async fn test_socket_addr_against_trusted_party(
}
}).expect("Trusted party must provide IPv4 and v6 connectivity");
let mut client = stunclient::StunClient::new(trusted_party_addr);
let deadline = Duration::from_secs(5);
client.set_timeout(deadline);
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 = client.query_external_address_async(&local_socket).await
.expect("Trusted party must provide a valid mapping");
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
}

View File

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

File diff suppressed because it is too large Load Diff

View File

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