Statistics
| Branch: | Tag: | Revision:

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