Esempio n. 1
0
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()
Esempio n. 2
0
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()
Esempio n. 3
0
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)