def handle_socket(conn): request = Request() receive_message = conn.recv(4096) # Transform receive_message from bytes to str. receive_message = receive_message.decode('utf-8') log("receive:", receive_message) # HTTP message processing. try: # Get path and query. path = receive_message.split()[1] request.parse_path(path) # Get cookie content. request.get_cookie(receive_message) # Get method and body. request.method = receive_message.split()[0] request.body = receive_message.split('\r\n\r\n')[1] # Check if body is empty. If body is empty, treats it as a GET package. request.method = "POST" if request.body != "" else "GET" # Respond corresponding to receive route. response_message = request.response() conn.sendall(response_message) except Exception as e: log("error", e) # Close connection. log("conn end", request.method) conn.close()
def process_request(conn): r = conn.recv(1024) r = r.decode('utf-8') log("请求结束 ({})".format(r), flush=True) if len(r) < 2: conn.close() else: request = Request() # todo debug log # log("request {}".format(dir(request)), flush=True) request.method = r.split()[0] path = r.split()[1] request.add_headers(r.split("\r\n\r\n", 1)[0].split("\r\n")[1:]) request.body = r.split("\r\n\r\n", 1)[1] response = response_for_path(path, request) conn.sendall(response) log("响应完成 response {}".format(response)) conn.close()
def sniffing_function(packet): if packet.haslayer(HTTPRequest): req = Request() if packet.haslayer(IP): req.origin = packet[IP].src else: req.origin = 'localhost' req.host = urllib.parse.unquote(packet[HTTPRequest].Host.decode()) req.request = urllib.parse.unquote(packet[HTTPRequest].Path.decode()) req.method = packet[HTTPRequest].Method.decode() req.headers = get_header(packet) req.threat_type = 'None' if packet.haslayer(Raw): req.body = packet[Raw].load.decode() #print('Request') threat_clf.classify_request(req) db.save(req)