# ### 服务器
import socket
import hmac
import os
def auth(conn,secret_key):
# 随机的32位二进制字节流
res = os.urandom(32)
# 把res发送给对方的服务器
conn.send(res)
# 用hmac加密字符串
hm = hmac.new(secret_key.encode(),res)
# 通过hexdigest返回32长度的十六进制字符串
res_server = hm.hexdigest()
print(res_server)
# 接受客户端发过来的加密后的字符串
res_cli = conn.recv(1024).decode("utf-8")
if res_server == res_cli:
print("该用户是合法的链接请求")
return True
else:
print("该用户是非法的链接请求")
return False
# 创建对象
sk = socket.socket()
sk.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
sk.bind( ("127.0.0.1",9001) )
sk.listen()
conn,addr = sk.accept()
# 收发数据的逻辑
secret_key = "ig不牛逼"
# 调用函数,验证权限
res = auth(conn,secret_key)
# 如果验证的结果是真的,就处理用户发送过来的请求,假的直接断开链接
if res:
print(conn.recv(1024).decode("utf-8"))
conn.close()
sk.close()