modified: client/main.py
modified: node/main.py new file: node/proxy.py modified: server/main.py
This commit is contained in:
parent
f05335c44e
commit
435c534e9d
@ -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()
|
||||
|
@ -0,0 +1,2 @@
|
||||
import yaml
|
||||
|
55
node/proxy.py
Normal file
55
node/proxy.py
Normal 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()
|
@ -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()
|
||||
|
Loading…
x
Reference in New Issue
Block a user