modified: client/main.py

modified:   node/main.py
new file:   node/proxy.py
modified:   server/main.py
This commit is contained in:
Smart-SangGe 2023-05-31 16:38:11 +08:00
parent f05335c44e
commit 435c534e9d
4 changed files with 65 additions and 9 deletions

View File

@ -23,21 +23,20 @@ def generate_key():
# Convert keys to bytes
private_key_bytes = private_key.private_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.PKCS8,
encryption_algorithm=serialization.NoEncryption()
encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.PKCS8,
encryption_algorithm=serialization.NoEncryption()
)
public_key_bytes = public_key.public_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PublicFormat.SubjectPublicKeyInfo
)
# Encode bytes as base64
# Encode bytes as base64
private_key_base64 = base64.b64encode(private_key_bytes).decode('utf-8')
public_key_base64 = base64.b64encode(public_key_bytes).decode('utf-8')
return private_key_base64,public_key_base64
return private_key_base64, public_key_base64
# # Encrypt a message using the public key
@ -64,4 +63,4 @@ def generate_key():
if __name__ == '__main__':
print("Welcome to my xiaomiao tor network")
domain = generate_domain()
private_key_base64,public_key_base64 = generate_key()
private_key_base64, public_key_base64 = generate_key()

View File

@ -0,0 +1,2 @@
import yaml

55
node/proxy.py Normal file
View File

@ -0,0 +1,55 @@
import socket
import socketserver
import struct
import select
class ThreadingTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
pass
class Socks5Handler(socketserver.BaseRequestHandler):
VERSION = 5
def handle(self):
# 客户端发送版本和方法
version, nmethods = struct.unpack('!BB', self.request.recv(2))
self.request.recv(nmethods)
# 发送版本和方法响应
self.request.sendall(struct.pack('!BB', self.VERSION, 0))
# 获取请求详情
version, cmd, _, address_type = struct.unpack('!BBBB', self.request.recv(4))
if address_type == 1: # IPv4
address = socket.inet_ntoa(self.request.recv(4))
else:
raise NotImplementedError('Only IPv4 is supported.')
port = struct.unpack('!H', self.request.recv(2))[0]
# 发送响应
self.request.sendall(struct.pack('!BBBBIH', self.VERSION, 0, 0, 1,
int(socket.inet_aton('0.0.0.0').hex(), 16), 0))
# 建立连接
if cmd == 1: # CONNECT
remote = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
remote.connect((address, port))
self.exchange_loop(self.request, remote)
else:
raise NotImplementedError('Only CONNECT is supported.')
def exchange_loop(self, client, remote):
while True:
# Simple data exchange between client and remote
rlist, _, _ = select.select([client, remote], [], [])
if client in rlist:
data = client.recv(4096)
if remote.send(data) <= 0:
break
if remote in rlist:
data = remote.recv(4096)
if client.send(data) <= 0:
break
if __name__ == '__main__':
with ThreadingTCPServer(('0.0.0.0', 1080), Socks5Handler) as server:
server.serve_forever()

View File

@ -11,5 +11,5 @@ if __name__ == '__main__':
API_port = config['API']['port']
API_listen_host = config['API']['listen_host']
DNSServer = xiaomiandns.DNSServer(listen_host, DNS_port, db_file)
DNSServer = xiaomiandns.DNSServer(DNS_listen_host, DNS_port, db_file)
DNSServer.run()