root / utils / whois.py @ 1534e9c2
History | View | Annotate | Download (1.3 kB)
1 | e9d46ce1 | Leonidas Poulopoulos | import socket |
---|---|---|---|
2 | e9d46ce1 | Leonidas Poulopoulos | from ipaddr import * |
3 | e9d46ce1 | Leonidas Poulopoulos | import re |
4 | 1534e9c2 | Leonidas Poulopoulos | import settings |
5 | e9d46ce1 | Leonidas Poulopoulos | |
6 | e9d46ce1 | Leonidas Poulopoulos | def query(query, hostname, flags): |
7 | e9d46ce1 | Leonidas Poulopoulos | s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
8 | e9d46ce1 | Leonidas Poulopoulos | s.connect((hostname, 43))
|
9 | 049a5a10 | Leonidas Poulopoulos | # as IPv6 is not supported by flowspec for the time ommit -T route6
|
10 | 049a5a10 | Leonidas Poulopoulos | s.send(" -i origin -r -K -T route " + query + "\r\n") |
11 | e9d46ce1 | Leonidas Poulopoulos | response = ''
|
12 | e9d46ce1 | Leonidas Poulopoulos | while True: |
13 | e9d46ce1 | Leonidas Poulopoulos | d = s.recv(4096)
|
14 | e9d46ce1 | Leonidas Poulopoulos | response += d |
15 | e9d46ce1 | Leonidas Poulopoulos | if not d: |
16 | e9d46ce1 | Leonidas Poulopoulos | break
|
17 | e9d46ce1 | Leonidas Poulopoulos | s.close() |
18 | e9d46ce1 | Leonidas Poulopoulos | query = response.splitlines() |
19 | e9d46ce1 | Leonidas Poulopoulos | routes4 = [] |
20 | e9d46ce1 | Leonidas Poulopoulos | routes6 = [] |
21 | e9d46ce1 | Leonidas Poulopoulos | final_routes4 = [] |
22 | e9d46ce1 | Leonidas Poulopoulos | final_routes6 = [] |
23 | e9d46ce1 | Leonidas Poulopoulos | for line in query: |
24 | e9d46ce1 | Leonidas Poulopoulos | m = re.match(r"(^route6?\:\s+)(?P<subnets>\S+)", line)
|
25 | e9d46ce1 | Leonidas Poulopoulos | if m:
|
26 | e9d46ce1 | Leonidas Poulopoulos | if IPNetwork(m.group('subnets')).version == 4: |
27 | e9d46ce1 | Leonidas Poulopoulos | routes4.append(IPNetwork(m.group('subnets')))
|
28 | e9d46ce1 | Leonidas Poulopoulos | if IPNetwork(m.group('subnets')).version == 6: |
29 | e9d46ce1 | Leonidas Poulopoulos | routes6.append(IPNetwork(m.group('subnets')))
|
30 | e9d46ce1 | Leonidas Poulopoulos | final_routes = [] |
31 | e9d46ce1 | Leonidas Poulopoulos | if len(routes4): |
32 | e9d46ce1 | Leonidas Poulopoulos | final_routes4 = collapse_address_list(routes4) |
33 | e9d46ce1 | Leonidas Poulopoulos | if len(routes6): |
34 | e9d46ce1 | Leonidas Poulopoulos | final_routes6 = collapse_address_list(routes6) |
35 | e9d46ce1 | Leonidas Poulopoulos | final_routes = final_routes4 + final_routes6 |
36 | e9d46ce1 | Leonidas Poulopoulos | return final_routes
|
37 | e9d46ce1 | Leonidas Poulopoulos | |
38 | e9d46ce1 | Leonidas Poulopoulos | def whois(queryas): |
39 | 1534e9c2 | Leonidas Poulopoulos | routes = query(queryas,settings.PRIMARY_WHOIS, None)
|
40 | e9d46ce1 | Leonidas Poulopoulos | if not routes: |
41 | 1534e9c2 | Leonidas Poulopoulos | routes = query(queryas,settings.ALTERNATE_WHOIS, None)
|
42 | e9d46ce1 | Leonidas Poulopoulos | return routes |