vftfnn commited on
Commit
38f9692
·
verified ·
1 Parent(s): 30b6ff3

temp egress probe

Browse files
Files changed (3) hide show
  1. Dockerfile +3 -0
  2. README.md +2 -7
  3. app.py +25 -0
Dockerfile ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ FROM python:3.12-slim
2
+ COPY app.py /app.py
3
+ CMD ["python", "/app.py"]
README.md CHANGED
@@ -1,10 +1,5 @@
1
  ---
2
- title: Test
3
- emoji: 🐠
4
- colorFrom: yellow
5
- colorTo: red
6
  sdk: docker
7
- pinned: false
8
  ---
9
-
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
+ title: probe
 
 
 
3
  sdk: docker
4
+ app_port: 7860
5
  ---
 
 
app.py ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # 临时出口探针:只转发到 mp-staging.kaggle.net / ipinfo.io,Kaggle key 放 X-Kaggle-Auth
2
+ import json, os, hmac, urllib.request, urllib.error
3
+ from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
4
+ ALLOWED = ("https://mp-staging.kaggle.net/", "https://ipinfo.io/")
5
+ class H(BaseHTTPRequestHandler):
6
+ def _go(self, method):
7
+ if not hmac.compare_digest(self.headers.get("X-Probe", ""), os.environ.get("PROBE_SECRET", "-")):
8
+ self.send_response(401); self.end_headers(); return
9
+ target = self.headers.get("X-Target", "")
10
+ if not target.startswith(ALLOWED):
11
+ self.send_response(404); self.end_headers(); return
12
+ body = self.rfile.read(int(self.headers.get("Content-Length") or 0)) if method == "POST" else None
13
+ hdr = {"Content-Type": "application/json"}
14
+ if self.headers.get("X-Kaggle-Auth"): hdr["Authorization"] = self.headers["X-Kaggle-Auth"]
15
+ req = urllib.request.Request(target, data=body, headers=hdr, method=method)
16
+ try:
17
+ with urllib.request.urlopen(req, timeout=90) as r: code, data = r.status, r.read()
18
+ except urllib.error.HTTPError as e: code, data = e.code, e.read()
19
+ except Exception as e: code, data = 599, str(e).encode()
20
+ self.send_response(code); self.send_header("Content-Type", "application/json"); self.end_headers(); self.wfile.write(data)
21
+ def do_GET(self):
22
+ if self.path == "/": self.send_response(200); self.end_headers(); self.wfile.write(b"ok"); return
23
+ self._go("GET")
24
+ def do_POST(self): self._go("POST")
25
+ ThreadingHTTPServer(("0.0.0.0", 7860), H).serve_forever()