首页 > 其他分享 >【十】认证客户端的链接合法性

【十】认证客户端的链接合法性

时间:2023-06-23 17:22:06浏览次数:38  
标签:__ 合法性 socket tcp client bufsize 链接 conn 客户端

【十】认证客户端的链接合法性

  • 如果你想在分布式系统中实现一个简单的客户端链接认证功能,又不像SSL那么复杂

    • 那么利用hmac+加盐的方式来实现
  • 服务端

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

secret_key=b'ly bang bang bang'
def conn_auth(conn):
    '''
    认证客户端链接
    :param conn:
    :return:
    '''
    print('开始验证新链接的合法性')
    msg=os.urandom(32)
    conn.sendall(msg)
    h=hmac.new(secret_key,msg)
    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)
  • 客户端(合法)
#_*_coding:utf-8_*_
__author__ = 'ly'
from socket import *
import hmac,os

secret_key=b'ly 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)
  • 客户端(非法:不知道加密方式)
#_*_coding:utf-8_*_
__author__ = 'ly'
from socket import *

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

    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)
  • 客户端(非法:不知道secret_key)
#_*_coding:utf-8_*_
__author__ = 'ly'
from socket import *
import hmac,os

secret_key=b'ly bang bang bang1111'
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)

标签:__,合法性,socket,tcp,client,bufsize,链接,conn,客户端
From: https://www.cnblogs.com/dream-ze/p/17499392.html

相关文章

  • 图片转链接-腾讯云+PicGo+Typora搭建自己的图床
    腾讯云+PicGo+Typora搭建自己的图床原创声明,转载请注明文章链接来源、作者信息https://mp.weixin.qq.com/s?__biz=Mzg2NDY3NjY5NA==&mid=2247489545&idx=1&sn=5d3bb085ea62f87bbae1a9a5199581d6&chksm=ce64e630f9136f268c136f0f5a1b1ab081512bf87d70d3d357d704b1612d9f9a0feaabadcb......
  • 树莓派4B改造成云桌面客户端,连接DoraCloud免费版
     RaspberryPi(树莓派)是为学习计算机编程教育而设计的只有信用卡大小的微型电脑,自问世以来受众多计算机发烧友和创客的追捧,曾经一“派”难求。DoraCloud是一款多平台的桌面虚拟化管理软件,支持Hyper-V、VMware、Proxmox、XenServer等多种虚拟化平台。DoraCloud提供免费版,可以支......
  • Subversion 1.8.9 ( SVN Client ) 安装最新版本的svn客户端 - svn 账户 密码
    http://www.fulingjiang.cn/linux/62.htmlForCentOS7Users: 1.[WandiscoSVN]2.name=WandiscoSVNRepo3.baseurl=http://opensource.wandisco.com/centos/5/svn-1.8/RPMS/$basearch/4.enabled=15.gpgcheck=06.yumcleanall7.......
  • ensp官方下载链接失效问题
    问题:2021.4.23日发现登录后打开链接ensp官方下载链接失效,但是文档还在https://support.huawei.com/enterprise/zh/nce-data-communication/ensp-pid-9017384/software   解决方法:使用替代网站下载http://ensp.1984cn.com/  问题原因:估计是因为ensp使用了0racle的virtualb0x......
  • fpga 以太网w5500 SPI传输80MHz FPGA verilog TCP客户端驱动源码,8个SOCKET都可用,SPI
    fpga以太网w5500SPI传输80MHzFPGAverilogTCP客户端驱动源码,8个SOCKET都可用,SPI频率80MHZ,硬件验证以通过。w5500ip核w5500软核,还有TCP服务端和UDP模式,联系联系我要那个,默认发TCP客户端。这个代码是用fpga驱动和使用w5500模块,做过优化,可能以达到w5500最高传输速度,学习必......
  • webView链接字串以及多点触摸问题
    packagefirsrdroid.tutorial.mywebview;importandroid.app.Activity;importandroid.os.Bundle;importandroid.webkit.WebView;importandroid.webkit.WebViewClient;publicclassUsingMyWebviewextendsActivity{WebViewmWebView;/**Calledwhentheact......
  • git 多分支,git远程仓库,ssh方式链接远程仓库,协同开发,冲突解决
    目录一、git多分支二、git远程仓库修改用户名username三、ssh方式链接远程仓库具体操作-1先删除原来使用https链接的remote-2增加一个跟远程仓库的链接origin---》是ssh协议的-3本地机器,生成公钥私钥[使用命令生成]-4把公钥配置在gitee上【打开公钥】--》可以配多个-5以......
  • 05 git 多分支,远程仓库,ssh方式链接远程仓库,协同开发,冲突解决
    1git多分支#分支操作0查看分支gitbranch#本地gitbranch-a#本地和远程1创建分支gitbranchdev2切换分支gitcheckout分支名字3删除分支gitbranch-d分支名4合并分支操作步骤 gitbranchdevgitcheckoutdev#dev分支操作......
  • Zabbix-客户端利用snmp v2 协议上线被监控
    Zabbix-客户端利用snmpv2协议上线被监控SNMP监控案例背景:在现网很多场景中,zabbix除了监控windows、linux服务器外,还会监控网络等设备,但这些设备上是无法安装agent2这个客户端插件,那我们改如何利用zabbix来监控呢。但网络设备都是支持SNMP协议的,因此我们可用利用SNMP简单......
  • 前端学习笔记_思维导图和资源链接
    17素材资源jQueryapi中文文档脑图-前端总结脑图-jquery总结脑图-js正则总结后台主题框架echartsjQuery插件adminlte......