一、为了防止客户端被人非法利用,需要在使用之前对客户端进行合法性验证。接下来就是客户端验证的几种方法

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.urandom(32) #系统模块中的urandom方法,可以生成指定位数的bytes数
con.send(msg)
h=hmac.new(secret_key,msg) #new方法:接收两盒变量:密钥和要加密的变量
digest=h.digest() #密文变量等于
client_digest=con.recv(1024) #接收到的密文
return hmac.compare_digest(digest,client_digest)#hmac模块compare_digest方法:比较两个密文是否一致。
con,addr=sk.accept()
res=check_con(con)
if res: #比较
print('合法的客户端')
con.close()
else:
print('不合法的客户端')
con.close()
sk.close()
#客户端
import socket
import hmac
secret_key=b'apple' #密钥:和服务端密钥要一致
sk=socket.socket()
sk.connect(('127.0.0.1',8008))
msg=sk.recv(1024)
h=hmac.new(secret_key,msg) #将接收到的信息进行加密
digest=h.digest() #得到密文变量
sk.send(digest) #将密文变量发送到服务端进行比较
sk.close()

  客户端验证的总的思路是将服务端随机产生的指定位数的字节发送到客户端,两边同时用hmac进行加密,然后对生成的密文进行比较,相同就是合法的客户端,不相同就是不合法的端户端

二、socketserver模块:在socket模块的基础上加一层socket层,目的是让服务端可以处理多个线程,(能启动多个线程)。

服务端:

import socketserver
class MyServer(socketserver.BaseRequestHandler): #必须要继承(socketserver.BaseRequestHandler类
def handle(self): # self.request 就相当于一个conn #必须要有def handle(self)方法
while True:
print(self.client_address)
msg = self.request.recv(1024).decode('utf-8') #相当于conn.recv
if msg == 'q':break
print(msg)
info = input('%s>>>'%msg[:2])
self.request.send(info.encode('utf-8')) #相当于conn.recv方法 if __name__ == '__main__':
server = socketserver.ThreadingTCPServer(('127.0.0.1',8080),MyServer)
# thread 线程
server.allow_reuse_address = True
server.serve_forever()

注:self.request:相当于conn,addr=sk.accept()中的conn。。。。。。。

客户端:

#客户端
import socket
sk = socket.socket()
sk.connect(('127.0.0.1',8080))
while True:
msg = input('>>>')
if msg == 'q':
sk.send(b'q')
break
sk.send(('美团 :'+msg).encode('utf-8'))
ret = sk.recv(1024).decode('utf-8')
print(ret)
sk.close()

客户端没有socketclient,因为客户端不需要有多个客户端发过来的消息。客户端还是一样进行收发操作。

验证客户端的合法性、socketserver模块的更多相关文章

  1. Day 35 验证客户端的合法性+socketserver

    一 .getpeername和getsoketopt的用法 服务器端代码 import socket sk =socket.socket() sk.bind(('127.0.0.1',9000)) s ...

  2. 总结day26 ----验证客户端的合法性,已经操作系统,进程的简单初识别

    前情提要 一:验证客户端的合法性: # .需要认证 # 程序和用户打交道的时候才会用到用户认证 # 对所有的客户端进行统一的认证 # # 我现在要做的事情 # 写一个server端 # 写一个clie ...

  3. python_网络编程hmac模块验证客户端的合法性

    hmac模块: 比较两个函数的密钥是否一致: import hmac import os msg = os.urandom(32) #生成32位随机字节码 def wdc(): key = b'wdc ...

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

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

  5. 用hmac验证客户端的合法性

    服务器端程序 import os import hmac import socket def auth(conn): secret_key = b'rock' rand_b = os.urandom( ...

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

    一.socket的补充 1.参数 socket.socket(family=AF_INET,type=SOCK_STREAM,proto=0,fileno=None) 参数说明: family 地址系 ...

  7. socketserver模块简介

    1. socketserver模块简介 在python的socket编程中,实用socket模块的时候,是不能实现多个连接的,当然如果加入其 它的模块是可以的,例如select模块,在这里见到的介绍下 ...

  8. 网络编程(四)--基于udp协议的套接字、socketserver模块

    一.UDP协议(数据报协议) 1.何为udp协议 不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包. 以太网头 ip头                  ...

  9. 网络编程(四)——基于udp协议的套接字socket、socketserver模块的使用

    基于udp协议的套接字.socketserver模块 一.UDP协议(数据报协议) 1.何为udp协议 不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包. ...

随机推荐

  1. Scrapy抓取jobbole数据

    1.python版本3.6.1 2.python编辑器:JetBrains PyCharm 2.安装virtualenvwrapper-win pip3 install virtualenvwrapp ...

  2. Robot Framework 源码阅读 day2 TestSuitBuilder

    接上一篇 day1 run.py 发现build test suit还挺复杂的, 先从官网API找到了一些资料,可以看出这是robotframework进行组织 测试案例实现的重要步骤, 将传入的te ...

  3. 如何在SVN服务器上创建项目

    1,首先你的电脑上安装了SVN的服务器 VisualSVN-Server-3.7.1-x64.msi 2,打开SVN服务器后,可以看到分布的目录是 Repositories.Users.Groups. ...

  4. Codeforces 1215E 状压DP

    题意:给你一个序列,你可以交换序列中的相邻的两个元素,问最少需要交换多少次可以让这个序列变成若干个极大的颜色相同的子段. 思路:由于题目中的颜色种类很少,考虑状压DP.设dp[mask]为把mask为 ...

  5. opencv windows源码编译

    WITH_QT//H:\software\programming\qt\5.12.3\mingw73_32\lib\cmake  5.6的路径要改这样 WITH_OPENGL 编译器mingw32-m ...

  6. adb server version (31) doesn’t match this client (36); killing…

    版权声明:蜜蜂采花酿蜂蜜,奶牛吃草产牛奶. https://blog.csdn.net/codehxy/article/details/52175186 案例1 报错信息如下 C:\Users\lin ...

  7. python 日期封装

    import time import datetime import locale class TimeUtil: def __init__(self, curtime=None): self.cur ...

  8. 20 简述BASE64编码的作用和c#对其的支持?

  9. Linux内核设计与实现 总结笔记(第八章)下半部和推后执行的工作

    上半部分的中断处理有一些局限,包括: 中断处理程序以异步方式执行,并且它有可能打断其他重要代码的执行. 中断会屏蔽其他程序,所以中断处理程序执行的越快越好. 由于中断处理程序往往需要对硬件进行操作,所 ...

  10. C#用户自定义控件(含源代码)-透明文本框

    using System; using System.Collections; using System.ComponentModel; using System.Drawing; using Sys ...