From 8da58c145a2cb25fc13ce2e2aeb63ad51f52cf4b Mon Sep 17 00:00:00 2001 From: recyvan Date: Mon, 25 Nov 2024 12:56:50 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E7=BD=91=E7=BB=9C=E4=BC=A0=E8=BE=93?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E7=BA=BF=E7=A8=8B=E6=A8=A1=E5=BC=8F=EF=BC=8C?= =?UTF-8?q?=E8=BF=99=E6=A0=B7=E5=B0=B1=E5=8F=AF=E5=90=8C=E6=97=B6=E6=8E=A5?= =?UTF-8?q?=E6=94=B6=E5=92=8C=E5=8F=91=E9=80=81=E6=95=B0=E6=8D=AE=EF=BC=8C?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E5=85=88=E5=90=8E=E9=A1=BA=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- recv/recv_net.py | 108 ++++++++++++++++++++++++++++++++++++++++ sender/sender_net.py | 116 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 224 insertions(+) create mode 100644 recv/recv_net.py create mode 100644 sender/sender_net.py diff --git a/recv/recv_net.py b/recv/recv_net.py new file mode 100644 index 0000000..b6cc8af --- /dev/null +++ b/recv/recv_net.py @@ -0,0 +1,108 @@ +import hashlib +import json +import selectors +import socket +import threading +from time import sleep + +import select + + +# from entity.Letter import Letter + + +# def main(): +# # 用户输入各种数据填充letter字段 +# # 获取用户的公私钥对进行签名 +# # 使用对方的公钥进行加密 +# # 发送信件 +# pass +# +# +# def sendLetter(letter: Letter, target="192.168.195.162:8426"): +# # 向目标ip和端口发送指定的信件 +# pass + +class recver(): + def __init__(self): + self.file_name = "" + self.flle_size = 0 + self.file_sha256 = "" + self.addr = ("", 0) + self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self.server.bind(('127.0.0.1', 8425)) + self.server.listen(10) + + def recver_thread(self): + while True: + conn, addr = self.server.accept() + data = conn.recv(10240) + msg = json.loads(data.decode()) + if int(msg['flag']) == 0: + print("\nhaved received data:"+msg["data"]+"\n") + elif int(msg['flag']) == 1: + self.recv_file(msg['data']) + else: + print("Error") + + def send_thread(self, conn): + while True: + flag: int = int(input("")) + if flag == 0: + 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: + file_name = input("Enter file name to send: ") + self.send_file(conn, file_name) + else: + print("Error,plesae enter 0 to send data, or 1 to send file.") + + + def send_data(self, conn, data): + conn.sendall(data) + + def send_file(self, conn, file_name): + data = "dawwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + msg = {"flag": 1, "data": data} + msg = json.dumps(msg).encode("utf-8") + conn.sendall(msg) + + def recv_data(self, conn): + con, addr = conn.accept() + data = con.recv(1024) + if not data: + return None + # print(data.decode()) + return data.decode() + def main(self): + + while True: + try: + client = socket.socket() # 定义协议类型,相当于生命socket类型,同时生成socket连接对象 + client.connect(('127.0.0.1', 8424)) + print("Connected to recver.") + 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 recver...") + # 加入线程 + threading.Thread(target=self.recver_thread, ).start() + threading.Thread(target=self.send_thread, args=(client,)).start() + + def run(self): + threading.Thread(target=self.main).start() + + def recv_file(self, data): + with open("3.txt", 'wb') as file: + print("Receiving file data...") + file.write(data) # 写入数据到文件 + print("File received successfully.") + + +# test +if __name__ == '__main__': + a = recver() + a.run() \ No newline at end of file diff --git a/sender/sender_net.py b/sender/sender_net.py new file mode 100644 index 0000000..15f59de --- /dev/null +++ b/sender/sender_net.py @@ -0,0 +1,116 @@ +import hashlib +import json +import selectors +import socket +import threading +from time import sleep + +import select + +# from entity.Letter import Letter + + + +# def main(): +# # 用户输入各种数据填充letter字段 +# # 获取用户的公私钥对进行签名 +# # 使用对方的公钥进行加密 +# # 发送信件 +# pass +# +# +# def sendLetter(letter: Letter, target="192.168.195.162:8426"): +# # 向目标ip和端口发送指定的信件 +# pass + +class sender(): + def __init__(self): + self.file_name="" + self.flle_size=0 + self.file_sha256="" + self.addr=("",0) + self.server=socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self.server.bind(('127.0.0.1', 8424)) + self.server.listen(10) + + def recver_thread(self): + while True: + conn, addr = self.server.accept() + data = conn.recv(10240) + + msg=json.loads(data.decode()) + if int(msg['flag']) == 0: + print("\nhaved received data:"+msg["data"]+"\n") + elif int(msg['flag']) == 1: + self.recv_file(msg['data']) + else: + print("Error") + + def send_thread(self,conn): + while True: + flag:int=int(input()) + if flag==0: + 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: + file_name=input("Enter file name to send: ") + self.send_file(conn,file_name) + else: + print("Error,plesae enter 0 to send data, or 1 to send file.") + + + + + def send_data(self, conn, msg): + conn.sendall(msg) + def send_file(self, conn, file_name): + data = "dawwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + msg={"flag":1,"data":data} + msg=json.dumps(msg).encode("utf-8") + conn.sendall(msg) + + def recv_data(self,conn): + con, addr = conn.accept() + data = con.recv(1024) + if not data: + return None + # print(data.decode()) + return data.decode() + # def recv_file(self,conn): + # con, addr = conn.accept() + # with open("3.txt", 'wb') as file: + # print("Receiving file data...") + # while True: + # # 接收数据块 + # data = con.recv(2048) + # if not data: + # break # 如果没有更多数据则退出循环 + # file.write(data) # 写入数据到文件 + # print("File received successfully.") + def recv_file(self,data): + with open("3.txt", 'wb') as file: + print("Receiving file data...") + file.write(data.encode("utf-8")) # 写入数据到文件 + print("File received successfully.") + def run(self): + threading.Thread(target=self.main).start() + def main(self): + while True: + try: + client = socket.socket() # 定义协议类型,相当于生命socket类型,同时生成socket连接对象 + client.connect(('127.0.0.1', 8425)) + print("Connected to recver.") + 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 recver...") + #加入线程 + threading.Thread(target=self.recver_thread, ).start() + threading.Thread(target=self.send_thread,args=(client,)).start() +#test +if __name__ == '__main__': + a=sender() + a.run() \ No newline at end of file From b2a6196dbb28e1ff76156f808c6536aa93d16fb7 Mon Sep 17 00:00:00 2001 From: recyvan Date: Tue, 26 Nov 2024 14:51:09 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=B8=80=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entity/Letter.py | 37 +++++++++++++++++- recv/recv_net.py | 41 +++++++++++--------- sender/sender_net.py | 92 ++++++++++++++++++++------------------------ 3 files changed, 101 insertions(+), 69 deletions(-) diff --git a/entity/Letter.py b/entity/Letter.py index 5f57d59..e90fde7 100644 --- a/entity/Letter.py +++ b/entity/Letter.py @@ -1,9 +1,44 @@ +import json + + class Letter: sign = "计算得到" encryptType = "SM4_GCM" - encryptKey = "计算获得" # recvPubKey 加密后的 对称加密秘钥 数据 + encryptKey = "计算获得" # recvPubKey 加密后的 对称加密秘钥 数据 recvPubKey = "" senderPubKey = "" fileName = "" fileBase64 = "" + + def to_dict(self): + return { + "sign": self.sign, + "encryptType": self.encryptType, + "encryptKey": self.encryptKey, + "recvPubKey": self.recvPubKey, + "senderPubKey": self.senderPubKey, + "fileName": self.fileName, + "fileBase64": self.fileBase64 + } + + + + +def json_to_obj(json_str): + new_obj= Letter() + new_obj.sign = json_str["sign"] + new_obj.encryptType = json_str["encryptType"] + new_obj.encryptKey = json_str["encryptKey"] + new_obj.recvPubKey = json_str["recvPubKey"] + new_obj.senderPubKey = json_str["senderPubKey"] + new_obj.fileName = json_str["fileName"] + new_obj.fileBase64 = json_str["fileBase64"] + return new_obj + +# test code +if __name__ == '__main__': + letter = Letter() + # print(json.dumps(letter.to_dict(), indent=1)) + json_dict = json.loads(json.dumps(letter.to_dict())) + print(json_dict.__dir__) diff --git a/recv/recv_net.py b/recv/recv_net.py index b6cc8af..86830c4 100644 --- a/recv/recv_net.py +++ b/recv/recv_net.py @@ -7,6 +7,10 @@ from time import sleep import select +from entity.Letter import Letter, json_to_obj +import recv +from sender import sender + # from entity.Letter import Letter @@ -23,7 +27,7 @@ import select # # 向目标ip和端口发送指定的信件 # pass -class recver(): +class recver_net(): def __init__(self): self.file_name = "" self.flle_size = 0 @@ -39,7 +43,7 @@ class recver(): data = conn.recv(10240) msg = json.loads(data.decode()) if int(msg['flag']) == 0: - print("\nhaved received data:"+msg["data"]+"\n") + print("\nhaved received data:" + msg["data"]) elif int(msg['flag']) == 1: self.recv_file(msg['data']) else: @@ -54,18 +58,18 @@ class recver(): msg = json.dumps(msg).encode("utf-8") self.send_data(conn, msg) elif flag == 1: - file_name = input("Enter file name to send: ") - self.send_file(conn, file_name) + # 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.") - def send_data(self, conn, data): conn.sendall(data) - def send_file(self, conn, file_name): - data = "dawwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - msg = {"flag": 1, "data": data} + def send_file(self, conn): + self.letter: Letter = sender.main() + letter = self.letter.to_dict() + msg = {"flag": 1, "data": letter} msg = json.dumps(msg).encode("utf-8") conn.sendall(msg) @@ -76,18 +80,25 @@ class recver(): return None # print(data.decode()) return data.decode() + + def recv_file(self, data): + print(data) + print("+++++++++++++++++++++++++++") + letter: Letter = json_to_obj(data) + recv.handleLetter(letter) + def main(self): while True: try: client = socket.socket() # 定义协议类型,相当于生命socket类型,同时生成socket连接对象 client.connect(('127.0.0.1', 8424)) - print("Connected to recver.") + 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 recver...") + print("Waiting for ...") # 加入线程 threading.Thread(target=self.recver_thread, ).start() threading.Thread(target=self.send_thread, args=(client,)).start() @@ -95,14 +106,8 @@ class recver(): def run(self): threading.Thread(target=self.main).start() - def recv_file(self, data): - with open("3.txt", 'wb') as file: - print("Receiving file data...") - file.write(data) # 写入数据到文件 - print("File received successfully.") - # test if __name__ == '__main__': - a = recver() - a.run() \ No newline at end of file + a = recver_net() + a.run() diff --git a/sender/sender_net.py b/sender/sender_net.py index 15f59de..79ec71d 100644 --- a/sender/sender_net.py +++ b/sender/sender_net.py @@ -4,11 +4,13 @@ import selectors import socket import threading from time import sleep - +from entity.Letter import Letter,json_to_obj import select +import sender +from recv import recv -# from entity.Letter import Letter +# from entity.Letter import Letter # def main(): @@ -23,94 +25,84 @@ import select # # 向目标ip和端口发送指定的信件 # pass -class sender(): +class sender_net(): def __init__(self): - self.file_name="" - self.flle_size=0 - self.file_sha256="" - self.addr=("",0) - self.server=socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self.letter = Letter() + self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.server.bind(('127.0.0.1', 8424)) self.server.listen(10) + def recver_thread(self): while True: conn, addr = self.server.accept() data = conn.recv(10240) - - msg=json.loads(data.decode()) + msg = json.loads(data.decode()) if int(msg['flag']) == 0: - print("\nhaved received data:"+msg["data"]+"\n") + print("\nhaved received data:" + msg["data"]) elif int(msg['flag']) == 1: self.recv_file(msg['data']) else: print("Error") - def send_thread(self,conn): + def send_thread(self, conn): while True: - flag:int=int(input()) - if flag==0: - 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: - file_name=input("Enter file name to send: ") - self.send_file(conn,file_name) + flag: int = int(input()) + if flag == 0: + 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: + # 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.") - - - def send_data(self, conn, msg): conn.sendall(msg) - def send_file(self, conn, file_name): - data = "dawwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - msg={"flag":1,"data":data} - msg=json.dumps(msg).encode("utf-8") + + def send_file(self, conn): + self.letter: Letter = sender.main() + letter = self.letter.to_dict() + msg = {"flag": 1, "data": letter} + print(letter) + msg = json.dumps(msg).encode("utf-8") conn.sendall(msg) - def recv_data(self,conn): + def recv_data(self, conn): con, addr = conn.accept() data = con.recv(1024) if not data: return None # print(data.decode()) return data.decode() - # def recv_file(self,conn): - # con, addr = conn.accept() - # with open("3.txt", 'wb') as file: - # print("Receiving file data...") - # while True: - # # 接收数据块 - # data = con.recv(2048) - # if not data: - # break # 如果没有更多数据则退出循环 - # file.write(data) # 写入数据到文件 - # print("File received successfully.") - def recv_file(self,data): - with open("3.txt", 'wb') as file: - print("Receiving file data...") - file.write(data.encode("utf-8")) # 写入数据到文件 - print("File received successfully.") + + def recv_file(self, data): + letter: Letter = json_to_obj(data) + recv.handleLetter(letter) + + def run(self): threading.Thread(target=self.main).start() + def main(self): while True: try: client = socket.socket() # 定义协议类型,相当于生命socket类型,同时生成socket连接对象 client.connect(('127.0.0.1', 8425)) - print("Connected to recver.") + 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 recver...") + print("Waiting for ...") #加入线程 threading.Thread(target=self.recver_thread, ).start() - threading.Thread(target=self.send_thread,args=(client,)).start() + threading.Thread(target=self.send_thread, args=(client,)).start() + + #test if __name__ == '__main__': - a=sender() - a.run() \ No newline at end of file + a = sender_net() + a.run() From 5d6226290d5760fb688f5883cd5b1ae411d72da5 Mon Sep 17 00:00:00 2001 From: Timmoc Date: Tue, 26 Nov 2024 15:11:53 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E7=A6=81=E6=AD=A2dangerous?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sender/sender.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/sender/sender.py b/sender/sender.py index 4f02093..71b5142 100644 --- a/sender/sender.py +++ b/sender/sender.py @@ -6,12 +6,11 @@ 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 from tool.symmetric.AES import AESUtils -from tool.symmetric.SM4 import encrypt_ecb, decrypt_cbc_with_iv, encrypt_cbc_with_iv +from tool.symmetric.SM4 import encrypt_ecb, encrypt_cbc_with_iv from Crypto.Random import get_random_bytes @@ -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() From 50ccd97d6c20667c3a03aa41c0b26d3ac4d5eec9 Mon Sep 17 00:00:00 2001 From: recyvan Date: Tue, 26 Nov 2024 15:37:43 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E6=94=AF=E6=8C=81ip=E5=9C=B0=E5=9D=80?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F=EF=BC=8C=E5=B1=80=E5=9F=9F=E7=BD=91=E8=AE=BF?= =?UTF-8?q?=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() From dc73c10e433ddd790792ee06f03ce8cdd18b59b0 Mon Sep 17 00:00:00 2001 From: recyvan Date: Tue, 26 Nov 2024 15:48:19 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E4=B8=80?= =?UTF-8?q?=E4=B8=8B=E4=B8=8D=E7=9F=A5=E5=90=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- recv/recv_net.py | 34 ++++++++++++++++++++-------------- sender/sender_net.py | 30 ++++++++++++++++-------------- 2 files changed, 36 insertions(+), 28 deletions(-) diff --git a/recv/recv_net.py b/recv/recv_net.py index 4d9ca7a..0498554 100644 --- a/recv/recv_net.py +++ b/recv/recv_net.py @@ -28,11 +28,11 @@ from sender import sender # pass class recver_net(): - def __init__(self,port,client_host,client_port): + 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.port = port self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.server.bind(('0.0.0.0', self.port)) self.server.listen(10) @@ -51,18 +51,21 @@ class recver_net(): def send_thread(self, conn): while True: - flag: int = int(input("")) - if flag == 0: - 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("[x] Error,plesae enter 0 to send data, or 1 to send file.") + try: + flag: int = int(input()) + if flag == 0: + 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("[x] Error,plesae enter 0 to send data, or 1 to send file.") + except ValueError: + print("[x] Error, please enter a valid number.") def send_data(self, conn, data): conn.sendall(data) @@ -105,6 +108,7 @@ class recver_net(): def run(self): threading.Thread(target=self.main).start() + def input_verify(): while True: try: @@ -128,6 +132,8 @@ def input_verify(): else: print("Invalid address format. Please enter in the format 'host:port'.") return port, client_host, client_port + + # test if __name__ == '__main__': port, client_host, client_port = input_verify() diff --git a/sender/sender_net.py b/sender/sender_net.py index b99df16..60a2af7 100644 --- a/sender/sender_net.py +++ b/sender/sender_net.py @@ -50,18 +50,22 @@ class sender_net(): def send_thread(self, conn): while True: - flag: int = int(input()) - if flag == 0: - 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("[x] Error,plesae enter 0 to send data, or 1 to send file.") + try: + flag: int = int(input()) + if flag == 0: + 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("[x] Error,plesae enter 0 to send data, or 1 to send file.") + except ValueError: + print("[x] Error, please enter a valid number.") + def send_data(self, conn, msg): conn.sendall(msg) @@ -134,8 +138,6 @@ def input_verify(): #test if __name__ == '__main__': - - port, client_host, client_port = input_verify() a = sender_net(port, client_host, client_port) a.run()