认证客户端的链接合法性

摘自: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 bang‘
def conn_auth(conn):
    ‘‘‘
    认证客户端链接
    :param conn:
    :return:
    ‘‘‘
    print(‘开始验证新链接的合法性‘)
    msg=os.urandom(32)  # 随机产生一个32位的密钥
    conn.sendall(msg)
    h=hmac.new(secret_key,msg)  # hmac类似于md5,这里是加盐的方式
    digest=h.digest()
    respone=conn.recv(len(digest))
    return hmac.compare_digest(respone,digest)

def data_handler(conn,bufsize=1024):
    if not conn_auth(conn):
        print(‘该链接不合法,关闭‘)
        conn.close()
        return
    print(‘链接合法,开始通信‘)
    while True:
        data=conn.recv(bufsize)
        if not data:break
        conn.sendall(data.upper())

def server_handler(ip_port,bufsize,backlog=5):
    ‘‘‘
    只处理链接
    :param ip_port:
    :return:
    ‘‘‘
    tcp_socket_server=socket(AF_INET,SOCK_STREAM)
    tcp_socket_server.bind(ip_port)
    tcp_socket_server.listen(backlog)
    while True:
        conn,addr=tcp_socket_server.accept()
        print(‘新连接[%s:%s]‘ %(addr[0],addr[1]))
        data_handler(conn,bufsize)

if __name__ == ‘__main__‘:
    ip_port=(‘127.0.0.1‘,9999)
    bufsize=1024
    server_handler(ip_port,bufsize)

client.py

#_*_coding:utf-8_*_
__author__ = ‘Linhaifeng‘
from socket import *
import hmac,os

secret_key=b‘linhaifeng bang bang bang‘
def conn_auth(conn):
    ‘‘‘
    验证客户端到服务器的链接
    :param conn:
    :return:
    ‘‘‘
    msg=conn.recv(32)
    h=hmac.new(secret_key,msg)
    digest=h.digest()
    conn.sendall(digest)

def client_handler(ip_port,bufsize=1024):
    tcp_socket_client=socket(AF_INET,SOCK_STREAM)
    tcp_socket_client.connect(ip_port)

    conn_auth(tcp_socket_client)

    while True:
        data=input(‘>>: ‘).strip()
        if not data:continue
        if data == ‘quit‘:break

        tcp_socket_client.sendall(data.encode(‘utf-8‘))
        respone=tcp_socket_client.recv(bufsize)
        print(respone.decode(‘utf-8‘))
    tcp_socket_client.close()

if __name__ == ‘__main__‘:
    ip_port=(‘127.0.0.1‘,9999)
    bufsize=1024
    client_handler(ip_port,bufsize)

原文地址:https://www.cnblogs.com/dangrui0725/p/9485966.html

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

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

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

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

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

Linux下华南师大锐捷认证客户端的使用详解

本文测试Linux系统环境为Ubuntu15.10 Destop,暂未在其他系统下验证过,不代表LTS版本或较旧的版本按照本文所述方法可以100%正确使用最新的锐捷认证客户端. 本文面向对象为华南师范大学的学生,本校锐捷认证客户端下载地址请点此处(限内网访问),如有其他更多问题请浏览华师新陶园BBS论坛.由于各高校使用锐捷认证客户端版本各有不同程度的差异,不能保证其他高校学生能按照本文所述方法正确使用锐捷认证客户端. 如何下载?: 1.首先打开浏览器,进入本校锐捷认证客户端下载页面,您也可以收藏

LDAP认证客户端、自动挂载用户家目录shell脚本配置

这个是LDAP认证客户端与自动挂载家目录shell脚本配置,使用"authconfig-tui"图形化配置简单,但是后面需要手动操作,自动写入配置文件还没有研究透彻.以后完善 #!/bin/bash yum install -y nss-pam-ldapd nfs-utils nfs autofs pam_ldap openldap openldap-clients #showmount -e 172.16.16.22 automaster="/etc/auto.master

(图解)windows下的mysql客户端mysqlworkbench 链接虚拟机上CentOS的mysql服务器

本人在虚拟机上CentOS的Linux环境下安装了mysql服务器,在本地Windows下安装了mysql的客户端mysqlworkbench ,所以就想让windows下的mysql客户端mysqlworkbench 链接虚拟机上CentOS的mysql服务器,整个过程记录如下: 一.安装客户端Mysql WorkBench 1.下载安装包:mysql-workbench-community-6.2.5-winx64.msi 下载路径:http://dev.mysql.com/download

模拟微信接口时,提示“请在微信客户端打开链接”(转)

背景描述 相信有模拟微信页面请求的测试都有看到过这个页面,简单点说就是爬虫爬微信页面,进行回放的时候会出现这个页面.大概在1年前,专门安排了一个人去解决这个技术问题,遗憾的是当时没有找到解决方案,接下来所有微信端的接口测试和性能测试都无法进行,今天和大家分享下我们的解决方案,希望大家可以绕过微信的坑. 业务场景 我这里以JMeter来举例,我们可以通过在JMeter上开启代理,手机上设置代理来录制微信端的请求,以下为在微信端的业务对应生成的脚本: 录制完成后,我们进行回放,你会发现在查看结果树中

认证客户端链接合法性

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

OPENVPN+MYSQL认证+客户端配置

安装环境:ubuntu 12.04 x64 一 服务器端 1.安装openvpn及相应包 1 2 [email protected]:~# aptitude install openvpn [email protected]:~# aptitude install libpam-dev libpam-mysql libmysql++-dev sasl2-bin 2.检查安装 1 2 [email protected]:~# ls /usr/share/doc/|grep openvpn open

本地redis服务的启动以及客户端的链接

1.本地redis服务的启动: 进入redis的安装目录:redis-4.0.2/src 执行:./redis-server  如下图所示启动成功 2.redis客户端的启动,新打开一个窗口:./redis-cli p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "Andale Mono"; color: #29f914; background-color: #000000 } span.s1 { } p.p1 { margin