root / utils / whois.py @ 3ff6f95b
History | View | Annotate | Download (2.1 kB)
1 |
# -*- coding: utf-8 -*- vim:fileencoding=utf-8:
|
---|---|
2 |
# vim: tabstop=4:shiftwidth=4:softtabstop=4:expandtab
|
3 |
|
4 |
# Copyright (C) 2010-2014 GRNET S.A.
|
5 |
#
|
6 |
# This program is free software: you can redistribute it and/or modify
|
7 |
# it under the terms of the GNU General Public License as published by
|
8 |
# the Free Software Foundation, either version 3 of the License, or
|
9 |
# (at your option) any later version.
|
10 |
#
|
11 |
# This program is distributed in the hope that it will be useful,
|
12 |
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13 |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14 |
# GNU General Public License for more details.
|
15 |
#
|
16 |
# You should have received a copy of the GNU General Public License
|
17 |
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
18 |
#
|
19 |
|
20 |
import socket |
21 |
from ipaddr import * |
22 |
import re |
23 |
from django.conf import settings |
24 |
|
25 |
def query(query, hostname, flags): |
26 |
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
27 |
s.connect((hostname, 43))
|
28 |
# as IPv6 is not supported by flowspec for the time ommit -T route6
|
29 |
s.send(" -i origin -r -K -T route " + query + "\r\n") |
30 |
response = ''
|
31 |
while True: |
32 |
d = s.recv(4096)
|
33 |
response += d |
34 |
if not d: |
35 |
break
|
36 |
s.close() |
37 |
query = response.splitlines() |
38 |
routes4 = [] |
39 |
routes6 = [] |
40 |
final_routes4 = [] |
41 |
final_routes6 = [] |
42 |
for line in query: |
43 |
m = re.match(r"(^route6?\:\s+)(?P<subnets>\S+)", line)
|
44 |
if m:
|
45 |
if IPNetwork(m.group('subnets')).version == 4: |
46 |
routes4.append(IPNetwork(m.group('subnets')))
|
47 |
if IPNetwork(m.group('subnets')).version == 6: |
48 |
routes6.append(IPNetwork(m.group('subnets')))
|
49 |
final_routes = [] |
50 |
if len(routes4): |
51 |
final_routes4 = collapse_address_list(routes4) |
52 |
if len(routes6): |
53 |
final_routes6 = collapse_address_list(routes6) |
54 |
final_routes = final_routes4 + final_routes6 |
55 |
return final_routes
|
56 |
|
57 |
def whois(queryas): |
58 |
routes = query(queryas,settings.PRIMARY_WHOIS, None)
|
59 |
if not routes: |
60 |
routes = query(queryas,settings.ALTERNATE_WHOIS, None)
|
61 |
return routes
|