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()

  

 

posted @ 2020-04-15 16:34  taysem  阅读(478)  评论(0编辑  收藏  举报