lookingglass.py
· 1.8 KiB · Python
Raw
#!/usr/bin/env python3
from flask import Flask,request,make_response
from shlex import quote
from subprocess import check_output
import socket
app = Flask(__name__)
@app.route('/')
def index():
return """<form method="post" action="process">
<input type="text" name="host"><br>
<input type="radio name="service" id="ping"><label for="ping">Ping</label><br>
<input type="radio name="service" id="mtr"><label for="mtr">mtr</label><br>
<input type="submit"></form>
"""
@app.route("/process", methods=["POST"])
def process():
host,service = request.form.get("host", "8.8.8.8"),request.form.get("service","ping")
try:
# Is it an ip?
_ = socket.inet_aton(host)
except OSError:
# Well it's not ipv4,
try:
_ = socket.inet_pton(socket.AF_INET6, host)
except OSError:
# Not ipv6 either. We'll try resolving dns
try:
host = socket.gethostbyname(host)
except socket.gaierror:
return "We only support ipv4/ipv6/valid domains\n"
else:
pass # host is ipv6
else:
pass # host is ipv4
print("Processing request {},{} from {} {}".format(host, service, request.environ["REMOTE_ADDR"], request.headers.get("User-Agent")))
if service == "ping":
resp = make_response(check_output(["ping", "-i", "0.2", "-q", "-c", "4", host]))
elif service == "mtr":
resp = make_response(check_output(["mtr", "-c", "1", "--report-wide", "-m", "60", "-b", host]))
else:
return "oi"
print(" Completed request {},{} from {} {}".format(host,service, request.environ["REMOTE_ADDR"], request.headers.get("User-Agent")))
resp.headers["Content-Type"] = "text/plain"
return resp
if __name__ == "__main__":
app.run(port=5001)
| 1 | #!/usr/bin/env python3 |
| 2 | from flask import Flask,request,make_response |
| 3 | from shlex import quote |
| 4 | from subprocess import check_output |
| 5 | import socket |
| 6 | |
| 7 | app = Flask(__name__) |
| 8 | |
| 9 | @app.route('/') |
| 10 | def index(): |
| 11 | return """<form method="post" action="process"> |
| 12 | <input type="text" name="host"><br> |
| 13 | <input type="radio name="service" id="ping"><label for="ping">Ping</label><br> |
| 14 | <input type="radio name="service" id="mtr"><label for="mtr">mtr</label><br> |
| 15 | <input type="submit"></form> |
| 16 | """ |
| 17 | |
| 18 | @app.route("/process", methods=["POST"]) |
| 19 | def process(): |
| 20 | host,service = request.form.get("host", "8.8.8.8"),request.form.get("service","ping") |
| 21 | try: |
| 22 | # Is it an ip? |
| 23 | _ = socket.inet_aton(host) |
| 24 | except OSError: |
| 25 | # Well it's not ipv4, |
| 26 | try: |
| 27 | _ = socket.inet_pton(socket.AF_INET6, host) |
| 28 | except OSError: |
| 29 | # Not ipv6 either. We'll try resolving dns |
| 30 | try: |
| 31 | host = socket.gethostbyname(host) |
| 32 | except socket.gaierror: |
| 33 | return "We only support ipv4/ipv6/valid domains\n" |
| 34 | else: |
| 35 | pass # host is ipv6 |
| 36 | else: |
| 37 | pass # host is ipv4 |
| 38 | print("Processing request {},{} from {} {}".format(host, service, request.environ["REMOTE_ADDR"], request.headers.get("User-Agent"))) |
| 39 | if service == "ping": |
| 40 | resp = make_response(check_output(["ping", "-i", "0.2", "-q", "-c", "4", host])) |
| 41 | elif service == "mtr": |
| 42 | resp = make_response(check_output(["mtr", "-c", "1", "--report-wide", "-m", "60", "-b", host])) |
| 43 | else: |
| 44 | return "oi" |
| 45 | print(" Completed request {},{} from {} {}".format(host,service, request.environ["REMOTE_ADDR"], request.headers.get("User-Agent"))) |
| 46 | resp.headers["Content-Type"] = "text/plain" |
| 47 | return resp |
| 48 | |
| 49 | if __name__ == "__main__": |
| 50 | app.run(port=5001) |