diff --git a/lg-proxy.py b/lg-proxy.py
index f972672..d533d87 100644
--- a/lg-proxy.py
+++ b/lg-proxy.py
@@ -20,6 +20,7 @@
###
+import sys
import logging
from logging.handlers import TimedRotatingFileHandler
from logging import FileHandler
@@ -56,21 +57,34 @@ def check_accesslist():
def traceroute():
check_accesslist()
+ if sys.platform.startswith('freebsd') or sys.platform.startswith('netbsd') or sys.platform.startswith('openbsd'):
+ traceroute4 = [ 'traceroute' ]
+ traceroute6 = [ 'traceroute6' ]
+ else: # For Linux
+ traceroute4 = [ 'traceroute', '-4' ]
+ traceroute6 = [ 'traceroute', '-6' ]
+
src = []
if request.path == '/traceroute6':
- o = "-6"
+ traceroute = traceroute6
if app.config.get("IPV6_SOURCE",""):
src = [ "-s", app.config.get("IPV6_SOURCE") ]
else:
- o = "-4"
+ traceroute = traceroute4
if app.config.get("IPV4_SOURCE",""):
src = [ "-s", app.config.get("IPV4_SOURCE") ]
query = request.args.get("q","")
query = unquote(query)
- command = [ 'traceroute' , o ] + src + [ '-A', '-q1', '-N32', '-w1', '-m15', query ]
+ if sys.platform.startswith('freebsd') or sys.platform.startswith('netbsd'):
+ options = [ '-a', '-q1', '-w1', '-m15' ]
+ elif sys.platform.startswith('openbsd'):
+ options = [ '-A', '-q1', '-w1', '-m15' ]
+ else: # For Linux
+ options = [ '-A', '-q1', '-N32', '-w1', '-m15' ]
+ command = traceroute + src + options + [ query ]
result = subprocess.Popen( command , stdout=subprocess.PIPE).communicate()[0].decode('utf-8', 'ignore').replace("\n","
")
return result
diff --git a/lg.cfg b/lg.cfg
index 29678b4..7e9bc23 100644
--- a/lg.cfg
+++ b/lg.cfg
@@ -5,6 +5,9 @@ LOG_LEVEL="WARNING"
DOMAIN = "tetaneutral.net"
+BIND_IP = "0.0.0.0"
+BIND_PORT = 5000
+
PROXY = {
"gw": 5000,
"h3": 5000,
@@ -21,4 +24,9 @@ AS_NUMBER = {
"h3" : "197422"
}
+#WHOIS_SERVER = "whois.foo.bar"
+
+# DNS zone to query for ASN -> name mapping
+ASN_ZONE = "asn.cymru.com"
+
SESSION_KEY = '\xd77\xf9\xfa\xc2\xb5\xcd\x85)`+H\x9d\xeeW\\%\xbe/\xbaT\x89\xe8\xa7'
diff --git a/lg.py b/lg.py
index a0fcc35..8f71c2d 100644
--- a/lg.py
+++ b/lg.py
@@ -29,7 +29,7 @@ from urllib import quote, unquote
import json
import random
-from toolbox import mask_is_valid, ipv6_is_valid, ipv4_is_valid, resolve, save_cache_pickle, load_cache_pickle, get_asn_from_as, unescape
+from toolbox import mask_is_valid, ipv6_is_valid, ipv4_is_valid, resolve, save_cache_pickle, load_cache_pickle, unescape
#from xml.sax.saxutils import escape
@@ -46,6 +46,15 @@ file_handler.setLevel(getattr(logging, app.config["LOG_LEVEL"].upper()))
app.logger.addHandler(file_handler)
+def get_asn_from_as(n):
+ asn_zone = app.config.get("ASN_ZONE", "asn.cymru.com")
+ try:
+ data = resolve("AS%s.%s" % (n, asn_zone) ,"TXT").replace("'","").replace('"','')
+ except:
+ return " "*5
+ return [ field.strip() for field in data.split("|") ]
+
+
def add_links(text):
"""Browser a string and replace ipv4, ipv6, as number, with a
whois link """
@@ -96,7 +105,10 @@ def set_session(request_type, hosts, proto, request_args):
def whois_command(query):
- return subprocess.Popen(['whois', query], stdout=subprocess.PIPE).communicate()[0].decode('utf-8', 'ignore')
+ server = []
+ if app.config.get("WHOIS_SERVER", ""):
+ server = [ "-h", app.config.get("WHOIS_SERVER") ]
+ return subprocess.Popen(['whois'] + server + [query], stdout=subprocess.PIPE).communicate()[0].decode('utf-8', 'ignore')
def bird_command(host, proto, query):
@@ -458,7 +470,10 @@ def show_bgpmap():
add_node(_as, fillcolor=(first and "#F5A9A9" or "white"))
- edge = add_edge(nodes[previous_as], nodes[_as] , label=hop_label, fontsize="7")
+ if hop_label:
+ edge = add_edge(nodes[previous_as], nodes[_as], label=hop_label, fontsize="7")
+ else:
+ edge = add_edge(nodes[previous_as], nodes[_as], fontsize="7")
hop_label = ""
@@ -605,4 +620,4 @@ def show_route(request_type, hosts, proto):
if __name__ == "__main__":
- app.run("0.0.0.0")
+ app.run(app.config.get("BIND_IP", "0.0.0.0"), app.config.get("BIND_PORT", 5000))
diff --git a/templates/layout.html b/templates/layout.html
index 55287e7..a5e92f0 100644
--- a/templates/layout.html
+++ b/templates/layout.html
@@ -1,6 +1,6 @@
-