03 驗證合法性連接的服務端
阿新 • • 發佈:2019-01-08
ket color data con big bsp log import int
from socket import * import hmac,os secret_key=b‘Jedan has a big key!‘ def conn_auth(conn): ‘‘‘ 認證客戶端鏈接 :param conn: :return: ‘‘‘ print(‘開始驗證新鏈接的合法性‘) msg=os.urandom(32)#生成一個32字節的隨機字符串 conn.sendall(msg) h=hmac.new(secret_key,msg) digest=h.digest() respone=conn.recv(len(digest)) return hmac.compare_digest(respone,digest) def data_handler(conn,bufsize=1024): if not conn_auth(conn): print(‘該鏈接不合法,關閉‘) conn.close() return print(‘鏈接合法,開始通信‘) while True: data=conn.recv(bufsize) if not data:break conn.sendall(data.upper()) def server_handler(ip_port,bufsize,backlog=5): ‘‘‘ 只處理鏈接 :param ip_port: :return: ‘‘‘ tcp_socket_server=socket(AF_INET,SOCK_STREAM) tcp_socket_server.bind(ip_port) tcp_socket_server.listen(backlog) while True: conn,addr=tcp_socket_server.accept() print(‘新連接[%s:%s]‘ %(addr[0],addr[1])) data_handler(conn,bufsize)if __name__ == ‘__main__‘: ip_port=(‘127.0.0.1‘,9999) bufsize=1024 server_handler(ip_port,bufsize)
03 驗證合法性連接的服務端