forked from PaulSec/API-dnsdumpster.com
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDNSDumpsterAPI.py
More file actions
73 lines (59 loc) · 2.27 KB
/
DNSDumpsterAPI.py
File metadata and controls
73 lines (59 loc) · 2.27 KB
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
"""
This is the (unofficial) Python API for dnsdumpster.com Website.
Using this code, you can retrieve subdomains
"""
import requests
import re
from bs4 import BeautifulSoup
class DNSDumpsterAPI(object):
"""
DNSDumpsterAPI Main Handler
"""
_instance = None
_verbose = False
def __init__(self, arg=None):
pass
def __new__(cls, *args, **kwargs):
"""
__new__ builtin
"""
if not cls._instance:
cls._instance = super(DNSDumpsterAPI, cls).__new__(
cls, *args, **kwargs)
if (args and args[0] and args[0]['verbose']):
cls._verbose = True
return cls._instance
def display_message(self, s):
if (self._verbose):
print '[verbose] %s' % s
def search(self, domain):
url = "https://dnsdumpster.com/"
s = requests.session()
req = s.get(url)
soup = BeautifulSoup(req.content)
csrf_middleware = soup.findAll('input', attrs={'name': 'csrfmiddlewaretoken'})[0]['value']
self.display_message('Retrieved token: %s' % csrf_middleware)
cookies = {'csrftoken': csrf_middleware}
headers = {'Referer': 'https://dnsdumpster.com/'}
data = {'csrfmiddlewaretoken': csrf_middleware, 'targetip': domain}
req = s.post(url, cookies=cookies, data=data, headers=headers)
if ('There was an error getting results' in req.content):
return []
soup = BeautifulSoup(req.content)
tables = soup.findAll('table')
table = tables[3]
res = []
trs = table.findAll('tr')
for tr in trs:
tds = tr.findAll('td')
pattern_ip = r'([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})'
ip = re.findall(pattern_ip, tds[1].text)[0]
domain = tds[0].text.replace('\n', '')
additional_info = tds[2].text
country = tds[2].find('span', attrs={}).text
autonomous_system = additional_info.split(' ')[0]
provider = ' '.join(additional_info.split(' ')[1:])
provider = provider.replace(country, '')
data = {'domain': domain, 'ip': ip, 'as': autonomous_system, 'provider': provider, 'country': country}
res.append(data)
return res