一、验证客户端链接的合法性

 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=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)

服务端

 __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)

客户端

二、socketserver

import socketserver
class Myserver(socketserver.BaseRequestHandler):
    def handle(self):
        self.data = self.request.recv(1024).strip()
        print("{} wrote:".format(self.client_address[0]))
        print(self.data)
        self.request.sendall(self.data.upper())

if __name__ == "__main__":
    HOST, PORT = "127.0.0.1", 9999

    # 设置allow_reuse_address允许服务器重用地址
    socketserver.TCPServer.allow_reuse_address = True
    # 创建一个server, 将服务地址绑定到127.0.0.1:9999
    server = socketserver.TCPServer((HOST, PORT),Myserver)
    # 让server永远运行下去,除非强制停止程序
    server.serve_forever()

server端

import socket

HOST, PORT = "127.0.0.1", 9999
data = "hello"

# 创建一个socket链接,SOCK_STREAM代表使用TCP协议
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
    sock.connect((HOST, PORT))          # 链接到客户端
    sock.sendall(bytes(data + "\n", "utf-8")) # 向服务端发送数据
    received = str(sock.recv(1024), "utf-8")# 从服务端接收数据

print("Sent:     {}".format(data))
print("Received: {}".format(received))

client

python:验证客户端链接的合法性与socketserver的更多相关文章

  1. python 全栈开发,Day36(作业讲解(大文件下载以及进度条展示),socket的更多方法介绍,验证客户端链接的合法性hmac,socketserver)

     先来回顾一下昨天的内容 黏包现象粘包现象的成因 : tcp协议的特点 面向流的 为了保证可靠传输 所以有很多优化的机制 无边界 所有在连接建立的基础上传递的数据之间没有界限 收发消息很有可能不完全相 ...

  2. socketv 验证客户端链接的合法性,socketserver

    补充: send()与sendall() 在python socket编程中,有两个发送TCP的函数,send()与sendall(),区别如下: socket.send(string[, flags ...

  3. Python之socketserver模块和验证客户端链接的合法性

    验证客户端链接的合法性 分布式系统中实现一个简单的客户端链接认证功能 #_*_coding:utf-8_*_ from socket import * import hmac,os secret_ke ...

  4. python网络编程之验证客户端链接的合法性

    六.socket的更多方法介绍 服务端套接字函数s.bind() 绑定(主机,端口号)到套接字s.listen() 开始TCP监听s.accept() b被动接收TCP客户的连接,(阻塞式)等待连接的 ...

  5. socketv 验证客户端链接的合法性

    一 .socketv 验证客户端链接的合法性 send()与sendall() 验证客户端 加密验证 如果你想在分布式系统中实现一个简单的客户端链接认证功能,又不像SSL那么复杂,那么利用hmac+加 ...

  6. python (大文件下载及进度条展示) 验证客户端链接的合法性,socketserver

    ##########总结########### 文件校验加进度条显示 ####server import os import json import socket import struct impo ...

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

    一.socket的更多方法介绍 # 服务端套接字函数 s.bind() # 绑定(主机,端口号)到套接字 s.listen() # 开始TCP监听 s.accept() # 被动接受TCP客户的连接, ...

  8. python 验证客户端的合法性

    目的:对连接服务器的客户端进行判断 # Server import socket import hmac import os secret_key = bytes('tom', encoding='u ...

  9. python之路----验证客户端合法性

    验证客户端链接的合法性 import os import hmac import socket secret_key = b'egg' sk = socket.socket() sk.bind(('1 ...

随机推荐

  1. PIE SDK微分锐化

    1.算法功能简介 微分锐化通过微分使图像的边缘或轮廓突出.清晰.导数算子具有突出灰度变化的作用,对图像运用导数算子,灰度变化较大的点处算得的值较高,因此我们将图像的导数算子运算值作为相应的边界强度,所 ...

  2. Vue省市区三级联选择器V-Distpicker的使用

    Vue省市区三级联选择器V-Distpicker的使用 最近用的Vue+Element UI时,有些地方需要用到省市区三联选择器,网上安装并尝试了多种类似的插件,但都因为无法正常实现或是没有眼缘而弃用 ...

  3. mac下安装win7虚拟机和导入linux虚拟机

  4. Hadoop Ecosystem related ports

    本文总结了Hadoop生态系统中各个组件使用的端口,包括了HDFS,Map Reduce,HBase,Hive,Spark,WebHCat,Impala,Alluxio,Sqoop等,后续会持续更新. ...

  5. Beam概念学习系列之PTransform数据处理

    不多说,直接上干货! PTransform数据处理 PTransform对PCollection进行并行处理,每次处理1条,例如Filter过滤.Groupby分组.Combine统计.Join关联等 ...

  6. 【数据库】Oracle中删除新建并授权用户

    DROP USER fengw_110 CASCADE; CREATE USER fengw_110 IDENTIFIED BY root123; grant connect,resource,cre ...

  7. 深入redis内部之redis启动过程之二

    接上文,继续分析代码 1. 设置线程安全模式 zmalloc_enable_thread_safeness();/*设置线程安全标识符为1*/ void zmalloc_enable_thread_s ...

  8. 【Shell】shell截取字符串方式(cut、awk、sed命令)

    1.cut -b :以字节为单位进行分割.这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志.-c :以字符为单位进行分割. -d:自定义分隔符,默认为制表符. -f:与-d一起使用,指定显示 ...

  9. 实现JFileChooser的多种文件类型限制(设置过滤器)

    使用时直接调用方法. // 多类型时使用 public void FileFilter(JFileChooser F) { String[][] fileNames = { { ".java ...

  10. 获取当前的日期时间的js函数,格式为“yyyy-MM-dd hh:mm:ss”

    //获取当前的日期时间函数,格式为“yyyy-MM-dd hh:mm:ss” function getNowFormatDate(date) { if (date == null) { var dat ...