Прокси-сервер Python, блокирующий нежелательные веб-сайты - веб-сайт отображается не полностью - PullRequest
0 голосов
/ 25 января 2019

Для школьного проекта я делаю прокси-сервер, который блокирует нежелательные веб-сайты, используя белый список (должен быть белым) в python.У меня проблема с тем, что некоторые незаблокированные веб-сайты, содержащие контент с других заблокированных доменов (например, рекламу или изображения), не отображаются.Могу ли я узнать, что соединения были получены с незаблокированного веб-сайта и не блокировать их?

def threaded(client_socket):
    my_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    request = b'Test'
    response = b'Test'
    check = False
    try:
        while len(request) > 0 or len(response) > 0:
            # data received from client
            print("Request: ")
            request = get_data(client_socket)
            web_server, port, command = analyze_request(request)
            if check_whitelist(web_server) or check:
                check = True
                if port != -1:
                    my_socket = connect_to_server(web_server, port)
                    if command.lower() == "connect":
                        handle_connect_command(client_socket, my_socket)
                        break
                    else:
                        send_data(my_socket, request)
                        print("Response: ")
                        response = get_data(my_socket)
                        my_socket.close()
                        send_data(client_socket, response)
                break
            else:
                html_message = open("message.html", "r").read()
                if command.lower() == "connect":
                    send_data(client_socket, b'HTTP/1.1 200 OK\r\n\r\n')
                    get_data(client_socket)
                send_data(client_socket, b'HTTP/1.1 200 OK\r\nContent-Length: ' + bytes([len(html_message)])\
                           + b'\r\nContent-Type: text/html; charset=utf-8\r\n\r\n' + html_message.encode('utf-8'))
                request = b''
                response = b''
    except Exception as e:
        print("6:" + str(e))
    # connection closed
    print("Connection closed")
    client_socket.close()
    my_socket.close()

def start_server():
    # Shutdown on Ctrl+C
    #signal.signal(signal.SIGINT, signal.CTRL_C_EVENT)

    # Create a TCP socket
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # Re-use the socket
    # server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

    # bind the socket to a public host, and a port
    server_socket.bind(('0.0.0.0', 1729))
    server_socket.listen(5)  # become a server socket
    print ("Server listening on port 1729")

    while True:
        # establish connection with client
        (client_socket, client_address) = server_socket.accept()
        client_socket.settimeout(5)
        # Start a new thread and return its identifier
        t = threading.Thread(target=threaded, args=(client_socket,))
        t.start()

Клиент открывает соединения для незаблокированного веб-сайта, но домен, к которому он запрашивает подключение, заблокирован.

...