一,hmac
验证客户端的合法性
hmac,检测客户端是否合法,不依赖登录认证
server
import os,socket,hmac sk=socket.socket() sk.bind(('127.0.0.1',8090)) sk.listen() aa=b'hello' def bb(conn): msg=os.urandom(32) conn.send(msg) h=hmac.new(aa,msg) digest=h.digest() client_digest=conn.recv(1024) return hmac.compare_digest(digest,client_digest) conn,addr=sk.accept() res=bb(conn) if res: print('合法') conn.close() else: print('不合法') conn.close() sk.close()
client
import hmac,socket sk=socket.socket() aa=b'wohao' sk.connect(('127.0.0.1',8090)) msg=sk.recv(1024) h=hmac.new(aa,msg) digest=h.digest() sk.send(digest) sk.close()
结果:
C:UsershcAppDataLocalProgramsPythonPython36python3.exe C:/Users/hc/AppData/Local/Temp/Rar$DIa12328.47396/server.py
不合法
Process finished with exit code 0
server
import os,socket,hmac sk=socket.socket() sk.bind(('127.0.0.1',8090)) sk.listen() aa=b'hello' def bb(conn): msg=os.urandom(32) conn.send(msg) h=hmac.new(aa,msg) digest=h.digest() client_digest=conn.recv(1024) return hmac.compare_digest(digest,client_digest) conn,addr=sk.accept() res=bb(conn) if res: print('合法') conn.close() else: print('不合法') conn.close() sk.close()
client
import hmac,socket sk=socket.socket() aa=b'hello' sk.connect(('127.0.0.1',8090)) msg=sk.recv(1024) h=hmac.new(aa,msg) digest=h.digest() sk.send(digest) sk.close()
结果:
C:UsershcAppDataLocalProgramsPythonPython36python3.exe C:/Users/hc/AppData/Local/Temp/Rar$DIa12328.47396/server.py
合法
Process finished with exit code 0
二 socketserver
server
import socketserver class MyServer(socketserver.BaseRequestHandler): def handle(self): while 1: print(self.client_address) msg=self.request.recv(1024).decode('utf-8') if msg=='q':break print(msg) info=input('%s>>'%msg[:2]) self.request.send(info.encode('utf-8')) if __name__=='__main__': server=socketserver.ThreadingTCPServer(('127.0.0.1',8090),MyServer) server.allow_reuse_address=True server.serve_forever()
client
import socket sk = socket.socket() sk.connect(('127.0.0.1',8090)) while True: msg = input('>>>') if msg == 'q': sk.send(b'q') break sk.send(('美团 :'+msg).encode('utf-8')) ret = sk.recv(1024).decode('utf-8') print(ret) sk.close()
client2
import socket sk = socket.socket() sk.connect(('127.0.0.1',8090)) while True: msg = input('>>>') if msg == 'q': sk.send(b'q') break sk.send(('大众点评 :'+msg).encode('utf-8')) ret = sk.recv(1024).decode('utf-8') print(ret) sk.close()
结果:
server
C:UsershcAppDataLocalProgramsPythonPython36python3.exe C:/Users/hc/AppData/Local/Temp/Rar$DIa12328.27733/server.py ('127.0.0.1', 64769) ('127.0.0.1', 64795) 美团 :l 美团>>i ('127.0.0.1', 64769) 大众点评 :l 大众>>9 ('127.0.0.1', 64795)
client
>>l
i
>>>
client2
C:UsershcAppDataLocalProgramsPythonPython36python3.exe C:/Users/hc/AppData/Local/Temp/Rar$DIa12328.27936/client2.py >>>l 9