geely-kaipiao/proxy/proxy_server.py
2026-05-24 21:21:14 +08:00

87 lines
2.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import socket
import threading
import select
TARGET_HOST = 'superstar.geelytravel.com'
TARGET_PORT = 443
LISTEN_PORT = 8080
b_device_socket = None
client_socket = None
def handle_b_device(conn):
"""处理B设备的连接"""
global b_device_socket
b_device_socket = conn
print(f"B设备已连接: {conn.getpeername()}")
try:
while True:
data = conn.recv(4096)
if not data:
print("B设备断开连接")
b_device_socket = None
break
if client_socket:
try:
client_socket.send(data)
except:
pass
except Exception as e:
print(f"B设备连接出错: {e}")
b_device_socket = None
def handle_client(conn):
"""处理用户请求"""
global client_socket
client_socket = conn
print(f"用户连接: {conn.getpeername()}")
try:
while True:
data = conn.recv(4096)
if not data:
print("用户断开连接")
client_socket = None
break
if b_device_socket:
try:
b_device_socket.send(data)
except:
conn.send(b"HTTP/1.1 503 Service Unavailable\r\n\r\nDevice B not connected")
break
else:
conn.send(b"HTTP/1.1 503 Service Unavailable\r\n\r\nDevice B not connected")
break
except Exception as e:
print(f"用户连接出错: {e}")
client_socket = None
def run_server():
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.bind(('0.0.0.0', LISTEN_PORT))
server.listen(5)
print(f"A设备代理服务器已启动监听端口 {LISTEN_PORT}")
print(f"等待B设备连接和用户请求...")
while True:
conn, addr = server.accept()
print(f"新连接: {addr}")
# 判断是B设备还是用户简单判断先连接的是B设备
if b_device_socket is None:
# 第一个连接作为B设备
t = threading.Thread(target=handle_b_device, args=(conn,))
t.start()
else:
# 后续连接作为用户
t = threading.Thread(target=handle_client, args=(conn,))
t.start()
if __name__ == '__main__':
run_server()