from dns.asyncresolver import Resolver import asyncio import sqlite3 async def getIPs(): conn = sqlite3.connect('hosts.db') c = conn.cursor() c.execute('SELECT DISTINCT job.host FROM job') # sqlite> SELECT DISTINCT job.host FROM job LIMIT 10; # . # 163mx00.mxmail.netease.com. # 163mx01.mxmail.netease.com. # 163mx02.mxmail.netease.com. # 163mx03.mxmail.netease.com. # a.dailymotion.com. # a.iana-servers.net. # a.icann-servers.net. # a.mx.openstreetmap.org. # a.ns.apple.com. # Total: 10,259 lookups = c.fetchall() res = Resolver() sema = asyncio.Semaphore(500) output = [get_ips(domain[0], res, sema) for domain in lookups] await asyncio.gather(*output, return_exceptions=False) async def get_ips(domain, res, sema): async with sema: try: ip = await res.resolve(domain, 'A') for result in ip: result = result.to_text() break except Exception as e: pass try: ip = await res.resolve(domain, 'AAAA') for result in ip: result = result.to_text() break except Exception as e: pass asyncio.run(getIPs())