From 8131595d0238d6167b573384ae20f416e57f2611 Mon Sep 17 00:00:00 2001 From: Smart-SangGe <2251250136@qq.com> Date: Sun, 19 Mar 2023 10:13:45 +0800 Subject: [PATCH] modified: README.md new file: client/dnssender.py new file: client/main.py new file: database/dns.db new file: database/initdb.py new file: server/main.py new file: server/xiaomiandns.py --- README.md | 3 +- client/dnssender.py | 22 +++++ client/main.py | 51 +++++++++++ database/dns.db | Bin 0 -> 12288 bytes database/initdb.py | 13 +++ server/main.py | 10 +++ server/xiaomiandns.py | 200 ++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 298 insertions(+), 1 deletion(-) create mode 100644 client/dnssender.py create mode 100644 client/main.py create mode 100644 database/dns.db create mode 100644 database/initdb.py create mode 100644 server/main.py create mode 100644 server/xiaomiandns.py diff --git a/README.md b/README.md index f673691..d12fa32 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ ## 项目原理 -本项目目标是实现一层代理 + dns 解析自定义域名.xiaomian + 搭建匿名网站。 +本项目目标是实现三层代理 + dns 解析自定义域名.xiaomian + 搭建匿名网站。 server路径下包含一个目录服务器,用于创建目录服务器,记录加入节点。 client路径下是客户端程序,客户端程序通过访问目录服务器获取当前的路由,并通过随机路由算法选择代理节点。 本项目选择sqlite作为数据库,存储节点信息等数据。 @@ -13,6 +13,7 @@ client路径下是客户端程序,客户端程序通过访问目录服务器 该项目依赖以下软件: python 3.11 +sqlite3 ## 安装步骤 diff --git a/client/dnssender.py b/client/dnssender.py new file mode 100644 index 0000000..4a689f4 --- /dev/null +++ b/client/dnssender.py @@ -0,0 +1,22 @@ +import dns.resolver + + +def resolver(domain): + # 构造 DNS 查询请求 + qtype = 'A' + + # 发送 DNS 查询请求 + resolver = dns.resolver.Resolver() + resolver.nameservers = ["127.0.0.1"] + + try: + ip = resolver.resolve(domain, qtype)[0] + return ip + except dns.resolver.NXDOMAIN: + print("can't find IP") + + +if __name__ = "__main__": + domain = 'mamahaha.work' + ip = resolver(domain) + print(ip) \ No newline at end of file diff --git a/client/main.py b/client/main.py new file mode 100644 index 0000000..92b7721 --- /dev/null +++ b/client/main.py @@ -0,0 +1,51 @@ +from cryptography.hazmat.primitives.asymmetric import rsa, padding +from cryptography.hazmat.primitives import serialization, hashes +import random + +# 生产随机域名 +def generate_domain(): + domain = random.getrandbits(64) + domain = hex(domain)[2:] + return domain + ".xiaomian" + + +# Generate a new RSA key pair +private_key = rsa.generate_private_key( + public_exponent=65537, + key_size=2048 +) +public_key = private_key.public_key() + +# Convert the public key to bytes +public_key_bytes = public_key.public_bytes( + encoding=serialization.Encoding.PEM, + format=serialization.PublicFormat.SubjectPublicKeyInfo +) + +# Encrypt a message using the public key +message = b"Hello World" +encrypted_message = public_key.encrypt( + message, + padding.OAEP( + mgf=padding.MGF1(algorithm=hashes.SHA256()), + algorithm=hashes.SHA256(), + label=None + ) +) + +# Decrypt the message using the private key +decrypted_message = private_key.decrypt( + encrypted_message, + padding.OAEP( + mgf=padding.MGF1(algorithm=hashes.SHA256()), + algorithm=hashes.SHA256(), + label=None + ) +) +print(decrypted_message) + + +if __name__ == '__main__': + print("Welcome to my xiaomiao tor network") + domain = generate_domain() + print(domain) diff --git a/database/dns.db b/database/dns.db new file mode 100644 index 0000000000000000000000000000000000000000..a8e3ee54f5d073d2bffa8d0da9620a9430a36383 GIT binary patch literal 12288 zcmeI$&r8EF6bJB^R{RAcyX_=A=%ETy=&EJZFTE#SN}Bs6#s%< zJ(>;%^|bTk`;tfU8XCywmfYQrbe;2aH7!)l0d+|Tx?m$*`Aw!HAOHafKmY;|fB*y_009U<00I!$R)Hg7 zyKbQh^