#!/usr/bin/python3 # -*- coding: UTF-8 -*- #author:Wos #easy to find specific domain's available ip from ping3 import ping import re import requests import os import asyncio import sys import time iplist = [] ipdict = {} #available ip iplist_ = [] dnslist = ['208.67.222.220', '8.8.8.8', '9.9.9.9', '12.121.117.201', '98.113.146.9', '149.112.112.112', '66.206.166.2', '208.91.112.53', '77.88.8.8', '5.11.11.5', '80.80.80.80', '163.172.107.158', '195.235.225.10', '194.209.157.109', '83.137.41.9', '81.17.66.13', '93.176.83.154', '195.243.214.4', '200.52.177.186', '200.248.178.54', '103.26.250.4', '1.1.1.1', '61.8.0.113', '210.48.77.68', '210.16.120.48', '164.124.101.2', '223.5.5.5', '212.175.192.114', '203.94.227.70', '125.209.116.22', '185.83.212.30', '185.228.168.9', '103.153.154.2', '127.0.0.1'] async def test_ping(n): global ipdict await asyncio.sleep(1) res = ping(str(iplist_[n]).split(":")[0],timeout=1) if res is not None: delay = int(res * 1000) ipdict[iplist_[n]] = str(delay) print(str(iplist_[n])+" ping:"+str(delay)) def GetDesktopPath(): return os.path.join(os.path.expanduser("~"), 'Desktop') def isip(s): for i in s: if u'\u4e00' <= i <= u'\u9fff': return False elif str(i).isalpha(): return False return True if __name__ == '__main__': while True: os.system('clear') ipdict = {} iplist = [] iplist_ = [] print("exit() to quit!") keyword = input("domain:") if keyword == "exit()": sys.exit() for i in dnslist: cmdline = "nslookup "+str(keyword)+' '+str(i) print(cmdline) result = os.popen(cmdline) info = result.read() try: temp2 = str(info).split("Address:")[2].split("Aliases:")[0].strip().split("\n") for j in temp2: if "::" not in str(j) and isip(j): if str(j).strip() not in iplist: iplist.append(str(j).strip()) print(str(j).strip()) except: pass try: temp2 = str(info).split("Addresses:")[1].split("Aliases:")[0].strip().split("\n") for j in temp2: if "::" not in str(j) and isip(j): if str(j).strip() not in iplist: iplist.append(str(j).strip()) print(str(j).strip()) except: pass iplist_ = [] for j in iplist: if j not in dnslist: iplist_.append(j) print("server ping test...") loop = asyncio.get_event_loop() tasks = [test_ping(j) for j in range(len(iplist_))] loop.run_until_complete(asyncio.wait(tasks)) ip_list_sorted = list(dict(sorted(ipdict.items(),key=lambda item:item[1])).keys()) if ip_list_sorted == None: print("no address available!") else: fn = GetDesktopPath()+"/dns_unblock.txt" if not os.path.exists(fn): f = open(fn,'w',encoding='utf-8').close() f = open(fn,'a',encoding='utf-8') for j in ip_list_sorted: f.writelines(str(j)+" "+str(keyword)+"\n") f.close() else: f = open(fn,'a',encoding='utf-8') for j in ip_list_sorted: f.writelines(str(j)+" "+str(keyword)+"\n") f.close() print("the result save to Desktop by name dns_unblock.txt") print("complate!") time.sleep(3)