验证客户端合法性: # 1.需要认证 # 程序和用户打交道的时候才会用到用户认证 # 对所有的客户端进行统一的认证 # 我现在要做的事情 # 写一个server端 # 写一个client端 特殊的 符合我的server端要求的代码 # 1.client端不会被其他机器获取到# 2.即使客户端的代码不在别人手上 有心人仍然可以非法的访问我们的程序 # hashlib# 密钥# 随机的字符串 # server 密钥 发送一个随机字符串,密钥为盐,对随机字符串进行摘要 得到一个字符串结果# clien…
一.socket的补充 1.参数 socket.socket(family=AF_INET,type=SOCK_STREAM,proto=0,fileno=None) 参数说明: family 地址系列应为AF_INET(默认值ipv4),AF_INET6(ipv6),AF_UNIX,AF_CAN或AF_RDS. (AF_UNIX 域实际上是使用本地 socket 文件来通信) type 套接字类型应为SOCK_STREAM(默认值,tcp协议),SOCK_DGRAM(udp协议),SOCK_R…
一.验证客户端合法性 如果你想在分布式系统中实现一个简单的客户端链接认证功能,又不像SSL那么复杂,那么利用hmac+加盐的方式来实现. 客户端验证的总的思路是将服务端随机产生的指定位数的字节发送到客户端,两边同时用hmac进行加密,然后对生成的密文进行比较,相同就是合法的客户端,不相同就是不合法的端户端. 示例代码 服务端 from socket import * import hmac, os secret_key = b"nick" # 是指一个固定字符串的key def con…
验证客户端链接的合法性 import os import hmac import socket secret_key = b'egg' sk = socket.socket() sk.bind(('127.0.0.1',8080)) sk.listen() def check_conn(conn): msg = os.urandom(32) conn.send(msg) h = hmac.new(secret_key,msg) digest = h.digest() client_digest…
补充: send()与sendall() 在python socket编程中,有两个发送TCP的函数,send()与sendall(),区别如下: socket.send(string[, flags])  发送TCP数据,返回发送的字节大小.这个字节长度可能少于实际要发送的数据的长度.换句话说,这个函数执行一次,并不一定能发送完给定的数据,可能需要重复多次才能发送完成. data = "something you want to send" while True: len = s.s…
一 .getpeername和getsoketopt的用法 服务器端代码 import socket sk =socket.socket() sk.bind(('127.0.0.1',9000)) sk.listen() conn,addr =sk.accept() conn.send(b'gdadfadsd') print('getpeername:\n',conn.getpeername()) #连接到当前套接字的远端地址. print('getsocketop:\n',sk.getsock…
hmac模块: 比较两个函数的密钥是否一致: import hmac import os msg = os.urandom(32) #生成32位随机字节码 def wdc(): key = b'wdc' #密钥 ret = hmac.new(key,msg) #将字节码和key进行加密(必须都为bytes类型)创建一个对象ret digest = ret.digest() #消化 return digest #返回消耗后的密文 def yhf(): key1 = b'wdc' #密钥 ret1…
前情提要 一:验证客户端的合法性: # .需要认证 # 程序和用户打交道的时候才会用到用户认证 # 对所有的客户端进行统一的认证 # # 我现在要做的事情 # 写一个server端 # 写一个client端 特殊的 符合我的server端要求的代码 # .client端不会被其他机器获取到 # .即使客户端的代码不在别人手上 有心人仍然可以非法的访问我们的程序 # hashlib # 密钥 # 随机的字符串 # server 密钥 发送一个随机字符串,密钥为盐,对随机字符串进行摘要 得到一个字符…
验证客户端链接的合法性 分布式系统中实现一个简单的客户端链接认证功能 #_*_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=…
 先来回顾一下昨天的内容 黏包现象粘包现象的成因 : tcp协议的特点 面向流的 为了保证可靠传输 所以有很多优化的机制 无边界 所有在连接建立的基础上传递的数据之间没有界限 收发消息很有可能不完全相等 缓存机制,导致没发过去的消息会在发送端缓存 没接收完的消息会在接收端缓存解决: 给应用层定制协议解决方案一:只发送一条信息 先发送一个定长表示待发送数据长度的bytes 先接收一个固定长度 再发送要发送的数据 再按照长度接收数据 解决方案二 :发送的多条信息 先发送一个定长表示待发送字典长度的b…