Eh bien, c'est probablement la résolution de nom qui vous prend si longtemps. Si vous comptez cela (c'est-à-dire, si d'une manière ou d'une autre vous revenez très rapidement), Python devrait être capable de gérer facilement des milliers d'entrées.
Cela dit, vous devriez essayer une approche filetée. Cela résoudrait (théoriquement) plusieurs adresses en même temps, plutôt que séquentiellement. Vous pourriez tout aussi bien continuer à utiliser creuser pour cela, et il devrait être trivial de modifier mon code exemple ci-dessous, mais, pour rendre les choses intéressantes (et je l'espère plus pythonique), nous allons utiliser un module existant pour que: dnspython
alors, installez-le avec:
sudo pip install -f http://www.dnspython.org/kits/1.8.0/ dnspython
Et essayez quelque chose comme ce qui suit:
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()
Si cela se révèle commencer trop de threads en même temps, vous pourriez essayer de le faire par lots ou en utilisant une file d'attente (voir http://www.ibm.com/developerworks/aix/library/au-threadingpython/ pour un exemple)
Affiche le script ou le pseudo-code du script. De cette façon, nous pouvons suggérer des améliorations. Une liste de milliers en 15 minutes devrait être facilement dans les limites de python. – Kieveli
+1, s'il vous plaît nous montrer ce que vous avez. BTW, si j'ai bien compris, il est probable que c'est la résolution de noms, pas le script lui-même, qui prend si longtemps. Si c'est le cas, vous pouvez essayer une solution threadée. – rbp
Publié, tel que demandé. – Tom