From 50ccd97d6c20667c3a03aa41c0b26d3ac4d5eec9 Mon Sep 17 00:00:00 2001 From: recyvan Date: Tue, 26 Nov 2024 15:37:43 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81ip=E5=9C=B0=E5=9D=80=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=EF=BC=8C=E5=B1=80=E5=9F=9F=E7=BD=91=E8=AE=BF=E9=97=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entity/Letter.py | 3 --- recv/recv.py | 2 ++ recv/recv_net.py | 58 ++++++++++++++++++++++++++++++-------------- sender/sender.py | 3 +-- sender/sender_net.py | 55 ++++++++++++++++++++++++++++++++--------- tool/PriKeyHelper.py | 1 - 6 files changed, 87 insertions(+), 35 deletions(-) diff --git a/entity/Letter.py b/entity/Letter.py index e90fde7..32676b0 100644 --- a/entity/Letter.py +++ b/entity/Letter.py @@ -22,9 +22,6 @@ class Letter: "fileBase64": self.fileBase64 } - - - def json_to_obj(json_str): new_obj= Letter() new_obj.sign = json_str["sign"] diff --git a/recv/recv.py b/recv/recv.py index ee4a775..2c5acf5 100644 --- a/recv/recv.py +++ b/recv/recv.py @@ -23,6 +23,8 @@ def handleLetter(letter: Letter): # 解析信件 确认收信人 # 获取自身key pki = PriKeyHelper.getUserKey() + print("pki is: ",pki[1]) + print("letter.recvPubKey is: ",letter.recvPubKey) if pki[1] != letter.recvPubKey: raise Exception("信件不属于自己") # 用自己的私钥解密key 获得对称加密秘钥。 diff --git a/recv/recv_net.py b/recv/recv_net.py index 86830c4..4d9ca7a 100644 --- a/recv/recv_net.py +++ b/recv/recv_net.py @@ -28,13 +28,13 @@ from sender import sender # pass class recver_net(): - def __init__(self): - self.file_name = "" - self.flle_size = 0 - self.file_sha256 = "" - self.addr = ("", 0) + def __init__(self,port,client_host,client_port): + self.client_host = client_host + self.client_port = client_port + self.letter = Letter() + self.port=port self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - self.server.bind(('127.0.0.1', 8425)) + self.server.bind(('0.0.0.0', self.port)) self.server.listen(10) def recver_thread(self): @@ -43,25 +43,26 @@ class recver_net(): data = conn.recv(10240) msg = json.loads(data.decode()) if int(msg['flag']) == 0: - print("\nhaved received data:" + msg["data"]) + print("[+] haved received data:" + msg["data"]) elif int(msg['flag']) == 1: self.recv_file(msg['data']) else: - print("Error") + print("[x] Error") def send_thread(self, conn): while True: flag: int = int(input("")) if flag == 0: - data = input("Enter data to send: ") + data = input("[-] Enter data to send: ") msg = {"flag": 0, "data": data} msg = json.dumps(msg).encode("utf-8") self.send_data(conn, msg) elif flag == 1: + print("[+] Calling file transfer module...") # file_name = input("Enter file name to send: ") self.send_file(conn) else: - print("Error,plesae enter 0 to send data, or 1 to send file.") + print("[x] Error,plesae enter 0 to send data, or 1 to send file.") def send_data(self, conn, data): conn.sendall(data) @@ -82,8 +83,6 @@ class recver_net(): return data.decode() def recv_file(self, data): - print(data) - print("+++++++++++++++++++++++++++") letter: Letter = json_to_obj(data) recv.handleLetter(letter) @@ -92,13 +91,13 @@ class recver_net(): while True: try: client = socket.socket() # 定义协议类型,相当于生命socket类型,同时生成socket连接对象 - client.connect(('127.0.0.1', 8424)) - print("Connected...") - print("if you want to send data, enter 0, if you want to send file, enter 1.") + client.connect((self.client_host, self.client_port)) + print("[*] Connected...") + print("[*] if you want to send data, enter 0, if you want to send file, enter 1.") sleep(1) break except socket.error: - print("Waiting for ...") + print("[*] Waiting for ...") # 加入线程 threading.Thread(target=self.recver_thread, ).start() threading.Thread(target=self.send_thread, args=(client,)).start() @@ -106,8 +105,31 @@ class recver_net(): def run(self): threading.Thread(target=self.main).start() - +def input_verify(): + while True: + try: + port = int(input("[*] Enter to the listen port: ")) + break + except ValueError: + print("[x] Error, please enter a valid port number.") + + while True: + addr = input("[*] Enter the address to connect to(127.0.0.1:8424): ") + if ':' in addr: + client_host, client_port = addr.split(":") + if client_host and client_port.isdigit(): + client_port = int(client_port) + if 0 <= client_port <= 65535: # 检查端口范围 + break # 输入有效,跳出循环 + else: + print("Port must be between 0 and 65535.") + else: + print("Invalid address format. Please enter in the format 'host:port'.") + else: + print("Invalid address format. Please enter in the format 'host:port'.") + return port, client_host, client_port # test if __name__ == '__main__': - a = recver_net() + port, client_host, client_port = input_verify() + a = recver_net(port, client_host, client_port) a.run() diff --git a/sender/sender.py b/sender/sender.py index 4f02093..476ecc6 100644 --- a/sender/sender.py +++ b/sender/sender.py @@ -6,7 +6,6 @@ import os from entity.Letter import Letter -from itsdangerous import base64_encode from tool import PriKeyHelper from tool.PriKeyHelper import getUserKey from tool.asymmetric import RSA @@ -43,7 +42,7 @@ def main(): letter.fileName = getFileName(path) letter.recvPubKey = getRecvPubKey() letter.senderPubKey = getSenderPubKey() - letter.fileBase64, akey = SymEncryption(base64_encode(data).decode("utf-8"),letterSymKey) + letter.fileBase64, akey = SymEncryption(base64.b64encode(data).decode("utf-8"),letterSymKey) letter.encryptKey = getEncryptKey() letter.encryptType = getEncryptType() diff --git a/sender/sender_net.py b/sender/sender_net.py index 79ec71d..b99df16 100644 --- a/sender/sender_net.py +++ b/sender/sender_net.py @@ -26,10 +26,13 @@ from recv import recv # pass class sender_net(): - def __init__(self): + def __init__(self,port=8424,client_host='127.0.0.1',client_port=8424): + self.client_host = client_host + self.client_port = client_port self.letter = Letter() + self.port=port self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - self.server.bind(('127.0.0.1', 8424)) + self.server.bind(('0.0.0.0', self.port)) self.server.listen(10) @@ -39,25 +42,26 @@ class sender_net(): data = conn.recv(10240) msg = json.loads(data.decode()) if int(msg['flag']) == 0: - print("\nhaved received data:" + msg["data"]) + print("[+] haved received data:" + msg["data"]) elif int(msg['flag']) == 1: self.recv_file(msg['data']) else: - print("Error") + print("[x] Error") def send_thread(self, conn): while True: flag: int = int(input()) if flag == 0: - data = input("Enter data to send: ") + data = input("[-] Enter data to send: ") msg = {"flag": 0, "data": data} msg = json.dumps(msg).encode("utf-8") self.send_data(conn, msg) elif flag == 1: + print("[+] Calling file transfer module...") # file_name = input("Enter file name to send: ") self.send_file(conn) else: - print("Error,plesae enter 0 to send data, or 1 to send file.") + print("[x] Error,plesae enter 0 to send data, or 1 to send file.") def send_data(self, conn, msg): conn.sendall(msg) @@ -90,19 +94,48 @@ class sender_net(): while True: try: client = socket.socket() # 定义协议类型,相当于生命socket类型,同时生成socket连接对象 - client.connect(('127.0.0.1', 8425)) - print(" Connected...") - print("if you want to send data, enter 0, if you want to send file, enter 1.") + client.connect((self.client_host, self.client_port)) + print(" [*] Connected...") + print("[*] if you want to send data, enter 0, if you want to send file, enter 1.") sleep(1) break except socket.error: - print("Waiting for ...") + print("[*] Waiting for ...") #加入线程 threading.Thread(target=self.recver_thread, ).start() threading.Thread(target=self.send_thread, args=(client,)).start() + +def input_verify(): + while True: + try: + port = int(input("[*] Enter to the listen port: ")) + break + except ValueError: + print("[x] Error, please enter a valid port number.") + + while True: + addr = input("[*] Enter the address to connect to(127.0.0.1:8424): ") + if ':' in addr: + client_host, client_port = addr.split(":") + if client_host and client_port.isdigit(): + client_port = int(client_port) + if 0 <= client_port <= 65535: # 检查端口范围 + break # 输入有效,跳出循环 + else: + print("Port must be between 0 and 65535.") + else: + print("Invalid address format. Please enter in the format 'host:port'.") + else: + print("Invalid address format. Please enter in the format 'host:port'.") + return port, client_host, client_port + + #test if __name__ == '__main__': - a = sender_net() + + + port, client_host, client_port = input_verify() + a = sender_net(port, client_host, client_port) a.run() diff --git a/tool/PriKeyHelper.py b/tool/PriKeyHelper.py index 63b12d3..9fc0a53 100644 --- a/tool/PriKeyHelper.py +++ b/tool/PriKeyHelper.py @@ -10,7 +10,6 @@ def getUserKey() -> (str, str): # 返回base64编码 if not os.path.exists(config.priKeySavePath) or not os.path.exists(config.pubKeySavePath): # 生成新的密钥对 RSA.generate_keys(config.priKeySavePath,config.pubKeySavePath) - # 读取私钥 with open(config.priKeySavePath, "rb") as f: data = f.read()