Message: Internal Server Error.
\n Error code explanation: 500 - Server got itself in trouble.
\n \n", "exit_code": 0, "error": null}
Assistant
{"output": "#!/usr/bin/env python3\n\"\"\"\nSimple DNS-over-HTTPS to DNS converter.\nSupports both wire format and JSON format.\n\"\"\"\nimport sys\nimport socket\nimport struct\nimport base64\nimport json\nfrom http.server import HTTPServer, BaseHTTPRequestHandler\nfrom urllib.parse import urlparse, parse_qs\n\nUPSTREAM_DNS = (\"127.0.0.1\", 53)\n\nDNS_TYPES = {\n \"A\": 1, \"AAAA\": 28, \"CNAME\": 5, \"MX\": 15, \"TXT\": 16,\n \"NS\": 2, \"PTR\": 12, \"SOA\": 6, \"SRV\": 33, \"CAA\": 257,\n \"1\": 1, \"28\": 28, \"5\": 5, \"15\": 15, \"16\": 16,\n \"2\": 2, \"12\": 12, \"6\": 6, \"33\": 33, \"257\": 257,\n}\n\nclass DoHHandler(BaseHTTPRequestHandler):\n def do_GET(self):\n if self.path.startswith(\"/dns-query\"):\n self.handle_doh()\n else:\n self.send_error(404)\n \n def do_POST(self):\n if not self.path.startswith(\"/dns-query\"):\n self.send_error(404)\n return\n \n content_type = self.headers.get(\"Content-Type\", \"\")\n if content_type != \"application/dns-message\":\n self.send_response(415)\n self.send_header(\"Content-Type\", \"text/plain\")\n self.send_header(\"Access-Control-Allow-Origin\", \"*\")\n self.end_headers()\n self.wfile.write(b\"Unsupported Media Type\")\n return\n \n content_length = self.headers.get(\"Content-Length\")\n if not content_length:\n self.send_error(400, \"Missing Content-Length\")\n return\n \n try:\n length = int(content_length)\n except ValueError:\n self.send_error(400, \"Invalid Content-Length\")\n return\n \n if length == 0:\n self.send_error(400, \"Empty request body\")\n return\n \n try:\n dns_query = self.rfile.read(length)\n except Exception as e:\n self.send_error(400, f\"Failed to read request body: {e}\")\n return\n \n if len(dns_query) != length:\n self.send_error(400, \"Incomplete request body\")\n return\n \n try:\n response = self.forward_dns(dns_query)\n self.send_response(200)\n self.send_header(\"Content-Type\", \"application/dns-message\")\n self.send_header(\"Access-Control-Allow-Origin\", \"*\")\n self.end_headers()\n self.wfile.write(response)\n except Exception as e:\n print(f\"Error: {e}\", file=sys.stderr)\n self.send_error(500)\n \n def handle_doh(self):\n===", "exit_code": 1, "error": null, "exit_code_meaning": "No matches found (not an error)"}
Assistant
{"output": "total 20\ndrwxr-xr-x 2 root root 4096 Aug 16 14:36 .\ndrwx------ 38 root root 4096 Sep 19 08:02 ..\n-rw-r--r-- 1 root root 8487 Aug 16 14:36 doh-server.py\n24: def do_GET(self):\n30: def do_POST(self):\n70: response = self.forward_dns(dns_query)\n80: def handle_doh(self):\n104: response = self.forward_dns(dns_query)\n121: def send_json_response(self, wire_response):\n138: def parse_dns_response(self, wire):\n187: def parse_name(self, wire, offset):\n203: def build_dns_query(self, name, qtype):\n223: def forward_dns(self, query):\n231: def log_message(self, format, *args):", "exit_code": 1, "error": null}