From 9dcb07e996853592c9c62fef496eec22144dd3d7 Mon Sep 17 00:00:00 2001 From: Jeffrey Forman Date: Mon, 26 Nov 2012 22:05:44 -0500 Subject: [PATCH] Display IP address along side server name in server list --- binder/helpers.py | 18 ++++++++++++++++++ binder/templates/bcommon/list_servers.htm | 12 ++++++++++-- binder/views.py | 6 +++++- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/binder/helpers.py b/binder/helpers.py index 004203b..fc6ffeb 100644 --- a/binder/helpers.py +++ b/binder/helpers.py @@ -4,6 +4,7 @@ import dns.query import dns.reversename import dns.update import dns.tsig +import socket import re def add_record(dns_server, zone_name, record_name, record_type, record_data, ttl, key_name, create_reverse=False): @@ -106,3 +107,20 @@ def update_record(dns_server, zone_name, record_name, record_type, record_data, output = dns.query.tcp(dns_update, dns_server) return output + +def ip_info(host_name): # , family_dict, socket_dict): + """Create a dictionary mapping address types to their IP's. + If an error is encountered, key to error is "Error". + """ + info = {} + + try: + for s_family, s_type, s_proto, s_cannoname, s_sockaddr in socket.getaddrinfo(host_name.hostname, None): + if s_family == 2 and s_type == 1: + info["IPv4"] = s_sockaddr[0] + if s_family == 10 and s_type == 1: + info["IPv6"] = s_sockaddr[0] + except socket.gaierror, err: + info["Error"] = "Unable to resolve %s: %s" % (host_name, err) + + return info diff --git a/binder/templates/bcommon/list_servers.htm b/binder/templates/bcommon/list_servers.htm index 0f0039f..fcf9cca 100644 --- a/binder/templates/bcommon/list_servers.htm +++ b/binder/templates/bcommon/list_servers.htm @@ -7,9 +7,17 @@ Server List {% block body %} -{% for current_server in server_list %} - + + + +{% for current_server in server_info %} + + + {% endfor %}
{{ current_server }}HostnameIP Address
{{ current_server.host_name }}{% for key, value in current_server.ip_address.items %} + {{key}}: {{value}}
+ {% endfor %} +
diff --git a/binder/views.py b/binder/views.py index 812c033..da20c28 100644 --- a/binder/views.py +++ b/binder/views.py @@ -11,8 +11,12 @@ def home_index(request): def view_server_list(request): """ List the DNS servers configured in the database. """ server_list = models.BindServer.objects.all().order_by("hostname") + server_info = [] + for current in server_list: + server_info.append({"host_name" : current, "ip_address" : helpers.ip_info(current)}) + return render(request, "bcommon/list_servers.htm", - { "server_list" : server_list}) + { "server_info" : server_info}) def view_server_zones(request, dns_server): """ Display the list of DNS zones a particular DNS host provides. """