Для школьного проекта я делаю прокси-сервер, который блокирует нежелательные веб-сайты, используя белый список (должен быть белым) в 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()
Клиент открывает соединения для незаблокированного веб-сайта, но домен, к которому он запрашивает подключение, заблокирован.