def verifyMsgSign(self, msg, sign, session): "如果验证成功则发送成功消息,否则发送验证失败并关闭该线程" _cfg = ConfigData.ConfigData() _rsa = Rsa.Rsa(_cfg.GetKeyPath()) if _rsa.VerifyByPubkey(msg, sign, session.peername) == False: msghead = self.packetMsg(MagicNum.MsgTypec.IDENTITYVERIFYFAILED, 0) NetSocketFun.NetSocketSend(session.sockfd, msghead) session.stop() showmsg = "签名验证失败" else: #生成自己的会话密钥 from CryptoAlgorithms import HashBySha1 _hbs = HashBySha1.HashBySha1() session.sessionkey = _hbs.GetHash( str(session.dhkey.getKey(string.atol(msg))), MagicNum.HashBySha1c.HEXADECIMAL) if session.threadtype == CommonData.ThreadType.CONNECTAP: msghead = self.packetMsg(MagicNum.MsgTypec.AUDITDHGENERATE, 0) else: msghead = self.packetMsg( MagicNum.MsgTypec.AUDITRETURNDHGENERATE, 0) NetSocketFun.NetSocketSend(session.sockfd, msghead) showmsg = "生成会话密钥:" + session.sessionkey self.sendViewMsg(CommonData.ViewPublisherc.MAINFRAME_APPENDTEXT, showmsg, True)
def ReqConnect(self, name, psw): "请求登录" msglist = [MagicNum.UserTypec.CPUSER, name, psw] _msgbody = NetSocketFun.NetPackMsgBody(msglist) _msghead = struct.pack(CommonData.MsgHandlec.MSGHEADTYPE, MagicNum.MsgTypec.REQLOGINMSG, len(_msgbody)) NetSocketFun.NetSocketSend(self.__Sockfd, _msghead + _msgbody)
def HandleMsg(self,bufsize,session): "发送迪菲参数p和公钥,及该消息的签名" msglist = self.getDhpAndga(session) msgbody = NetSocketFun.NetPackMsgBody(msglist) msghead = self.packetMsg(MagicNum.MsgTypec.SENDDHPANDPUBKEY ,len(msgbody)) NetSocketFun.NetSocketSend(session.sockfd,msghead + msgbody) if not session.peername: session.peername = "auditserver"
def HandleMsg(self, bufsize, session): recvbuffer = NetSocketFun.NetSocketRecv(session.sockfd, bufsize) _msglist = NetSocketFun.NetUnPackMsgBody(recvbuffer) if self.handleDhkeyAndCgroupParam(_msglist, session) == True: # try: self.getBgroupSignAndParam(session) showmsg = "解密获取参数及特征提取结果:\n(1)B组参数:\n(帧总数,分组参数,帧间隔位数,混沌初值,分支参数)\n(" + \ ",".join(NetSocketFun.NetUnPackMsgBody(self.__bparam)) + ")\n(2)B组特征提取签名:" + _msglist[1] showmsg += "\n(3)C组参数:\n(帧总数,分组参数,帧间隔位数,混沌初值,分支参数)\n(" + \ ",".join(self.__cparam) + ")\n(4)C组特征提取签名:" + self.__csign self.sendViewMsg(CommonData.ViewPublisherc.MAINFRAME_APPENDTEXT, showmsg, True) # except Exception ,e: # print e # import wx # wx.MessageBox("该文件不存在","错误",wx.ICON_ERROR|wx.YES_DEFAULT) # return if self.verifySign(session) == True: # showmsg = "收到特征提取结果:\n(1)B组参数:" + ",".join(self.__bparam.split(CommonData.MsgHandlec.PADDING)) + "\n(2)B组特征提取签名:" + _msglist[1] # showmsg += "\n(3)C组参数:" + ",".join(self.__cparam) + "\n(4)C组特征提取签名:" + self.__csign + "\n审核返回成功" # self.sendViewMsg(CommonData.ViewPublisherc.MAINFRAME_APPENDTEXT,showmsg,True) showmsg = "审核返回成功" self.sendViewMsg( CommonData.ViewPublisherc.MAINFRAME_APPENDTEXT, showmsg, True) msghead = self.packetMsg(MagicNum.MsgTypec.AUDITRETURNSUCCESS, 0) NetSocketFun.NetSocketSend(session.sockfd, msghead) _db = MediaTable.MediaTable() _db.Connect() _db.AlterMedia("status", MagicNum.MediaTablec.AUDIT, session.filename) _db.CloseCon() self.sendViewMsg( CommonData.ViewPublisherc.MAINFRAME_REFRESHFILETABLE, "") self.sendViewMsg( CommonData.ViewPublisherc.MAINFRAME_REFRESHSTATIC, [session.filename, "审核返回成功"]) return self.sendViewMsg(CommonData.ViewPublisherc.MAINFRAME_REFRESHSTATIC, [session.filename, "审核返回失败"]) msghead = self.packetMsg(MagicNum.MsgTypec.IDENTITYVERIFYFAILED, 0) NetSocketFun.NetSocketSend(session.sockfd, msghead)
def HandleMsg(self, bufsize, session): "返回登录结果,并保存用户名" recvmsg = NetSocketFun.NetSocketRecv(session.sockfd, bufsize) _loginmsg = NetSocketFun.NetUnPackMsgBody(eval(recvmsg))[0] _res = self.verifyUser(_loginmsg[0], _loginmsg[1]) if _res != False: msgbody = NetSocketFun.NetPackMsgBody([str(_res)]) msghead = self.packetMsg(MagicNum.MsgTypec.LOGINSUCCESS, len(msgbody)) NetSocketFun.NetSocketSend(session.sockfd, msghead + msgbody) session.peername = _loginmsg[0] showmsg = session.peername + "登录成功" else: msghead = self.packetMsg(MagicNum.MsgTypec.LOGINFAIL, 0) NetSocketFun.NetSocketSend(session.sockfd, msghead) showmsg = session.peername + "登录失败" self.sendViewMsg(CommonData.ViewPublisherc.MAINFRAME_APPENDTEXT, showmsg, True)
def StopNetConnect(self): "发送关闭消息并关闭网络线程" print "send close" _msghead = struct.pack(CommonData.MsgHandlec.MSGHEADTYPE, MagicNum.MsgTypec.REQCLOSEMSG, 0) NetSocketFun.NetSocketSend(self.__Sockfd, _msghead) # self.__netThread.stop() print "netmanage.stop" self.__netManage.stop() print "all close"
def verifyMsgSign(self,msg,sign,session): "如果验证成功则发送公钥,否则发送验证失败并关闭该线程" _cfg = ConfigData.ConfigData() _rsa = Rsa.Rsa(_cfg.GetKeyPath()) if self.verify(_rsa, msg[0], sign[0], session)== False or self.verify(_rsa, msg[1], sign[1], session)== False: msghead = self.packetMsg(MagicNum.MsgTypec.IDENTITYVERIFYFAILED, 0) NetSocketFun.NetSocketSend(session.sockfd, msghead ) session.stop() else: #生成自己的会话密钥 _dhkey = DiffieHellman.DiffieHellman(string.atol(msg[0])) from CryptoAlgorithms import HashBySha1 _hbs = HashBySha1.HashBySha1() session.sessionkey = _hbs.GetHash(str(_dhkey.getKey(string.atol(msg[1]))),MagicNum.HashBySha1c.HEXADECIMAL) _dhpubkey = str(_dhkey.getPubkey()) msglist = [_dhpubkey,_rsa.SignByPrikey(_dhpubkey)] msgbody = NetSocketFun.NetPackMsgBody(msglist) msghead = self.packetMsg(MagicNum.MsgTypec.SENDDHPUBKEY, len(msgbody)) NetSocketFun.NetSocketSend(session.sockfd, msghead + msgbody )
def HandleMsg(self, bufsize, session): if not session.currentbytes: self.sendViewMsg(CommonData.ViewPublisherc.MAINFRAME_APPENDTEXT, "开始接收文件(" + session.filename + ") ...") recvmsg = NetSocketFun.NetSocketRecv(session.sockfd, bufsize) recvbuffer = NetSocketFun.NetUnPackMsgBody(recvmsg)[0] session.currentbytes += len(recvbuffer) session.file.write(recvbuffer) msghead = self.packetMsg(MagicNum.MsgTypec.REQFILEBUFFER, 0) NetSocketFun.NetSocketSend(session.sockfd, msghead)
def ReqRegister(self, name, psw, ip, port): "请求注册" _rke = RsaKeyExchange.RsaKeyExchange() _rke.GenerateRsaKey() _pkeystr = _rke.GetPubkeyStr("own") msglist = [name, psw, ip, port, _pkeystr] _msgbody = NetSocketFun.NetPackMsgBody(msglist) _msghead = struct.pack(CommonData.MsgHandlec.MSGHEADTYPE, MagicNum.MsgTypec.REQREGISTERMSG, len(_msgbody)) NetSocketFun.NetSocketSend( self.__Sockfd, _msghead + _msgbody.decode('gbk').encode("utf-8"))
def HandleMsg(self, bufsize, session): "返回注册信息并保存用户名" recvmsg = NetSocketFun.NetSocketRecv(session.sockfd, bufsize) _loginmsg = NetSocketFun.NetUnPackMsgBody(recvmsg) + [ MagicNum.CPUserTablec.UNACCEPT ] if self.verifyUser(_loginmsg[0]) == False: restype = MagicNum.MsgTypec.REGISTERFAIL msghead = self.packetMsg(restype, 0) NetSocketFun.NetSocketSend(session.sockfd, msghead) else: restype = MagicNum.MsgTypec.REGISTERSUCCESSMSG self.addNewCPUser(_loginmsg[:-2] + _loginmsg[-1:]) session.name = _loginmsg[0] from CryptoAlgorithms import RsaKeyExchange _rke = RsaKeyExchange.RsaKeyExchange() _rke.WritePubkeyStr(session.name, _loginmsg[-2]) msgbody = NetSocketFun.NetPackMsgBody([_rke.GetPubkeyStr("own")]) msghead = self.packetMsg(restype, len(msgbody)) NetSocketFun.NetSocketSend( session.sockfd, msghead + msgbody.decode('gbk').encode("utf-8"))
def ReqAudit(self, filename): "请求审核" self.filename = filename _filename = filename[-filename[::-1].index("/"):].encode("utf-8") _msgbody = NetSocketFun.NetPackMsgBody([_filename]) _msghead = struct.pack(CommonData.MsgHandlec.MSGHEADTYPE, MagicNum.MsgTypec.REQAUDITMSG, len(_msgbody)) NetSocketFun.NetSocketSend(self.__Sockfd, _msghead + _msgbody) import wx from wx.lib.pubsub import Publisher wx.CallAfter(Publisher().sendMessage, CommonData.ViewPublisherc.MAINFRAME_APPENDTEXT, ["请求审核文件(" + _filename + ")".encode("utf8"), False])
def HandleMsg(self, bufsize, session): recvmsg = NetSocketFun.NetSocketRecv(session.sockfd, bufsize) recvbuffer = NetSocketFun.NetUnPackMsgBody(recvmsg)[0] session.file.write(recvbuffer) session.file.close() if session.threadtype == CommonData.ThreadType.ACCETPNO: msghead = self.packetMsg(MagicNum.MsgTypec.REQAGROUP, 0) elif session.threadtype == CommonData.ThreadType.ACCEPTAP: msghead = self.packetMsg(MagicNum.MsgTypec.REQCGROUP, 0) filesize = float((session.currentbytes + bufsize)) / (1024 * 1024) showmsg = "文件接收完毕:\n(1)文件名:" + session.filename + "\n(2)文件大小(MB):" + str( filesize) self.sendViewMsg(CommonData.ViewPublisherc.MAINFRAME_APPENDTEXT, showmsg, True) NetSocketFun.NetSocketSend(session.sockfd, msghead) session.currentbytes = 0
def HandleMsg(self,bufsize,session): if not session.currentbytes and session.threadtype != CommonData.ThreadType.CONNECTAP: _cfg = ConfigData.ConfigData() _dir = _cfg.GetMediaPath() + "/auditserver/" recvbuffer = NetSocketFun.NetSocketRecv(session.sockfd,bufsize) session.control.filename = _dir + NetSocketFun.NetUnPackMsgBody(recvbuffer)[0] if not session.currentbytes: self.handleFileBegin(bufsize, session) _filebuffer = session.file.read(CommonData.MsgHandlec.FILEBLOCKSIZE) session.currentbytes += len(_filebuffer) msgbody = NetSocketFun.NetPackMsgBody([_filebuffer]) if session.currentbytes == session.totalbytes: msghead = self.packetMsg(MagicNum.MsgTypec.SENDFILEOVER,len(msgbody)) session.file.close() session.currentbytes = 0 _filename = session.filename[-session.filename[::-1].index("/"):].encode("utf-8") filesize = float(session.totalbytes) / (1024 * 1024) showmsg = "文件发送完毕:\n(1)文件名:" + _filename + "\n(2)文件大小(MB):" + str(filesize) self.sendViewMsg(CommonData.ViewPublisherc.MAINFRAME_APPENDTEXT,showmsg,True) else: msghead = self.packetMsg(MagicNum.MsgTypec.SENDFILEBUFFER,len(msgbody)) NetSocketFun.NetSocketSend(session.sockfd, msghead + msgbody)
def HandleMsg(self, bufsize, session): _permission = self.getUserPermission(session.peername) msgbody = NetSocketFun.NetPackMsgBody([str(_permission)]) msghead = self.packetMsg(MagicNum.MsgTypec.LOGINSUCCESS, len(msgbody)) NetSocketFun.NetSocketSend(session.sockfd, msghead + msgbody)
def StopNetConnect(self): "发送关闭消息并关闭网络线程" _msghead = struct.pack(CommonData.MsgHandlec.MSGHEADTYPE, MagicNum.MsgTypec.REQCLOSEMSG, 0) NetSocketFun.NetSocketSend(self.__Sockfd, _msghead) self.__netThread.stop()
def HandleMsg(self, bufsize, session): msgbody = self.packMsgBody(session) msghead = self.packetMsg(MagicNum.MsgTypec.SENDAGROUP, len(msgbody)) NetSocketFun.NetSocketSend(session.sockfd, msghead + msgbody)