支持ip地址格式,局域网访问

sender_okToCheck
recyvan 3 months ago
parent 8227015134
commit 50ccd97d6c

@ -22,9 +22,6 @@ class Letter:
"fileBase64": self.fileBase64 "fileBase64": self.fileBase64
} }
def json_to_obj(json_str): def json_to_obj(json_str):
new_obj= Letter() new_obj= Letter()
new_obj.sign = json_str["sign"] new_obj.sign = json_str["sign"]

@ -23,6 +23,8 @@ def handleLetter(letter: Letter):
# 解析信件 确认收信人 # 解析信件 确认收信人
# 获取自身key # 获取自身key
pki = PriKeyHelper.getUserKey() pki = PriKeyHelper.getUserKey()
print("pki is: ",pki[1])
print("letter.recvPubKey is: ",letter.recvPubKey)
if pki[1] != letter.recvPubKey: if pki[1] != letter.recvPubKey:
raise Exception("信件不属于自己") raise Exception("信件不属于自己")
# 用自己的私钥解密key 获得对称加密秘钥。 # 用自己的私钥解密key 获得对称加密秘钥。

@ -28,13 +28,13 @@ from sender import sender
# pass # pass
class recver_net(): class recver_net():
def __init__(self): def __init__(self,port,client_host,client_port):
self.file_name = "" self.client_host = client_host
self.flle_size = 0 self.client_port = client_port
self.file_sha256 = "" self.letter = Letter()
self.addr = ("", 0) self.port=port
self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 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) self.server.listen(10)
def recver_thread(self): def recver_thread(self):
@ -43,25 +43,26 @@ class recver_net():
data = conn.recv(10240) data = conn.recv(10240)
msg = json.loads(data.decode()) msg = json.loads(data.decode())
if int(msg['flag']) == 0: if int(msg['flag']) == 0:
print("\nhaved received data:" + msg["data"]) print("[+] haved received data:" + msg["data"])
elif int(msg['flag']) == 1: elif int(msg['flag']) == 1:
self.recv_file(msg['data']) self.recv_file(msg['data'])
else: else:
print("Error") print("[x] Error")
def send_thread(self, conn): def send_thread(self, conn):
while True: while True:
flag: int = int(input("")) flag: int = int(input(""))
if flag == 0: if flag == 0:
data = input("Enter data to send: ") data = input("[-] Enter data to send: ")
msg = {"flag": 0, "data": data} msg = {"flag": 0, "data": data}
msg = json.dumps(msg).encode("utf-8") msg = json.dumps(msg).encode("utf-8")
self.send_data(conn, msg) self.send_data(conn, msg)
elif flag == 1: elif flag == 1:
print("[+] Calling file transfer module...")
# file_name = input("Enter file name to send: ") # file_name = input("Enter file name to send: ")
self.send_file(conn) self.send_file(conn)
else: 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): def send_data(self, conn, data):
conn.sendall(data) conn.sendall(data)
@ -82,8 +83,6 @@ class recver_net():
return data.decode() return data.decode()
def recv_file(self, data): def recv_file(self, data):
print(data)
print("+++++++++++++++++++++++++++")
letter: Letter = json_to_obj(data) letter: Letter = json_to_obj(data)
recv.handleLetter(letter) recv.handleLetter(letter)
@ -92,13 +91,13 @@ class recver_net():
while True: while True:
try: try:
client = socket.socket() # 定义协议类型,相当于生命socket类型,同时生成socket连接对象 client = socket.socket() # 定义协议类型,相当于生命socket类型,同时生成socket连接对象
client.connect(('127.0.0.1', 8424)) client.connect((self.client_host, self.client_port))
print("Connected...") print("[*] Connected...")
print("if you want to send data, enter 0, if you want to send file, enter 1.") print("[*] if you want to send data, enter 0, if you want to send file, enter 1.")
sleep(1) sleep(1)
break break
except socket.error: except socket.error:
print("Waiting for ...") print("[*] Waiting for ...")
# 加入线程 # 加入线程
threading.Thread(target=self.recver_thread, ).start() 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()
@ -106,8 +105,31 @@ class recver_net():
def run(self): def run(self):
threading.Thread(target=self.main).start() 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 # test
if __name__ == '__main__': if __name__ == '__main__':
a = recver_net() port, client_host, client_port = input_verify()
a = recver_net(port, client_host, client_port)
a.run() a.run()

