Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
mxrch
GitHub Repository: mxrch/GHunt
Path: blob/master/ghunt/helpers/listener.py
252 views
1
import os
2
from http.server import BaseHTTPRequestHandler, HTTPServer
3
from typing import *
4
5
from ghunt.objects.base import SmartObj
6
7
8
class DataBridge(SmartObj):
9
def __init__(self):
10
self.data = None
11
12
class Server(BaseHTTPRequestHandler):
13
def _set_response(self):
14
self.send_response(200)
15
self.send_header('Content-type', 'text/html')
16
self.send_header('Access-Control-Allow-Origin','*')
17
self.end_headers()
18
19
def do_GET(self):
20
if self.path == "/ghunt_ping":
21
self._set_response()
22
self.wfile.write(b"ghunt_pong")
23
24
def do_POST(self):
25
if self.path == "/ghunt_feed":
26
content_length = int(self.headers['Content-Length']) # <--- Gets the size of data
27
post_data = self.rfile.read(content_length) # <--- Gets the data itself
28
self.data_bridge.data = post_data.decode('utf-8')
29
30
self._set_response()
31
self.wfile.write(b"ghunt_received_ok")
32
33
def log_message(self, format, *args):
34
return
35
36
def run(server_class=HTTPServer, handler_class=Server, port=60067):
37
server_address = ('127.0.0.1', port)
38
handler_class.data_bridge = DataBridge()
39
server = server_class(server_address, handler_class)
40
try:
41
print(f"GHunt is listening on port {port}...")
42
43
while True:
44
server.handle_request()
45
if handler_class.data_bridge.data:
46
break
47
48
except KeyboardInterrupt:
49
print("[-] Exiting...")
50
exit(os.CLD_KILLED)
51
else:
52
if handler_class.data_bridge.data:
53
print("[+] Received cookies !")
54
return handler_class.data_bridge.data
55