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.urandom(32)
15     conn.sendall(msg)
16     h=hmac.new(secret_key,msg)
17     digest=h.digest()
18     respone=conn.recv(len(digest))
19     return hmac.compare_digest(respone,digest)
20
21 def data_handler(conn,bufsize=1024):
22     if not conn_auth(conn):
23         print(‘该链接不合法,关闭‘)
24         conn.close()
25         return
26     print(‘链接合法,开始通信‘)
27     while True:
28         data=conn.recv(bufsize)
29         if not data:break
30         conn.sendall(data.upper())
31
32 def server_handler(ip_port,bufsize,backlog=5):
33     ‘‘‘
34     只处理链接
35     :param ip_port:
36     :return:
37     ‘‘‘
38     tcp_socket_server=socket(AF_INET,SOCK_STREAM)
39     tcp_socket_server.bind(ip_port)
40     tcp_socket_server.listen(backlog)
41     while True:
42         conn,addr=tcp_socket_server.accept()
43         print(‘新连接[%s:%s]‘ %(addr[0],addr[1]))
44         data_handler(conn,bufsize)
45
46 if __name__ == ‘__main__‘:
47     ip_port=(‘127.0.0.1‘,9999)
48     bufsize=1024
49     server_handler(ip_port,bufsize)

客户端:

 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     msg=conn.recv(32)
14     h=hmac.new(secret_key,msg)
15     digest=h.digest()
16     conn.sendall(digest)
17
18 def client_handler(ip_port,bufsize=1024):
19     tcp_socket_client=socket(AF_INET,SOCK_STREAM)
20     tcp_socket_client.connect(ip_port)
21
22     conn_auth(tcp_socket_client)
23
24     while True:
25         data=input(‘>>: ‘).strip()
26         if not data:continue
27         if data == ‘quit‘:break
28
29         tcp_socket_client.sendall(data.encode(‘utf-8‘))
30         respone=tcp_socket_client.recv(bufsize)
31         print(respone.decode(‘utf-8‘))
32     tcp_socket_client.close()
33
34 if __name__ == ‘__main__‘:
35     ip_port=(‘127.0.0.1‘,9999)
36     bufsize=1024
37     client_handler(ip_port,bufsize)

原文地址:https://www.cnblogs.com/sun-10387834/p/10804823.html

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

socket认证客户端链接合法性的相关文章

认证客户端链接合法性

https://www.cnblogs.com/linhaifeng/articles/6129246.html 原文地址:https://www.cnblogs.com/jintian/p/10976963.html

认证客户端的链接合法性

摘自:http://www.cnblogs.com/linhaifeng/articles/6129246.html#_label14 如果你想在分布式系统中实现一个简单的客户端链接认证功能,又不像SSL那么复杂,那么利用hmac+加盐的方式来实现 server.py #_*_coding:utf-8_*_ __author__ = 'Linhaifeng' from socket import * import hmac,os secret_key=b'linhaifeng bang bang

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

python3 验证客户端链接的合法性

服务端: 1.secret_key为bytes类型 2.random_bytes = os.urandom(n) 随机生成一个长度为n的random_bytes server.send(random_bytes)发送给客户端 3.hmac_bytes = hmac(secret_key, random_bytes, 'md5').digest() 通过hmac模块对secret_key和random_bytes进行md5加密,生成一个md5加密后的hmac_bytes client_hmac_b

CentOS6.7环境下SVN搭建与客户端链接

环境:CentOS 6.7系统,安装办法:yum 1. rpm –qa | grep subversion//查看是否有安装了subversion,想卸载就把他卸载了 yum remove subversion//卸载 yum install -y subversion  httpd  mod_dav_svn//安装对应的包和模块 svnserve –version//检查是否成功安装,输出如下即为安装成功 2. 创建svn用户 useradd -s /sbin/nologin  svn 3.

java基础入门-建立可以多客户端链接的ServerSocket

承接上一篇文章,今天谈论一下可以多客户端链接的ServerSocket. 这里面注意涉及到的技术点是: 1.ServerSocket 2.多线程 这次我们分成两个类来实现,先上代码: package com.test.socket; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.net.Sock

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

锐捷Windows认证客户端常见问题及处理方法

1:无法开机自启动? A:在客户端设置界面中勾选开机自动运行项,并检查系统或第三方软件(主要是第三方WIFI或外挂之类软件)是否配置了阻止客户端的自动运行,可通过卸载或彻底停止相关软件然后测试客户端来确认. 2:无法接收到通告消息? A:在客户端设置界面中勾选校园网消息提醒项.如图所示: 3:认证成功后掉线并弹出提示信息请卸载所有第三方WIFI程序以及外挂软件? A:可以先尝试关闭WiFi软件设置项的校园网模式,或者按照提示信息卸载第三方WiFi,并重启客户端或重启系统. 猎豹WIFI如图所示: