/
scan-dns-e2.py
85 lines (68 loc) · 2.09 KB
/
scan-dns-e2.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#!/usr/bin/env python
#-*- coding=utf-8 -*-
from twisted.names.dns import DNSDatagramProtocol
from twisted.names.dns import Message
from twisted.names.dns import Query
from twisted.names.dns import Name
from twisted.names.dns import Record_TXT
from twisted.internet.defer import Deferred
from twisted.internet import reactor
import random
from twisted.internet import task
from twisted.internet import defer
import struct
from twisted.internet.error import CannotListenError
class DnsDatagramProtocol(DNSDatagramProtocol):
def __init__(self, controller, ip = '', reactor=None, datagram = ''):
self.controller = controller
self.id = random.randrange(2 ** 10, 2 ** 15)
if reactor is None:
from twisted.internet import reactor
self._reactor = reactor
self.ip = ip
self.datagram = datagram
def startProtocol(self):
self.liveMessages = {}
self.resends = {}
qd = Query()
qd.name = Name('version.bind')
qd.type = 16
qd.cls = 3
qd = [qd]
self.query((self.ip, 53), qd)
#############################################
def getResult(result):
print result
def getError(reason):
err = reason.getErrorMessage()
#############################################
def doWork():
fp = open("AllIP",'r')
for ip in fp.readlines():
ip = ip.strip().replace('\n','')
d = Deferred()
reactor.listenUDP(0,DnsDatagramProtocol(d, ip))
# d.callbacks(finish)
yield d
def finish(igo):
print "Out of finish!"
reactor.callLater(5, reactor.stop)
#############################################
def taskRun():
deferreds = []
coop = task.Cooperator()
work = doWork()
maxRun = 50
for i in xrange(maxRun):
d = coop.coiterate(work)
# d.addCallback(getResult)
# d.addErrback(getError)
deferreds.append(d)
dl = defer.DeferredList(deferreds)
dl.addCallback(finish)
#############################################
def main():
taskRun()
reactor.run()
if __name__ == '__main__':
main()