HTTP Proxy – эффективный способ защиты вашей онлайн-активности
HTTP прокси (HTTP proxy) – это сервер, который обеспечивает просмотр и анализ трафика, передаваемого между клиентом и главным сервером в Интернете. Прокси-серверы используются для повышения безопасности пользователей и сбора статистической информации о поиске и просмотре информации в Интернете.
Пример кода на языке Python для создания HTTP прокси-сервера:
python
import socket
server_address = ('localhost', 8000)
MAX_REQUEST_SIZE = 4096
def proxy_server():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(server_address)
s.listen(1)
print('Proxy server started at %s:%d' % server_address)
while True:
client_sock, client_address = s.accept()
print('Client connected %s:%d' % client_address)
request = client_sock.recv(MAX_REQUEST_SIZE)
print(request.decode())
# разбираем запрос
first_line = request.split(b'\r\n')[0]
url = first_line.split(b' ')[1]
# проверяем метод запроса
if b'CONNECT' in first_line:
# если метод CONNECT, соединяемся напрямую с сервером
remote_host, remote_port = url.split(b':')
remote_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
remote_sock.connect((remote_host, int(remote_port)))
client_sock.send(b'HTTP/1.0 200 Connection established\r\n\r\n')
# начинаем обмен данными
while True:
data = client_sock.recv(MAX_REQUEST_SIZE)
if not data:
break
remote_sock.send(data)
data = remote_sock.recv(MAX_REQUEST_SIZE)
if not data:
break
client_sock.send(data)
remote_sock.close()
else:
# проксируем запрос на главный сервер
parts = url.split(b'/')
protocol = parts[0].lower()
host = parts[2].decode()
path = b'/' + b'/'.join(parts[3:])
main_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
main_server.connect((host, 80))
main_server.send(request)
while True:
data = main_server.recv(MAX_REQUEST_SIZE)
if not data:
break
client_sock.send(data)
main_server.close()
client_sock.close()
if __name__ == '__main__':
proxy_server()
Данный пример кода создает HTTP прокси-сервер, который может работать в двух режимах:
- проксирование запроса на главный сервер;
- установление прямого соединения с сервером через метод CONNECT.
Кроме того, сервер принимает запросы от клиентов, а затем пересылает их на главный сервер, протоколируя весь процесс на консоли.
Данный пример кода позволяет дополнить его различными опциями для управления прокси-сервером, например авторизацией или блокировкой определенных сайтов. Такой подход может быть полезен для различных сценариев использования, например для обеспечения безопасности информации, контроля за использованием Интернета на рабочих местах и т.д.