以下是一个简单的 TCP 代理服务器的代码示例。这个代理服务器会监听指定的端口,接受客户端连接,并将客户端的数据转发到远程服务器,然后将远程服务器的响应返回给客户端。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| import socket import threading
def proxy_handler(client_socket, remote_host, remote_port): remote_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) remote_socket.connect((remote_host, remote_port))
def forward_data(source, destination): while True: data = source.recv(4096) if not data: break destination.send(data)
client_thread = threading.Thread(target=forward_data, args=(client_socket, remote_socket)) remote_thread = threading.Thread(target=forward_data, args=(remote_socket, client_socket))
client_thread.start() remote_thread.start()
def main(): local_host = '0.0.0.0' local_port = 6666
remote_host = 'www.google.com' remote_port = 80
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind((local_host, local_port)) server.listen(5) print(f'[*] Listening on {local_host}:{local_port}')
while True: client_socket, client_addr = server.accept() print(f'[*] Accepted connection from: {client_addr[0]}:{client_addr[1]}')
proxy_thread = threading.Thread(target=proxy_handler, args=(client_socket, remote_host, remote_port)) proxy_thread.start()
if __name__ == '__main__': main()
|
在这个示例中:
proxy_handler(client_socket, remote_host, remote_port) 函数用于处理代理连接,将数据从客户端传递给远程服务器,同时也从远程服务器传递数据回客户端。
forward_data(source, destination) 函数用于将数据从源套接字传递到目标套接字,以实现数据转发。
main() 函数用于创建服务器套接字,监听指定的本地 IP 和端口,然后循环接受客户端连接并启动代理线程。
请注意,这个示例是一个简单的 TCP 代理,实际应用中可能需要更多的错误处理、安全性考虑以及对数据的处理和修改。在使用这个代码示例时,务必遵守适用法律和法规,并确保你有权限进行代理操作。
一个简单的tcp客户端
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| import socket
target_host = "192.168.233.129" target_port = 6666
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((target_host, target_port))
client.send(b"GET / HTTP/1.1\r\nHost: google.com\r\n\r\n")
response = client.recv(4096)
print(response.decode()) client.close() ~
|