import subprocess from urllib import unquote from bird import BirdSocket from flask import Flask, request, abort app = Flask(__name__) app.config.from_pyfile('lg-proxy.cfg') def check_accesslist(): if app.config["ACCESS_LIST"] and request.remote_addr not in app.config["ACCESS_LIST"]: abort(401) @app.route("/traceroute") @app.route("/traceroute6") def traceroute(): check_accesslist() if request.path == '/traceroute6': o= "-6" else: o = "-4" query = request.args.get("q","") query = unquote(query) command = [ 'traceroute', o, '-A', '-q1', '-w1', query] result = subprocess.Popen( command , stdout=subprocess.PIPE).communicate()[0].decode('utf-8', 'ignore').replace("\n","
") return result @app.route("/bird") @app.route("/bird6") def bird(): check_accesslist() if request.path == "/bird": b = BirdSocket(file="/var/run/bird.ctl") elif request.path == "/bird6": b = BirdSocket(file="/var/run/bird6.ctl") else: return "No bird socket selected" query = request.args.get("q","") query = unquote(query) status, result = b.cmd(query) b.close() # FIXME: use status return result if __name__ == "__main__": app.debug = True app.run("0.0.0.0")