tcp校验client客户端的合法性
在某些情况下需要校验客户端的合法性,, 不是本程序的client 不能连接server 可以做下简单的校验合法性
原理: 客户端和服务端有一个相同的key 后, 服务端将要发送信息msg发送给client 端, 对 msg 和key进行加密, client 接收到msg 后也将msg 和key 进行加密后的client_digest发回给server端, server对自己算的digest 和 client端的client_digest 进行对比 ,相同则是合法的客户端,否则不是
可以利用内置模块 hmac 模块来进行加密校验 和 halib 差不多
用到的方法有:
创建hmac对象 h = hmac.new(key,msg) key和msg 都必须为byets 类型的
加密: h.digest()
对比结果: hmac.compare_digest(digest, client_digest)
server端:
import socket
import hmac
import os
secret_key = b'key'
sk = socket.socket()
sk.bind(('127.0.0.1',6789))
sk.listen()
#对连接的客户端校验时候合法
'''使用hmac 模块校验(内置模块)'''
def check_conn(conn):
msg = os.urandom(32)
conn.send(msg)#随发送一个32位的字节数据,加密的bytes
h = hmac.new(secret_key,msg)
digest = h.digest()#加密后的digest
client_digest =conn.recv(1024)#接收client发过来的加密digest
ret = hmac.compare_digest(digest,client_digest)#对比接收到的client 的和server是否一致
return ret
conn, addr = sk.accept()
res = check_conn(conn)
if res:
print('合法的客户端')
conn.close()
else:
print('bu合法的客户端')
conn.close()
sk.close()
client端:
import socket
import hmac
secret_key = b'key111'
sk =socket.socket()
sk.connect(('127.0.0.1',6789))
msg = sk.recv(1024)
h = hmac.new(secret_key,msg)
digest = h.digest()
sk.send(digest)
sk.close()

浙公网安备 33010602011771号