Ну, это, вероятно, разрешение имени, которое займет у вас так много времени.Если вы посчитаете это (т. Е. Если копание каким-то образом вернулось очень быстро), Python сможет легко обрабатывать тысячи записей.
Тем не менее, вы должны попробовать многопоточный подход.Это (теоретически) разрешит несколько адресов одновременно, а не последовательно.С тем же успехом вы могли бы продолжать использовать dig для этого, и было бы тривиально изменить мой пример кода ниже для этого, но, чтобы сделать вещи интересными (и, надеюсь, более питоническими), давайте использовать для этого существующий модуль: dnspython
Итак, установите его с помощью:
sudo pip install -f http://www.dnspython.org/kits/1.8.0/ dnspython
и попробуйте что-то вроде следующего:
import threading
from dns import resolver
class Resolver(threading.Thread):
def __init__(self, address, result_dict):
threading.Thread.__init__(self)
self.address = address
self.result_dict = result_dict
def run(self):
try:
result = resolver.query(self.address)[0].to_text()
self.result_dict[self.address] = result
except resolver.NXDOMAIN:
pass
def main():
infile = open("domainlist", "r")
intext = infile.readlines()
threads = []
results = {}
for address in [address.strip() for address in intext if address.strip()]:
resolver_thread = Resolver(address, results)
threads.append(resolver_thread)
resolver_thread.start()
for thread in threads:
thread.join()
outfile = open('final.csv', 'w')
outfile.write("\n".join("%s,%s" % (address, ip) for address, ip in results.iteritems()))
outfile.close()
if __name__ == '__main__':
main()
Если это доказывает, что вы запускаете слишком много потоковв то же время вы можете попробовать сделать это в пакетном режиме или использовать очередь (см. http://www.ibm.com/developerworks/aix/library/au-threadingpython/ для примера)