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
|
# Convert keys to bytes
|
||||||
private_key_bytes = private_key.private_bytes(
|
private_key_bytes = private_key.private_bytes(
|
||||||
encoding=serialization.Encoding.PEM,
|
encoding=serialization.Encoding.PEM,
|
||||||
format=serialization.PrivateFormat.PKCS8,
|
format=serialization.PrivateFormat.PKCS8,
|
||||||
encryption_algorithm=serialization.NoEncryption()
|
encryption_algorithm=serialization.NoEncryption()
|
||||||
)
|
)
|
||||||
public_key_bytes = public_key.public_bytes(
|
public_key_bytes = public_key.public_bytes(
|
||||||
encoding=serialization.Encoding.PEM,
|
encoding=serialization.Encoding.PEM,
|
||||||
format=serialization.PublicFormat.SubjectPublicKeyInfo
|
format=serialization.PublicFormat.SubjectPublicKeyInfo
|
||||||
)
|
)
|
||||||
|
|
||||||
# Encode bytes as base64
|
# Encode bytes as base64
|
||||||
private_key_base64 = base64.b64encode(private_key_bytes).decode('utf-8')
|
private_key_base64 = base64.b64encode(private_key_bytes).decode('utf-8')
|
||||||
public_key_base64 = base64.b64encode(public_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
|
# # Encrypt a message using the public key
|
||||||
@ -64,4 +63,4 @@ def generate_key():
|
|||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
print("Welcome to my xiaomiao tor network")
|
print("Welcome to my xiaomiao tor network")
|
||||||
domain = generate_domain()
|
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_port = config['API']['port']
|
||||||
API_listen_host = config['API']['listen_host']
|
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()
|
DNSServer.run()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user