diff --git a/.github/workflows/run-hourly-check.yml b/.github/workflows/run-hourly-check.yml new file mode 100644 index 000000000..2dce60150 --- /dev/null +++ b/.github/workflows/run-hourly-check.yml @@ -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 }} diff --git a/Cargo.lock b/Cargo.lock index 8682d9286..e2a0685a4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -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" diff --git a/Cargo.toml b/Cargo.toml index f0503c656..43bb7cddb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -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" } diff --git a/geoip_cache.txt b/geoip_cache.txt index e3e8c43d5..904411aea 100644 --- a/geoip_cache.txt +++ b/geoip_cache.txt @@ -1 +1,1850 @@ -{"203.20.110.2":[-33.89315,151.2067],"212.103.200.6":[45.663,11.81225],"134.119.17.210":[50.94167,6.95516],"217.0.11.241":[49.86571,8.62604],"212.211.179.42":[48.19618,10.75733],"193.22.17.97":[49.97432,6.52315],"185.158.144.41":[50.84124,5.69663],"34.206.168.53":[37.54068,-77.43367],"212.227.67.33":[48.99233,8.40298],"66.51.128.11":[49.28108,-123.12511],"178.33.166.29":[40.4272,-3.71345],"185.112.247.26":[54.91486,-1.37282],"202.49.164.49":[-37.68163,176.16809],"188.64.120.28":[45.52743,10.14402],"2a02:c207:3000:7523::1":[48.10434,11.60098],"2a02:f98:0:50:2ff:23ff:fe42:1b23":[50.9762,7.02039],"188.118.52.172":[50.88213,4.45519],"82.97.157.254":[54.36856,10.10565],"180.235.108.91":[-33.8445,151.2011],"208.83.246.100":[37.39788,-122.02986],"54.36.67.77":[50.69224,3.20003],"182.154.16.5":[-36.84713,174.76862],"62.157.116.5":[53.08323,8.78804],"158.69.57.20":[40.73686,-74.17337],"176.9.179.80":[49.12483,10.78052],"147.182.188.245":[40.79301,-74.02038],"104.236.181.37":[37.73345,-122.38998],"63.211.239.133":[32.58997,-92.06862],"77.237.51.83":[48.1949,16.33906],"192.76.120.66":[41.89534,-87.63628],"87.129.12.229":[50.11093,11.45131],"2a01:4f8:242:56ca::2":[49.12483,10.78052],"90.145.158.66":[52.34691,5.18264],"54.183.232.212":[38.57944,-121.49085],"154.48.203.210":[50.0985,8.63257],"91.217.201.14":[56.04815,9.9454],"2a01:4f8:120:1497::148":[49.12483,10.78052],"2a01:430:27::201":[49.2014,16.596],"83.96.215.63":[51.91765,4.5152],"66.110.73.74":[38.95875,-77.42341],"51.68.45.75":[50.69224,3.20003],"81.91.111.11":[51.42056,-1.71553],"91.121.209.194":[50.69224,3.20003],"158.69.221.198":[45.50254,-73.5716],"52.47.70.236":[48.85717,2.3414],"51.83.15.212":[50.69224,3.20003],"62.138.0.157":[48.54997,7.75096],"65.17.128.101":[40.74183,-84.107],"41.79.23.6":[-26.05385,28.00775],"23.253.102.137":[29.50875,-98.3948],"195.35.115.37":[53.21312,6.58949],"188.138.90.169":[48.54997,7.75096],"2a01:4f9:4b:4c8f::2":[49.12483,10.78052],"34.73.197.25":[37.4224,-122.08421],"195.254.254.20":[46.47447,11.32362],"217.91.243.229":[49.86571,8.62604],"109.69.177.38":[55.65615,37.55269],"104.130.210.14":[29.50875,-98.3948],"137.74.112.113":[50.69224,3.20003],"129.146.30.27":[33.45189,-111.97417],"2001:4060:1:1005::10:32":[47.5207,7.69179],"69.20.59.115":[42.50002,-71.16273],"44.224.155.217":[44.93326,-123.04381],"77.243.0.75":[51.73633,36.19761],"77.72.169.213":[46.94843,7.44046],"111.230.157.11":[22.54409,114.08353],"95.56.227.227":[43.25066,76.88814],"172.217.213.127":[37.4224,-122.08421],"23.21.199.62":[37.54068,-77.43367],"106.55.200.13":[22.54409,114.08353],"157.161.10.32":[47.52729,7.69704],"2a01:4f8:c17:8f74::1":[49.12483,10.78052],"192.99.194.90":[45.50254,-73.5716],"85.93.219.114":[49.59508,6.22337],"212.144.246.197":[50.13132,8.56888],"37.97.65.52":[48.87498,2.3497],"95.217.228.176":[60.17116,24.93265],"85.197.87.182":[50.05751,9.06508],"194.149.74.157":[41.61579,0.60976],"23.252.81.20":[38.49766,-121.1016],"173.255.213.166":[37.55148,-121.9833],"18.185.220.138":[50.11208,8.68341],"139.59.84.212":[12.84541,77.66434],"27.111.15.93":[51.51155,-0.00292],"109.235.234.65":[50.11208,8.68341],"85.17.88.164":[52.37018,4.87324],"88.218.220.40":[31.75193,35.21604],"198.61.197.182":[29.51005,-98.39229],"212.18.0.14":[48.27954,11.5759],"217.19.174.42":[48.13289,11.6664],"2a01:4f8:1c0c:6374::1":[49.12483,10.78052],"54.197.117.0":[37.54068,-77.43367],"192.172.233.145":[38.65514,-121.06952],"199.4.110.11":[39.60521,-104.89231],"195.209.116.72":[55.42059,65.27454],"195.211.238.18":[56.08854,63.62107],"185.45.152.22":[50.11208,8.68341],"18.156.18.128":[50.11208,8.68341],"91.205.60.185":[58.15681,13.55365],"143.198.60.79":[37.39684,-121.95011],"46.193.255.81":[48.87325,2.30581],"91.199.161.149":[46.35915,15.11886],"80.155.54.123":[53.08323,8.78804],"209.242.17.106":[42.18939,-88.30917],"204.197.159.2":[39.62968,-79.95618],"111.206.174.2":[39.9073,116.36566],"188.68.43.182":[49.02907,8.35704],"213.140.209.236":[35.00705,33.29423],"178.239.90.248":[52.75156,-2.39347],"149.56.14.164":[45.50254,-73.5716],"109.68.96.189":[48.09677,11.51419],"18.188.120.144":[39.96199,-83.00275],"2404:6800:4008:c04::7f":[-27.47305,153.0142],"212.101.4.120":[47.20182,7.52878],"204.197.144.2":[39.62968,-79.95618],"202.49.164.50":[-37.68163,176.16809],"83.211.9.232":[45.49756,9.16767],"194.61.59.25":[51.9229,4.43321],"195.145.93.141":[53.08323,8.78804],"70.42.198.30":[42.31203,-71.38967],"146.185.186.157":[52.29572,4.94431],"42.121.15.99":[30.2084,120.21201],"194.61.59.30":[51.9229,4.43321],"2001:8d8:961:6400::6:2d58":[39.37148,22.93454],"52.71.78.21":[37.54068,-77.43367],"95.216.78.222":[60.17116,24.93265],"84.39.99.22":[50.62132,7.23524],"81.82.206.117":[51.035,4.48421],"176.119.42.11":[52.1842,20.99972],"188.123.97.201":[49.07587,19.61569],"185.39.86.17":[48.13748,11.40792],"70.42.198.34":[42.31203,-71.38967],"37.139.120.14":[40.48733,-3.66757],"106.55.202.194":[22.54409,114.08353],"130.236.12.148":[58.39733,15.57457],"104.130.214.5":[29.50875,-98.3948],"74.125.24.127":[37.4224,-122.08421],"80.156.209.102":[53.08323,8.78804],"91.121.128.132":[50.69224,3.20003],"2001:678:b28::118":[51.6313,7.32672],"213.239.212.105":[50.47914,12.33547],"88.198.151.128":[49.12483,10.78052],"77.72.169.212":[46.94843,7.44046],"213.157.4.53":[50.55216,8.50932],"212.69.48.253":[51.94543,-0.27793],"172.105.99.33":[43.64869,-79.38544],"95.110.198.3":[45.70662,9.59049],"203.13.68.16":[-28.081,153.4118],"91.121.31.8":[50.69224,3.20003],"18.191.223.12":[39.96199,-83.00275],"212.25.7.87":[47.377,8.53977],"162.13.119.185":[51.60999,-0.24436],"185.41.24.10":[53.68674,-2.67309],"81.162.64.162":[44.95754,34.10827],"217.10.68.152":[51.21211,6.75568],"216.228.192.76":[45.33005,-118.09544],"217.0.136.17":[49.86571,8.62604],"51.83.201.84":[51.09844,17.03112],"195.35.114.37":[53.21312,6.58949],"217.0.12.1":[49.86571,8.62604],"62.96.96.137":[50.25536,8.64637],"83.125.8.47":[50.1162,8.62984],"111.206.174.3":[39.9073,116.36566],"185.88.7.40":[39.92623,32.84384],"52.26.251.34":[44.93326,-123.04381],"92.63.111.151":[52.23107,104.27701],"89.185.235.201":[49.20143,16.59599],"52.24.174.49":[44.93326,-123.04381],"2001:41d0:2:12b9::1":[50.69224,3.20003],"81.83.12.46":[51.035,4.48421],"5.9.87.18":[50.47914,12.33547],"2600:1f16:8c5:101::108":[39.96199,-83.00275],"78.111.72.53":[50.97528,7.02442],"37.9.136.90":[48.83633,2.31966],"121.101.91.194":[35.69156,139.76755],"212.29.18.56":[48.13289,11.6664],"195.242.206.1":[48.13868,11.55143],"136.243.202.77":[49.12483,10.78052],"194.140.246.192":[52.29468,4.88213],"51.68.112.203":[50.69224,3.20003],"207.38.89.164":[38.62775,-90.19956],"217.19.216.178":[46.84819,29.59681],"217.146.224.39":[48.90395,2.25736],"185.18.24.50":[38.14851,13.34311],"2a00:1450:4010:c06::7f":[53.34007,-6.23632],"213.239.206.5":[50.47914,12.33547],"34.193.110.91":[37.54068,-77.43367],"87.253.140.133":[52.16316,4.47603],"216.190.232.121":[45.60022,-122.48528],"2a02:2b88:2:1::6494:1":[49.05367,14.43106],"44.230.252.214":[47.592,-122.31713],"213.136.74.244":[48.10425,11.60102],"217.119.210.45":[50.89439,12.78775],"2a03:2880:f00a:0:face:b00c:0:24d9":[53.27699,-6.21708],"198.72.119.88":[45.44274,-73.61704],"195.208.107.138":[54.9646,82.92696],"193.22.2.248":[50.90063,10.88214],"81.25.228.2":[46.48722,30.73985],"212.103.68.7":[46.96597,7.47537],"91.151.52.200":[48.81566,2.30464],"84.198.248.217":[51.035,4.48421],"208.83.61.2":[38.62929,-90.19704],"134.2.17.14":[48.53798,9.05687],"217.19.174.41":[48.13289,11.6664],"78.40.125.40":[48.87092,2.32063],"3.208.102.142":[37.54068,-77.43367],"2404:6800:400a:1002::7f":[-27.47305,153.0142],"54.177.85.190":[38.57944,-121.49085],"77.246.121.149":[54.7623,9.44572],"45.15.102.31":[50.94856,6.9448],"2a01:4f8:13b:39ce::2":[49.503,8.4693],"185.88.236.76":[47.37315,8.52836],"193.43.148.37":[50.29845,18.65523],"209.105.241.31":[40.0184,-105.25638],"77.246.29.197":[51.4617,-1.00581],"185.41.24.6":[53.68674,-2.67309],"212.45.38.40":[52.53935,5.70224],"142.250.21.127":[37.4224,-122.08421],"212.53.40.40":[55.6543,37.53899],"35.180.81.93":[48.85717,2.3414],"176.9.24.184":[50.47914,12.33547],"209.250.250.224":[52.3914,4.663],"2404:6800:4003:c03::7f":[-27.47305,153.0142],"154.73.34.8":[-25.76124,28.25398],"91.213.98.54":[52.13056,7.69334],"182.154.16.7":[-36.84713,174.76862],"159.69.191.124":[49.12483,10.78052],"37.157.193.46":[49.05452,14.43039],"69.89.160.30":[39.73475,-79.45212],"194.169.214.30":[48.87211,2.30881],"131.153.146.5":[34.24053,-84.42546],"31.184.236.23":[50.08404,14.45238],"2a03:b0c0:0:1010::a2:a001":[52.29572,4.94431],"173.255.200.200":[32.96074,-96.73297],"49.12.125.53":[49.12483,10.78052],"52.76.91.67":[1.29041,103.85211],"74.125.204.127":[37.4224,-122.08421],"193.22.119.20":[41.48835,2.12444],"178.239.90.252":[52.75156,-2.39347],"81.173.115.217":[48.99233,8.40298],"157.22.130.80":[37.41527,-122.07428],"52.52.70.85":[38.57944,-121.49085],"95.216.145.84":[60.17116,24.93265],"83.64.250.246":[48.18617,16.40324],"185.140.24.140":[52.20673,20.90848],"81.23.228.150":[51.993,5.67808],"5.178.34.84":[52.3767,5.2228],"65.99.199.231":[32.80822,-96.85725],"79.174.66.51":[55.77756,37.50318],"217.0.136.1":[49.86571,8.62604],"77.72.169.211":[46.94843,7.44046],"95.163.107.194":[55.81955,37.64382],"88.198.203.20":[50.47914,12.33547],"185.67.224.59":[52.37018,4.87324],"66.228.54.23":[32.96074,-96.73297],"2607:5300:201:3100::6a8f":[45.50254,-73.5716],"217.74.179.29":[48.12921,11.53486],"45.32.217.190":[33.77769,-84.42135],"198.211.120.59":[52.29572,4.94431],"185.125.180.70":[49.66782,6.12437],"106.55.200.17":[22.54409,114.08353],"79.140.42.88":[49.51504,11.02588],"154.48.203.211":[50.0985,8.63257],"77.72.169.210":[46.94843,7.44046],"54.223.41.250":[39.90657,116.38765],"88.86.102.51":[50.07262,14.45277],"178.77.74.88":[48.54997,7.75096],"52.29.83.217":[50.11208,8.68341],"194.87.0.22":[55.81584,37.52759],"34.74.124.204":[37.4224,-122.08421],"138.201.70.161":[49.12483,10.78052],"157.90.156.59":[49.12483,10.78052],"212.227.67.34":[48.99233,8.40298],"185.61.119.19":[43.04652,0.7395],"92.222.127.114":[50.69224,3.20003],"128.243.40.39":[52.93423,-1.19564],"54.173.127.160":[37.54068,-77.43367],"217.160.165.10":[48.99233,8.40298],"2a01:488:66:1000:b24d:4a58:0:1":[50.91286,7.05717],"2404:6800:400b:c005::7f":[-27.47305,153.0142],"213.251.48.147":[51.50405,-0.01784],"13.59.93.103":[39.96199,-83.00275],"104.238.184.174":[51.52058,-0.07316],"91.122.224.102":[64.53855,40.54139],"81.3.27.44":[52.32857,9.78339],"82.113.193.63":[45.49696,9.17996],"5.161.57.75":[36.57625,-119.61812],"94.23.17.185":[50.69224,3.20003],"198.100.144.121":[45.50254,-73.5716],"178.63.240.148":[49.12483,10.78052],"161.53.1.100":[45.79207,15.96939],"2604:a880:800:c1::22f:5001":[40.83197,-74.13139],"195.201.132.113":[50.47914,12.33547],"217.10.68.145":[51.21211,6.75568],"157.245.15.73":[40.83197,-74.13139],"106.55.201.94":[22.54409,114.08353],"193.28.184.4":[50.42007,30.53154],"78.111.79.151":[50.90427,8.02293],"94.75.247.45":[52.37018,4.87324],"217.0.11.225":[49.86571,8.62604],"185.67.224.58":[52.37018,4.87324],"193.16.148.245":[44.48502,26.07693],"88.99.67.241":[50.47914,12.33547],"34.197.205.39":[37.54068,-77.43367],"5.161.52.174":[36.57625,-119.61812],"216.144.89.2":[19.29657,-81.38175],"217.92.89.8":[49.86571,8.62604],"37.59.92.57":[50.69224,3.20003],"94.130.130.49":[50.47914,12.33547],"162.243.29.166":[40.71455,-74.00714],"31.13.72.3":[53.34332,-6.23912],"94.140.180.141":[50.88213,4.45519],"80.250.1.173":[50.02063,14.40517],"115.126.160.126":[-22.26904,166.46092],"212.80.226.18":[51.05691,13.72874],"74.117.176.114":[25.96835,-80.14363],"177.66.4.31":[-15.77829,-47.92909],"176.62.31.10":[45.81319,15.94232],"64.233.163.127":[37.4224,-122.08421],"2001:6b0:17:f010::3d":[58.39784,15.57601],"89.106.220.34":[48.6505,9.00999],"54.176.195.118":[38.57944,-121.49085],"85.17.186.7":[52.37018,4.87324],"3.66.167.46":[50.11208,8.68341],"178.63.107.149":[50.47914,12.33547],"141.54.160.48":[50.97748,11.32728],"150.254.161.60":[52.41165,16.91611],"108.171.179.113":[29.50875,-98.3948],"217.0.12.17":[49.86571,8.62604]} \ No newline at end of file +{ + "100.26.44.18": [ + 39.0481, + -77.4728 + ], + "101.200.40.149": [ + 34.7725, + 113.7266 + ], + "104.130.210.14": [ + 29.50875, + -98.3948 + ], + "104.130.214.5": [ + 29.50875, + -98.3948 + ], + "104.236.181.37": [ + 37.73345, + -122.38998 + ], + "104.238.184.174": [ + 51.52058, + -0.07316 + ], + "106.55.200.13": [ + 22.54409, + 114.08353 + ], + "106.55.200.17": [ + 22.54409, + 114.08353 + ], + "106.55.200.177": [ + 39.9288, + 116.3889 + ], + "106.55.200.57": [ + 23.12518, + 113.28064 + ], + "106.55.201.252": [ + 23.12518, + 113.28064 + ], + "106.55.201.94": [ + 22.54409, + 114.08353 + ], + "106.55.202.114": [ + 23.12518, + 113.28064 + ], + "106.55.202.194": [ + 22.54409, + 114.08353 + ], + "106.55.202.232": [ + 23.12518, + 113.28064 + ], + "106.55.202.25": [ + 39.9288, + 116.3889 + ], + "108.171.179.113": [ + 29.50875, + -98.3948 + ], + "108.177.102.127": [ + 37.751, + -97.822 + ], + "108.177.122.127": [ + 37.751, + -97.822 + ], + "108.177.14.127": [ + 37.4224, + -122.08421 + ], + "108.177.15.127": [ + 37.751, + -97.822 + ], + "108.61.203.98": [ + 42.0076, + -87.9931 + ], + "109.235.234.65": [ + 50.11208, + 8.68341 + ], + "109.68.96.189": [ + 48.09677, + 11.51419 + ], + "109.69.177.38": [ + 55.65615, + 37.55269 + ], + "111.206.174.2": [ + 39.9073, + 116.36566 + ], + "111.206.174.3": [ + 39.9073, + 116.36566 + ], + "111.230.157.11": [ + 22.54409, + 114.08353 + ], + "115.126.160.126": [ + -22.26904, + 166.46092 + ], + "121.101.91.194": [ + 35.69156, + 139.76755 + ], + "128.243.40.39": [ + 52.93423, + -1.19564 + ], + "129.146.30.27": [ + 33.45189, + -111.97417 + ], + "129.153.212.128": [ + 33.45189, + -111.97417 + ], + "13.56.41.14": [ + 37.3388, + -121.8914 + ], + "13.59.93.103": [ + 39.96199, + -83.00275 + ], + "130.236.12.148": [ + 58.39733, + 15.57457 + ], + "131.153.146.5": [ + 34.24053, + -84.42546 + ], + "134.119.17.210": [ + 50.94167, + 6.95516 + ], + "134.2.17.14": [ + 48.53798, + 9.05687 + ], + "136.243.202.77": [ + 49.12483, + 10.78052 + ], + "136.243.59.79": [ + 50.47914, + 12.33547 + ], + "137.74.112.113": [ + 50.69224, + 3.20003 + ], + "138.201.70.161": [ + 49.12483, + 10.78052 + ], + "139.59.84.212": [ + 12.84541, + 77.66434 + ], + "140.82.11.253": [ + 40.5515, + -74.459 + ], + "141.54.160.48": [ + 50.97748, + 11.32728 + ], + "142.250.112.127": [ + 37.751, + -97.822 + ], + "142.250.15.127": [ + 37.751, + -97.822 + ], + "142.250.21.127": [ + 37.4224, + -122.08421 + ], + "143.198.60.79": [ + 37.39684, + -121.95011 + ], + "146.185.186.157": [ + 52.29572, + 4.94431 + ], + "147.182.188.245": [ + 40.79301, + -74.02038 + ], + "149.56.14.164": [ + 45.50254, + -73.5716 + ], + "150.254.161.60": [ + 52.41165, + 16.91611 + ], + "154.48.203.210": [ + 50.0985, + 8.63257 + ], + "154.48.203.211": [ + 50.0985, + 8.63257 + ], + "154.73.34.8": [ + -25.76124, + 28.25398 + ], + "157.161.10.32": [ + 47.52729, + 7.69704 + ], + "157.22.130.80": [ + 37.41527, + -122.07428 + ], + "157.240.196.26": [ + 37.48221, + -122.15049 + ], + "157.240.2.4": [ + 37.751, + -97.822 + ], + "157.240.20.6": [ + 37.48221, + -122.15049 + ], + "157.240.201.26": [ + 37.48221, + -122.15049 + ], + "157.240.205.6": [ + 37.48221, + -122.15049 + ], + "157.240.22.7": [ + 37.751, + -97.822 + ], + "157.240.236.7": [ + 37.48221, + -122.15049 + ], + "157.240.249.22": [ + 37.751, + -97.822 + ], + "157.240.3.21": [ + 37.751, + -97.822 + ], + "157.245.15.73": [ + 40.83197, + -74.13139 + ], + "157.90.156.59": [ + 49.12483, + 10.78052 + ], + "158.69.221.198": [ + 45.50254, + -73.5716 + ], + "158.69.57.20": [ + 40.73686, + -74.17337 + ], + "159.69.191.124": [ + 49.12483, + 10.78052 + ], + "161.53.1.100": [ + 45.79207, + 15.96939 + ], + "162.13.119.185": [ + 51.60999, + -0.24436 + ], + "162.243.29.166": [ + 40.71455, + -74.00714 + ], + "172.105.99.33": [ + 43.64869, + -79.38544 + ], + "172.217.213.127": [ + 37.4224, + -122.08421 + ], + "172.217.214.127": [ + 37.751, + -97.822 + ], + "172.253.113.127": [ + 37.751, + -97.822 + ], + "172.253.117.127": [ + 37.751, + -97.822 + ], + "172.253.120.127": [ + 37.751, + -97.822 + ], + "172.253.127.127": [ + 37.751, + -97.822 + ], + "173.194.193.127": [ + 37.751, + -97.822 + ], + "173.194.219.127": [ + 37.751, + -97.822 + ], + "173.194.77.127": [ + 37.4224, + -122.08421 + ], + "173.255.200.200": [ + 32.96074, + -96.73297 + ], + "173.255.213.166": [ + 37.55148, + -121.9833 + ], + "176.119.42.11": [ + 52.1842, + 20.99972 + ], + "176.62.31.10": [ + 45.81319, + 15.94232 + ], + "176.9.179.80": [ + 49.12483, + 10.78052 + ], + "176.9.24.184": [ + 50.47914, + 12.33547 + ], + "177.66.4.31": [ + -15.77829, + -47.92909 + ], + "178.239.90.248": [ + 52.75156, + -2.39347 + ], + "178.239.90.252": [ + 52.75156, + -2.39347 + ], + "178.33.166.29": [ + 40.4272, + -3.71345 + ], + "178.63.107.149": [ + 50.47914, + 12.33547 + ], + "178.63.240.148": [ + 49.12483, + 10.78052 + ], + "178.77.74.88": [ + 48.54997, + 7.75096 + ], + "18.130.166.236": [ + 51.50643, + -0.12719 + ], + "18.156.18.128": [ + 50.11208, + 8.68341 + ], + "18.156.18.129": [ + 50.11208, + 8.68341 + ], + "18.156.18.130": [ + 50.11208, + 8.68341 + ], + "18.185.220.138": [ + 50.11208, + 8.68341 + ], + "18.188.120.144": [ + 39.96199, + -83.00275 + ], + "18.191.223.12": [ + 39.96199, + -83.00275 + ], + "18.195.48.245": [ + 50.11208, + 8.68341 + ], + "18.195.48.246": [ + 50.11208, + 8.68341 + ], + "18.195.48.248": [ + 50.11208, + 8.68341 + ], + "18.195.48.250": [ + 50.11208, + 8.68341 + ], + "18.195.48.251": [ + 50.11208, + 8.68341 + ], + "18.195.48.252": [ + 50.11208, + 8.68341 + ], + "18.195.48.253": [ + 50.11208, + 8.68341 + ], + "18.195.48.254": [ + 50.11208, + 8.68341 + ], + "18.195.48.255": [ + 50.11208, + 8.68341 + ], + "18.196.233.238": [ + 50.11208, + 8.68341 + ], + "18.197.20.73": [ + 0.0, + 0.0 + ], + "180.235.108.91": [ + -33.8445, + 151.2011 + ], + "182.154.16.5": [ + -36.84713, + 174.76862 + ], + "182.154.16.7": [ + -36.84713, + 174.76862 + ], + "185.112.247.26": [ + 54.91486, + -1.37282 + ], + "185.125.180.70": [ + 49.66782, + 6.12437 + ], + "185.140.24.140": [ + 52.20673, + 20.90848 + ], + "185.158.144.41": [ + 50.84124, + 5.69663 + ], + "185.18.24.50": [ + 38.14851, + 13.34311 + ], + "185.39.86.17": [ + 48.13748, + 11.40792 + ], + "185.41.24.10": [ + 53.68674, + -2.67309 + ], + "185.41.24.6": [ + 53.68674, + -2.67309 + ], + "185.45.152.22": [ + 50.11208, + 8.68341 + ], + "185.60.216.7": [ + 53.34332, + -6.23912 + ], + "185.61.119.19": [ + 43.04652, + 0.7395 + ], + "185.67.224.58": [ + 52.37018, + 4.87324 + ], + "185.67.224.59": [ + 52.37018, + 4.87324 + ], + "185.88.236.76": [ + 47.37315, + 8.52836 + ], + "185.88.7.40": [ + 39.92623, + 32.84384 + ], + "188.118.52.172": [ + 50.88213, + 4.45519 + ], + "188.123.97.201": [ + 49.07587, + 19.61569 + ], + "188.138.90.169": [ + 48.54997, + 7.75096 + ], + "188.64.120.28": [ + 45.52743, + 10.14402 + ], + "188.68.43.182": [ + 49.02907, + 8.35704 + ], + "188.68.50.215": [ + 49.02907, + 8.35704 + ], + "192.172.233.145": [ + 38.65514, + -121.06952 + ], + "192.210.11.250": [ + 25.76704, + -80.19486 + ], + "192.76.120.66": [ + 41.89534, + -87.63628 + ], + "192.99.194.90": [ + 45.50254, + -73.5716 + ], + "193.16.148.245": [ + 44.48502, + 26.07693 + ], + "193.22.119.20": [ + 41.48835, + 2.12444 + ], + "193.22.17.97": [ + 49.97432, + 6.52315 + ], + "193.22.2.248": [ + 50.90063, + 10.88214 + ], + "193.28.184.4": [ + 50.42007, + 30.53154 + ], + "193.43.148.37": [ + 50.29845, + 18.65523 + ], + "194.140.246.192": [ + 52.29468, + 4.88213 + ], + "194.149.74.157": [ + 41.61579, + 0.60976 + ], + "194.169.214.30": [ + 48.87211, + 2.30881 + ], + "194.61.59.25": [ + 51.9229, + 4.43321 + ], + "194.61.59.30": [ + 51.9229, + 4.43321 + ], + "194.87.0.22": [ + 55.81584, + 37.52759 + ], + "195.145.93.141": [ + 53.08323, + 8.78804 + ], + "195.201.132.113": [ + 50.47914, + 12.33547 + ], + "195.201.59.50": [ + 50.47914, + 12.33547 + ], + "195.201.86.186": [ + 50.47914, + 12.33547 + ], + "195.208.107.138": [ + 54.9646, + 82.92696 + ], + "195.209.116.72": [ + 55.42059, + 65.27454 + ], + "195.211.238.18": [ + 56.08854, + 63.62107 + ], + "195.242.206.1": [ + 48.13868, + 11.55143 + ], + "195.254.254.20": [ + 46.47447, + 11.32362 + ], + "195.35.114.37": [ + 53.21312, + 6.58949 + ], + "195.35.115.37": [ + 53.21312, + 6.58949 + ], + "198.100.144.121": [ + 45.50254, + -73.5716 + ], + "198.204.226.148": [ + 39.12692, + -94.57759 + ], + "198.211.120.59": [ + 52.29572, + 4.94431 + ], + "198.61.197.182": [ + 29.51005, + -98.39229 + ], + "198.72.119.88": [ + 45.44274, + -73.61704 + ], + "199.4.110.11": [ + 39.60521, + -104.89231 + ], + "2001:4060:1:1005::10:32": [ + 47.5207, + 7.69179 + ], + "2001:41d0:2:12b9::1": [ + 50.69224, + 3.20003 + ], + "2001:678:b28::118": [ + 51.6313, + 7.32672 + ], + "2001:6b0:17:f010::3d": [ + 58.39784, + 15.57601 + ], + "2001:8d8:961:6400::6:2d58": [ + 39.37148, + 22.93454 + ], + "202.49.164.49": [ + -37.68163, + 176.16809 + ], + "202.49.164.50": [ + -37.68163, + 176.16809 + ], + "203.13.68.16": [ + -28.081, + 153.4118 + ], + "203.20.110.2": [ + -33.89315, + 151.2067 + ], + "204.197.144.2": [ + 39.62968, + -79.95618 + ], + "204.197.159.2": [ + 39.62968, + -79.95618 + ], + "206.53.159.130": [ + 43.6319, + -79.3716 + ], + "206.53.159.134": [ + 43.6319, + -79.3716 + ], + "207.38.89.164": [ + 38.62775, + -90.19956 + ], + "208.83.246.100": [ + 37.39788, + -122.02986 + ], + "208.83.61.2": [ + 38.62929, + -90.19704 + ], + "209.105.241.31": [ + 40.0184, + -105.25638 + ], + "209.242.17.106": [ + 42.18939, + -88.30917 + ], + "209.250.250.224": [ + 52.3914, + 4.663 + ], + "212.101.4.120": [ + 47.20182, + 7.52878 + ], + "212.103.200.6": [ + 45.663, + 11.81225 + ], + "212.103.68.7": [ + 46.96597, + 7.47537 + ], + "212.144.246.197": [ + 50.13132, + 8.56888 + ], + "212.18.0.14": [ + 48.27954, + 11.5759 + ], + "212.211.179.42": [ + 48.19618, + 10.75733 + ], + "212.227.67.33": [ + 48.99233, + 8.40298 + ], + "212.227.67.34": [ + 48.99233, + 8.40298 + ], + "212.25.7.87": [ + 47.377, + 8.53977 + ], + "212.29.18.56": [ + 48.13289, + 11.6664 + ], + "212.45.38.40": [ + 52.53935, + 5.70224 + ], + "212.53.40.40": [ + 55.6543, + 37.53899 + ], + "212.69.48.253": [ + 51.94543, + -0.27793 + ], + "212.80.226.18": [ + 51.05691, + 13.72874 + ], + "213.136.74.244": [ + 48.10425, + 11.60102 + ], + "213.140.209.236": [ + 35.00705, + 33.29423 + ], + "213.157.4.53": [ + 50.55216, + 8.50932 + ], + "213.239.206.5": [ + 50.47914, + 12.33547 + ], + "213.239.212.105": [ + 50.47914, + 12.33547 + ], + "213.251.48.147": [ + 51.50405, + -0.01784 + ], + "216.144.89.2": [ + 19.29657, + -81.38175 + ], + "216.190.232.121": [ + 45.60022, + -122.48528 + ], + "216.228.192.76": [ + 45.33005, + -118.09544 + ], + "217.0.11.225": [ + 49.86571, + 8.62604 + ], + "217.0.11.241": [ + 49.86571, + 8.62604 + ], + "217.0.12.1": [ + 49.86571, + 8.62604 + ], + "217.0.12.17": [ + 49.86571, + 8.62604 + ], + "217.0.136.1": [ + 49.86571, + 8.62604 + ], + "217.0.136.17": [ + 49.86571, + 8.62604 + ], + "217.10.68.145": [ + 51.21211, + 6.75568 + ], + "217.10.68.152": [ + 51.21211, + 6.75568 + ], + "217.119.210.45": [ + 50.89439, + 12.78775 + ], + "217.146.224.39": [ + 48.90395, + 2.25736 + ], + "217.160.165.10": [ + 48.99233, + 8.40298 + ], + "217.19.174.41": [ + 48.13289, + 11.6664 + ], + "217.19.174.42": [ + 48.13289, + 11.6664 + ], + "217.19.216.178": [ + 46.84819, + 29.59681 + ], + "217.74.179.29": [ + 48.12921, + 11.53486 + ], + "217.91.243.229": [ + 49.86571, + 8.62604 + ], + "217.92.89.8": [ + 49.86571, + 8.62604 + ], + "23.19.31.135": [ + 34.05855, + -118.23671 + ], + "23.21.199.62": [ + 37.54068, + -77.43367 + ], + "23.252.81.20": [ + 38.49766, + -121.1016 + ], + "23.253.102.137": [ + 29.50875, + -98.3948 + ], + "2404:6800:4003:c03::7f": [ + -27.47305, + 153.0142 + ], + "2404:6800:4008:c04::7f": [ + -27.47305, + 153.0142 + ], + "2404:6800:400a:1002::7f": [ + -27.47305, + 153.0142 + ], + "2404:6800:400b:c005::7f": [ + -27.47305, + 153.0142 + ], + "2600:1f16:8c5:101::108": [ + 39.96199, + -83.00275 + ], + "2600:1f1c:73d:2903:2f94:b903:df7c:aa0e": [ + 37.3388, + -121.8914 + ], + "2604:4300:a:14a:230:48ff:febb:1f88": [ + 39.1332, + -94.58 + ], + "2604:4300:a:189:6ab5:99ff:fec2:7a34": [ + 39.1332, + -94.58 + ], + "2604:4300:a:189::2": [ + 39.1332, + -94.58 + ], + "2604:a880:800:c1::22f:5001": [ + 40.83197, + -74.13139 + ], + "2607:5300:201:3100::6a8f": [ + 45.50254, + -73.5716 + ], + "2607:f5b4:1:43:7::666": [ + 33.50943, + -112.00933 + ], + "2607:f8b0:4001:c05::7f": [ + 37.751, + -97.822 + ], + "2607:f8b0:4001:c0f::7f": [ + 37.751, + -97.822 + ], + "2607:f8b0:4002:c03::7f": [ + 37.751, + -97.822 + ], + "2607:f8b0:4003:c24::7f": [ + 37.751, + -97.822 + ], + "2607:f8b0:400e:c03::7f": [ + 37.751, + -97.822 + ], + "2607:f8b0:4023:1402::7f": [ + 37.751, + -97.822 + ], + "2607:f8b0:4023:1::7f": [ + 37.751, + -97.822 + ], + "2607:f8b0:4023:401::7f": [ + 37.4224, + -122.08421 + ], + "27.111.15.93": [ + 51.51155, + -0.00292 + ], + "2800:3f0:4001:c03::7f": [ + -23.5733, + -46.6417 + ], + "2800:3f0:4003:c00::7f": [ + -33.45, + -70.6667 + ], + "2a00:1450:4009:c02::7f": [ + 51.5161, + -0.0949 + ], + "2a00:1450:400c:c01::7f": [ + 50.8476, + 4.3428 + ], + "2a00:1450:400c:c0c::7f": [ + 50.8476, + 4.3428 + ], + "2a00:1450:4010:c06::7f": [ + 53.34007, + -6.23632 + ], + "2a00:1450:4010:c0f::7f": [ + 53.34007, + -6.23632 + ], + "2a01:430:27::201": [ + 49.2014, + 16.596 + ], + "2a01:488:66:1000:b24d:4a58:0:1": [ + 50.91286, + 7.05717 + ], + "2a01:4f8:120:1497::148": [ + 49.12483, + 10.78052 + ], + "2a01:4f8:13b:39ce::2": [ + 49.503, + 8.4693 + ], + "2a01:4f8:13b:4285::2": [ + 49.12483, + 10.78052 + ], + "2a01:4f8:13b:705::1234": [ + 49.12483, + 10.78052 + ], + "2a01:4f8:1c0c:6374::1": [ + 49.12483, + 10.78052 + ], + "2a01:4f8:242:56ca::2": [ + 49.12483, + 10.78052 + ], + "2a01:4f8:c17:8f74::1": [ + 49.12483, + 10.78052 + ], + "2a01:4f9:4b:4c8f::2": [ + 49.12483, + 10.78052 + ], + "2a02:2b88:2:1::6494:1": [ + 49.05367, + 14.43106 + ], + "2a02:c207:3000:7523::1": [ + 48.10434, + 11.60098 + ], + "2a02:f98:0:50:2ff:23ff:fe42:1b23": [ + 50.9762, + 7.02039 + ], + "2a03:2880:f001:0:face:b00c:0:24d9": [ + 53.0, + -8.0 + ], + "2a03:2880:f003:108:face:b00c:0:24d9": [ + 53.0, + -8.0 + ], + "2a03:2880:f003:c01:face:b00c:0:24d9": [ + 53.0, + -8.0 + ], + "2a03:2880:f007:0:face:b00c:0:24d9": [ + 53.27699, + -6.21708 + ], + "2a03:2880:f00a:0:face:b00c:0:24d9": [ + 53.27699, + -6.21708 + ], + "2a03:2880:f013:5:face:b00c:0:24d9": [ + 53.3424, + -6.28879 + ], + "2a03:2880:f016:0:face:b00c:0:24d9": [ + 53.3424, + -6.28879 + ], + "2a03:2880:f01c:8005:face:b00c:0:24d9": [ + 53.3424, + -6.28879 + ], + "2a03:2880:f027:205:face:b00c:0:24d9": [ + 53.0, + -8.0 + ], + "2a03:2880:f02d:106:face:b00c:0:24d9": [ + 39.0438, + -77.4874 + ], + "2a03:2880:f02d:6:face:b00c:0:24d9": [ + 39.0438, + -77.4874 + ], + "2a03:2880:f031:6:face:b00c:0:24d9": [ + 53.0, + -8.0 + ], + "2a03:2880:f042:11b:face:b00c:0:24d9": [ + 53.34332, + -6.23912 + ], + "2a03:2880:f045:1b:face:b00c:0:24d9": [ + 53.34332, + -6.23912 + ], + "2a03:2880:f082:17:face:b00c:0:24d9": [ + 53.0, + -8.0 + ], + "2a03:b0c0:0:1010::a2:a001": [ + 52.29572, + 4.94431 + ], + "2a05:d014:e18:e100:1a2c:d041:65e8:1c0e": [ + 50.11208, + 8.68341 + ], + "2a05:d01c:151:7600:5796:11b9:fbc5:7e50": [ + 51.50643, + -0.12719 + ], + "3.133.142.167": [ + 37.751, + -97.822 + ], + "3.17.178.74": [ + 39.9653, + -83.0235 + ], + "3.208.102.142": [ + 37.54068, + -77.43367 + ], + "3.217.252.179": [ + 39.0481, + -77.4728 + ], + "3.66.167.46": [ + 50.11208, + 8.68341 + ], + "3.67.36.79": [ + 37.751, + -97.822 + ], + "31.13.66.13": [ + 53.3472, + -6.2439 + ], + "31.13.72.3": [ + 53.34332, + -6.23912 + ], + "31.13.81.3": [ + 53.34332, + -6.23912 + ], + "31.13.84.5": [ + 53.34332, + -6.23912 + ], + "31.184.236.23": [ + 50.08404, + 14.45238 + ], + "34.192.137.246": [ + 37.54068, + -77.43367 + ], + "34.193.110.91": [ + 37.54068, + -77.43367 + ], + "34.197.205.39": [ + 37.54068, + -77.43367 + ], + "34.203.250.116": [ + 39.0481, + -77.4728 + ], + "34.203.250.119": [ + 39.0481, + -77.4728 + ], + "34.206.168.53": [ + 37.54068, + -77.43367 + ], + "34.73.197.25": [ + 37.4224, + -122.08421 + ], + "34.74.124.204": [ + 37.4224, + -122.08421 + ], + "35.176.163.241": [ + 51.50643, + -0.12719 + ], + "35.176.190.183": [ + 51.50643, + -0.12719 + ], + "35.180.81.93": [ + 48.85717, + 2.3414 + ], + "35.88.98.232": [ + 37.751, + -97.822 + ], + "37.139.120.14": [ + 40.48733, + -3.66757 + ], + "37.157.193.46": [ + 49.05452, + 14.43039 + ], + "37.59.92.57": [ + 50.69224, + 3.20003 + ], + "37.9.136.90": [ + 48.83633, + 2.31966 + ], + "37.97.65.52": [ + 48.87498, + 2.3497 + ], + "41.79.23.6": [ + -26.05385, + 28.00775 + ], + "42.121.15.99": [ + 30.2084, + 120.21201 + ], + "44.224.155.217": [ + 44.93326, + -123.04381 + ], + "44.230.252.214": [ + 47.592, + -122.31713 + ], + "45.15.102.31": [ + 50.94856, + 6.9448 + ], + "45.32.217.190": [ + 33.77769, + -84.42135 + ], + "46.193.255.81": [ + 48.87325, + 2.30581 + ], + "49.12.125.53": [ + 49.12483, + 10.78052 + ], + "5.161.52.174": [ + 36.57625, + -119.61812 + ], + "5.161.57.75": [ + 36.57625, + -119.61812 + ], + "5.178.34.84": [ + 52.3767, + 5.2228 + ], + "5.9.87.18": [ + 50.47914, + 12.33547 + ], + "51.255.123.123": [ + 48.8582, + 2.3387 + ], + "51.68.112.203": [ + 50.69224, + 3.20003 + ], + "51.68.45.75": [ + 50.69224, + 3.20003 + ], + "51.83.15.212": [ + 50.69224, + 3.20003 + ], + "51.83.201.84": [ + 51.09844, + 17.03112 + ], + "52.213.239.118": [ + 53.34807, + -6.24827 + ], + "52.215.127.243": [ + 53.34807, + -6.24827 + ], + "52.215.127.248": [ + 53.34807, + -6.24827 + ], + "52.215.127.251": [ + 53.34807, + -6.24827 + ], + "52.24.174.49": [ + 44.93326, + -123.04381 + ], + "52.26.251.34": [ + 44.93326, + -123.04381 + ], + "52.29.83.217": [ + 50.11208, + 8.68341 + ], + "52.47.70.236": [ + 48.85717, + 2.3414 + ], + "52.52.70.85": [ + 38.57944, + -121.49085 + ], + "52.58.118.108": [ + 50.11208, + 8.68341 + ], + "52.59.128.221": [ + 50.11208, + 8.68341 + ], + "52.71.78.21": [ + 37.54068, + -77.43367 + ], + "52.76.91.67": [ + 1.29041, + 103.85211 + ], + "52.88.215.69": [ + 45.8491, + -119.7143 + ], + "52.91.111.35": [ + 39.0481, + -77.4728 + ], + "52.91.234.71": [ + 39.0481, + -77.4728 + ], + "54.154.83.111": [ + 53.34807, + -6.24827 + ], + "54.173.127.160": [ + 37.54068, + -77.43367 + ], + "54.173.127.164": [ + 37.54068, + -77.43367 + ], + "54.176.195.118": [ + 38.57944, + -121.49085 + ], + "54.177.85.190": [ + 38.57944, + -121.49085 + ], + "54.183.232.212": [ + 38.57944, + -121.49085 + ], + "54.197.117.0": [ + 37.54068, + -77.43367 + ], + "54.201.195.34": [ + 45.8491, + -119.7143 + ], + "54.216.147.126": [ + 53.34807, + -6.24827 + ], + "54.223.41.250": [ + 39.90657, + 116.38765 + ], + "54.244.51.19": [ + 45.8491, + -119.7143 + ], + "54.244.51.20": [ + 45.8491, + -119.7143 + ], + "54.36.67.77": [ + 50.69224, + 3.20003 + ], + "54.89.94.57": [ + 39.0481, + -77.4728 + ], + "62.138.0.157": [ + 48.54997, + 7.75096 + ], + "62.157.116.5": [ + 53.08323, + 8.78804 + ], + "62.96.96.137": [ + 50.25536, + 8.64637 + ], + "63.141.246.34": [ + 39.12692, + -94.57759 + ], + "63.211.239.133": [ + 32.58997, + -92.06862 + ], + "64.233.163.127": [ + 37.4224, + -122.08421 + ], + "64.233.186.127": [ + 37.751, + -97.822 + ], + "65.17.128.101": [ + 40.74183, + -84.107 + ], + "65.99.199.231": [ + 32.80822, + -96.85725 + ], + "66.110.73.74": [ + 38.95875, + -77.42341 + ], + "66.228.54.23": [ + 32.96074, + -96.73297 + ], + "66.51.128.11": [ + 49.28108, + -123.12511 + ], + "69.20.59.115": [ + 42.50002, + -71.16273 + ], + "69.89.160.30": [ + 39.73475, + -79.45212 + ], + "70.42.198.30": [ + 42.31203, + -71.38967 + ], + "70.42.198.34": [ + 42.31203, + -71.38967 + ], + "74.117.176.114": [ + 25.96835, + -80.14363 + ], + "74.125.197.127": [ + 37.751, + -97.822 + ], + "74.125.204.127": [ + 37.4224, + -122.08421 + ], + "74.125.24.127": [ + 37.4224, + -122.08421 + ], + "77.237.51.83": [ + 48.1949, + 16.33906 + ], + "77.243.0.75": [ + 51.73633, + 36.19761 + ], + "77.246.121.149": [ + 54.7623, + 9.44572 + ], + "77.246.29.197": [ + 51.4617, + -1.00581 + ], + "77.72.169.210": [ + 46.94843, + 7.44046 + ], + "77.72.169.211": [ + 46.94843, + 7.44046 + ], + "77.72.169.212": [ + 46.94843, + 7.44046 + ], + "77.72.169.213": [ + 46.94843, + 7.44046 + ], + "78.111.72.53": [ + 50.97528, + 7.02442 + ], + "78.111.79.151": [ + 50.90427, + 8.02293 + ], + "78.40.125.40": [ + 48.87092, + 2.32063 + ], + "79.140.42.88": [ + 49.51504, + 11.02588 + ], + "79.174.66.51": [ + 55.77756, + 37.50318 + ], + "80.155.54.123": [ + 53.08323, + 8.78804 + ], + "80.156.209.102": [ + 53.08323, + 8.78804 + ], + "80.250.1.173": [ + 50.02063, + 14.40517 + ], + "81.162.64.162": [ + 44.95754, + 34.10827 + ], + "81.173.115.217": [ + 48.99233, + 8.40298 + ], + "81.187.30.115": [ + 50.72471, + -3.52708 + ], + "81.19.224.87": [ + 55.68193, + 12.39458 + ], + "81.23.228.150": [ + 51.993, + 5.67808 + ], + "81.25.228.2": [ + 46.48722, + 30.73985 + ], + "81.3.27.44": [ + 52.32857, + 9.78339 + ], + "81.82.206.117": [ + 51.035, + 4.48421 + ], + "81.83.12.46": [ + 51.035, + 4.48421 + ], + "81.91.111.11": [ + 51.42056, + -1.71553 + ], + "82.113.193.63": [ + 45.49696, + 9.17996 + ], + "82.97.157.254": [ + 54.36856, + 10.10565 + ], + "83.125.8.47": [ + 50.1162, + 8.62984 + ], + "83.211.9.232": [ + 45.49756, + 9.16767 + ], + "83.219.128.132": [ + 54.67028, + 20.49641 + ], + "83.64.250.246": [ + 48.18617, + 16.40324 + ], + "83.96.215.63": [ + 51.91765, + 4.5152 + ], + "84.198.248.217": [ + 51.035, + 4.48421 + ], + "84.39.99.22": [ + 50.62132, + 7.23524 + ], + "85.17.186.7": [ + 52.37018, + 4.87324 + ], + "85.17.88.164": [ + 52.37018, + 4.87324 + ], + "85.197.87.182": [ + 50.05751, + 9.06508 + ], + "85.93.219.114": [ + 49.59508, + 6.22337 + ], + "87.129.12.229": [ + 50.11093, + 11.45131 + ], + "87.253.140.133": [ + 52.16316, + 4.47603 + ], + "88.198.151.128": [ + 49.12483, + 10.78052 + ], + "88.198.203.20": [ + 50.47914, + 12.33547 + ], + "88.218.220.40": [ + 31.75193, + 35.21604 + ], + "88.86.102.51": [ + 50.07262, + 14.45277 + ], + "88.99.67.241": [ + 50.47914, + 12.33547 + ], + "89.106.220.34": [ + 48.6505, + 9.00999 + ], + "89.185.235.201": [ + 49.20143, + 16.59599 + ], + "90.145.158.66": [ + 52.34691, + 5.18264 + ], + "91.121.128.132": [ + 50.69224, + 3.20003 + ], + "91.121.209.194": [ + 50.69224, + 3.20003 + ], + "91.121.31.8": [ + 50.69224, + 3.20003 + ], + "91.122.224.102": [ + 64.53855, + 40.54139 + ], + "91.151.52.200": [ + 48.81566, + 2.30464 + ], + "91.199.161.149": [ + 46.35915, + 15.11886 + ], + "91.205.60.185": [ + 58.15681, + 13.55365 + ], + "91.213.98.54": [ + 52.13056, + 7.69334 + ], + "91.217.201.14": [ + 56.04815, + 9.9454 + ], + "92.205.106.161": [ + 48.54997, + 7.75096 + ], + "92.222.127.114": [ + 50.69224, + 3.20003 + ], + "92.63.111.151": [ + 52.23107, + 104.27701 + ], + "94.130.130.49": [ + 50.47914, + 12.33547 + ], + "94.140.180.141": [ + 50.88213, + 4.45519 + ], + "94.23.17.185": [ + 50.69224, + 3.20003 + ], + "94.75.247.45": [ + 52.37018, + 4.87324 + ], + "95.110.198.3": [ + 45.70662, + 9.59049 + ], + "95.163.107.194": [ + 55.81955, + 37.64382 + ], + "95.216.145.84": [ + 60.17116, + 24.93265 + ], + "95.216.78.222": [ + 60.17116, + 24.93265 + ], + "95.217.228.176": [ + 60.17116, + 24.93265 + ], + "95.56.227.227": [ + 43.25066, + 76.88814 + ] +} \ No newline at end of file diff --git a/run.sh b/run.sh deleted file mode 100755 index 462a15210..000000000 --- a/run.sh +++ /dev/null @@ -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 \ No newline at end of file diff --git a/src/geoip.rs b/src/geoip.rs index 0fcf4a345..f98b6e83d 100644 --- a/src/geoip.rs +++ b/src/geoip.rs @@ -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 { + self.get_geoip_info(hostname).await + } + + async fn get_ip_geoip_info(&self, ip: IpAddr) -> io::Result { + self.get_geoip_info(ip.to_string().as_str()).await + } + + async fn get_geoip_info(&self, hostname_or_ip: &str) -> io::Result; +} 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 { +#[async_trait] +impl GeoIpClient for IpGeolocationIoClient { + + async fn get_geoip_info(&self, hostname_or_ip: &str) -> io::Result { + 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::() + .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, + longitude: Option, +} + +#[async_trait] +impl GeoIpClient for GeolocationDbClient { + async fn get_hostname_geoip_info(&self, hostname: &str) -> io::Result { self.get_geoip_info(hostname).await } @@ -38,54 +110,55 @@ impl IpGeolocationIoClient { } async fn get_geoip_info(&self, hostname_or_ip: &str) -> io::Result { - 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::>() + .json::() .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, +pub(crate) struct CachedIpGeolocationIpClient { + cachefile_path: String, + client_impl: T, + map: BTreeMap, } -impl CachedIpGeolocationIpClient { - pub(crate) async fn new(filename: String) -> io::Result { - let cache_str = tokio::fs::read_to_string(filename.as_str()).await?; +impl CachedIpGeolocationIpClient { + pub(crate) async fn new(cachefile_path: String) -> io::Result { + let cache_str = tokio::fs::read_to_string(cachefile_path.as_str()).await?; - let map: HashMap = serde_json::de::from_str(cache_str.as_str()) + let map: BTreeMap = 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::new(String::from("geoip_cache.txt")).await + pub(crate) async fn default() -> io::Result { + Self::new(String::from("geoip_cache.txt")).await } pub(crate) async fn get_hostname_geoip_info(&mut self, hostname: &str) -> io::Result { @@ -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 { 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) } -} \ No newline at end of file +} + + +#[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); + } +} diff --git a/src/main.rs b/src/main.rs index d94805068..829dd77ba 100644 --- a/src/main.rs +++ b/src/main.rs @@ -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::::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::>(); - 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::>(); diff --git a/src/stun.rs b/src/stun.rs index 6042d2a96..7798fc466 100644 --- a/src/stun.rs +++ b/src/stun.rs @@ -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() }, } } - }, - } + } + }; } diff --git a/valid_hosts.txt b/valid_hosts.txt index b65a2e7c4..84fb6171d 100644 --- a/valid_hosts.txt +++ b/valid_hosts.txt @@ -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 \ No newline at end of file +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 diff --git a/valid_ipv4s.txt b/valid_ipv4s.txt index c1f3c03e4..e4e5848ab 100644 --- a/valid_ipv4s.txt +++ b/valid_ipv4s.txt @@ -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 \ No newline at end of file +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 diff --git a/valid_ipv6s.txt b/valid_ipv6s.txt index 4dc6579b7..06d39a7f3 100644 --- a/valid_ipv6s.txt +++ b/valid_ipv6s.txt @@ -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 \ No newline at end of file +[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