Last active
December 29, 2015 16:18
-
-
Save nemesifier/c1d7cb31831461b61ec0 to your computer and use it in GitHub Desktop.
Automatic Ninux WHOIS resolution signal for django-netjsongraph https://github.com/interop-dev/django-netjsongraph
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import socket | |
from django.db.models.signals import pre_save | |
from django.dispatch import receiver | |
from django_netjsongraph.models import Node | |
def whois(query, hostname='chi.ninux.org'): | |
""" | |
Retrieve node information from Ninux.org WHOIS service | |
""" | |
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | |
s.connect((hostname, 43)) | |
s.send('{0}\r\n'.format(query).encode('utf8')) | |
response = '' | |
while True: | |
d = s.recv(4096) | |
response += d.decode('utf8') | |
if not d: | |
break | |
s.close() | |
fields = {} | |
for line in response.split('\n'): | |
if ':' not in line or line.startswith('%'): | |
continue | |
parts = line.split(': ') | |
key = parts[0].strip() | |
value = ''.join(parts[1:]).strip() | |
if value in ['-', 'xxx', '', '--', '---']: | |
continue | |
fields[key] = value | |
return fields | |
@receiver(pre_save, sender=Node, dispatch_uid='resolve_node') | |
def resolve_node(sender, instance, **kwargs): | |
whois_fields = whois(instance.netjson_id) | |
# determine label | |
label_keys = ['node', 'posizione-zona', 'map-server', 'name'] | |
for key in label_keys: | |
label = whois_fields.get(key) | |
if label: | |
instance.label = label | |
break | |
# store interesting properties for visualization purposes | |
interesting_keys = ['posizione-zona', | |
'technical-contact', | |
'name', | |
'essid', | |
'apparato'] | |
for key in interesting_keys: | |
if key in whois_fields: | |
instance.properties[key] = whois_fields[key] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment