验证客户端的合法性:

通常会用hmac模块,和hashlib中的加盐加密算法类似

服务器端提前和客户端约定好key  ,然后可以用os模块里的urandom来生成一组随机的字节

把随机字节发送给客户端去加密处理 ,服务器加密处理后把得到的字节与客户端传过来的进行比较 相同为true则合法 不同则非法

实现代码:

服务端

 1 import os
 2 import hmac
 3 sk=socket.socket()
 4 sk.bind((‘127.0.0.1‘,8080))
 5 sk.listen()
 6 key=b‘dog‘
 7
 8 def check_conn(conn):
 9     msg=os.urandom(32)
10     conn.send(msg)
11     h=hmac.new(key,msg)
12     digest=h.digest()
13     client_digest=conn.recv(1024)
14     ret=hmac.compare_digest(digest,client_digest)
15     return ret
16
17 conn,addr=sk.accept()
18 result=check_conn(conn)
19 if result:
20     print(‘合法的客户端‘)
21 else:
22     print(‘不合法的客户端‘)
23     conn.close()
24
25 sk.close()

客户端:

 1 import hmac
 2 sk=socket.socket()
 3 key=b‘cat‘
 4 sk.connect((‘127.0.0.1‘,8080))
 5 msg=sk.recv(1024)
 6 h=hmac.new(key,msg)
 7 digest=h.digest()
 8 print(digest)
 9 sk.send(digest)
10
11 sk.close()

原文地址:https://www.cnblogs.com/wen-kang/p/9401508.html

时间: 2024-10-19 20:23:33

验证客户端的合法性:的相关文章

33、验证客户端的合法性、socketserver模块

一.为了防止客户端被人非法利用,需要在使用之前对客户端进行合法性验证.接下来就是客户端验证的几种方法 hmac  加密方法 以下是服务端: import socket import os import hmac #能转化成密文模块 secret_key=b'apple' #密钥,必须是bytes类型 sk=socket.socket() sk.bind(('127.0.0.1',8008)) sk.listen() def check_con(con): #定义一个验证函数 msg=os.ura

socketserver和socket的补充(验证客户端合法性)

一.socket的补充 1.参数 socket.socket(family=AF_INET,type=SOCK_STREAM,proto=0,fileno=None) 参数说明: family 地址系列应为AF_INET(默认值ipv4),AF_INET6(ipv6),AF_UNIX,AF_CAN或AF_RDS. (AF_UNIX 域实际上是使用本地 socket 文件来通信) type 套接字类型应为SOCK_STREAM(默认值,tcp协议),SOCK_DGRAM(udp协议),SOCK_R

Python全栈开发--socketserver模块和验证客户端链接的合法性

验证客户端链接的合法性 分布式系统中实现一个简单的客户端链接认证功能 #_*_coding:utf-8_*_ from socket import * import hmac,os secret_key=b'linhaifeng bang bang bang' def conn_auth(conn): ''' 认证客户端链接 :param conn: :return: ''' print('开始验证新链接的合法性') msg=os.urandom(32) conn.sendall(msg) h=

《Python》网络编程之验证客户端链接的合法性、socketserver模块

一.socket的更多方法介绍 # 服务端套接字函数 s.bind() # 绑定(主机,端口号)到套接字 s.listen() # 开始TCP监听 s.accept() # 被动接受TCP客户的连接,(阻塞式)等待连接的到来 # 客户端套接字函数 s.connect() # 主动初始化TCP服务器连接 s.connect_ex() # connect()函数的扩展版本,出错时返回出错码,而不是抛出异常 # 公共用途的套接字函数 s.recv() # 接收TCP数据 s.send() # 发送TC

socket认证客户端链接合法性

服务器端: 1 #_*_coding:utf-8_*_ 2 __author__ = 'Linhaifeng' 3 from socket import * 4 import hmac,os 5 6 secret_key=b'linhaifeng bang bang bang' 7 def conn_auth(conn): 8 ''' 9 认证客户端链接 10 :param conn: 11 :return: 12 ''' 13 print('开始验证新链接的合法性') 14 msg=os.ur

JS验证身份证的合法性

//验证身份证的合法性 function IdentityCodeValid(code) { var city={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江 ",31:"上海",32:"江苏",33:"浙江&quo

正则表达式验证邮箱的合法性

//利用正则表达式验证邮箱的合法性 -(BOOL)isValidateEmail:(NSString *)email { NSString *emailRegex = @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", email

用两种方法验证邮箱的合法性(最新)

代码: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. self.title=@"验证邮箱的合法性"; //最全面的验证邮箱的方法,用两种方法一起测试 NSString *email=@"[email protected]"; NSLog(@"---%i--",[self validateEmail:emai

验证邮箱的合法性

代码: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. self.title=@"验证邮箱的合法性"; NSString *email=@"[email protected]"; NSLog(@"--%i-",[self isValidateEmail:email]); } //用正则表达式 -(BOOL)i