@ -6,7 +6,6 @@ import os
from entity.Letter import Letter from entity.Letter import Letter
from itsdangerous import base64_encode
from tool import PriKeyHelper from tool import PriKeyHelper
from tool.PriKeyHelper import getUserKey from tool.PriKeyHelper import getUserKey
from tool.asymmetric import RSA from tool.asymmetric import RSA
@ -43,7 +42,7 @@ def main():
letter.fileName = getFileName(path) letter.fileName = getFileName(path)
letter.recvPubKey = getRecvPubKey() letter.recvPubKey = getRecvPubKey()
letter.senderPubKey = getSenderPubKey() 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.encryptKey = getEncryptKey()
letter.encryptType = getEncryptType() letter.encryptType = getEncryptType()

@ -26,10 +26,13 @@ from recv import recv
# pass # pass
class sender_net(): 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.letter = Letter()
self.port=port
self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 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) self.server.listen(10)
@ -39,25 +42,26 @@ class sender_net():
data = conn.recv(10240) data = conn.recv(10240)
msg = json.loads(data.decode()) msg = json.loads(data.decode())
if int(msg['flag']) == 0: if int(msg['flag']) == 0:
print("\nhaved received data:" + msg["data"]) print("[+] haved received data:" + msg["data"])
elif int(msg['flag']) == 1: elif int(msg['flag']) == 1:
self.recv_file(msg['data']) self.recv_file(msg['data'])
else: else:
print("Error") print("[x] Error")
def send_thread(self, conn): def send_thread(self, conn):
while True: while True:
flag: int = int(input()) flag: int = int(input())
if flag == 0: if flag == 0:
data = input("Enter data to send: ") data = input("[-] Enter data to send: ")
msg = {"flag": 0, "data": data} msg = {"flag": 0, "data": data}
msg = json.dumps(msg).encode("utf-8") msg = json.dumps(msg).encode("utf-8")
self.send_data(conn, msg) self.send_data(conn, msg)
elif flag == 1: elif flag == 1:
print("[+] Calling file transfer module...")
# file_name = input("Enter file name to send: ") # file_name = input("Enter file name to send: ")
self.send_file(conn) self.send_file(conn)
else: 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): def send_data(self, conn, msg):
conn.sendall(msg) conn.sendall(msg)
@ -90,19 +94,48 @@ class sender_net():
while True: while True:
try: try:
client = socket.socket() # 定义协议类型,相当于生命socket类型,同时生成socket连接对象 client = socket.socket() # 定义协议类型,相当于生命socket类型,同时生成socket连接对象
client.connect(('127.0.0.1', 8425)) client.connect((self.client_host, self.client_port))
print(" Connected...") print(" [*] Connected...")
print("if you want to send data, enter 0, if you want to send file, enter 1.") print("[*] if you want to send data, enter 0, if you want to send file, enter 1.")
sleep(1) sleep(1)
break break
except socket.error: except socket.error:
print("Waiting for ...") print("[*] Waiting for ...")
#加入线程 #加入线程
threading.Thread(target=self.recver_thread, ).start() 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()
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 #test
if __name__ == '__main__': if __name__ == '__main__':
a = sender_net()
port, client_host, client_port = input_verify()
a = sender_net(port, client_host, client_port)
a.run() a.run()

@ -10,7 +10,6 @@ def getUserKey() -> (str, str): # 返回base64编码
if not os.path.exists(config.priKeySavePath) or not os.path.exists(config.pubKeySavePath): if not os.path.exists(config.priKeySavePath) or not os.path.exists(config.pubKeySavePath):
# 生成新的密钥对 # 生成新的密钥对
RSA.generate_keys(config.priKeySavePath,config.pubKeySavePath) RSA.generate_keys(config.priKeySavePath,config.pubKeySavePath)
# 读取私钥 # 读取私钥
with open(config.priKeySavePath, "rb") as f: with open(config.priKeySavePath, "rb") as f:
data = f.read() data = f.read()

Loading…
Cancel
Save