一个简单的TCP代理

以下是一个简单的 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' # 本地监听的 IP 地址
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) # 监听连接,最大允许 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() # 启动主函数

在这个示例中:

  1. proxy_handler(client_socket, remote_host, remote_port) 函数用于处理代理连接,将数据从客户端传递给远程服务器,同时也从远程服务器传递数据回客户端。
  2. forward_data(source, destination) 函数用于将数据从源套接字传递到目标套接字,以实现数据转发。
  3. 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

# create a socket object
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# connect the client
client.connect((target_host, target_port))

# send some data
client.send(b"GET / HTTP/1.1\r\nHost: google.com\r\n\r\n")

response = client.recv(4096)

print(response.decode())
client.close()
~

一个简单的TCP代理
http://example.com/2023/08/11/一个简单的TCP代理/
Author
John Doe
Posted on
August 11, 2023
Licensed under