udp循环发消息,sockerserver,文件校验,服务器合法性校验---day29
1.udp循环发消息
# ### 客户端
import socket
sk = socket.socket(type=socket.SOCK_DGRAM) while True:
#发送消息
message = input("请输入客户端发送的消息")
sk.sendto(message.encode('utf-8'),('127.0.0.1',9000)) #接收数据
msg,addr = sk.recvfrom(1024)
print(msg.decode('utf-8')) sk.close()
# ### 服务端
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
#绑定地址
sk.bind(('127.0.0.1',9000)) #收发消息
while True:
#接收消息
msg,cli_addr = sk.recvfrom(1024)
print(msg.decode('utf-8'))
print(cli_addr)
message = input("服务端要发送的消息:")
sk.sendto(message.encode('utf-8'),cli_addr)
2.socketserver
# ### 客户端
import socket
sk = socket.socket()
sk.connect(('127.0.0.1',9000)) #收发数据的逻辑
while True:
sk.send(b"you can you up")
msg = sk.recv(1024)
print(msg.decode('utf-8')) sk.close()
# ### 服务端 import socketserver class MyServer(socketserver.BaseRequestHandler):
def handle(self):
#self.request => 建立三次握手返回的连接对象conn
#print(self.request)
#self.client_address = > 客户端的ip端口号
#print(self.client_address)
conn = self.request
while True:
#接收数据
msg = conn.recv(1024)
msg2 = msg.decode("utf-8")
print(msg2)
#发送数据
conn.send(msg2.upper().encode('utf-8'))
server = socketserver.ThreadingTCPServer(('127.0.0.1',9000),MyServer)
server.serve_forever()
3.文件校验hashlib
import hashlib
import random #基本用法
#(1) 创建一个md5算法的对象
hs = hashlib.md5()
#(2) 把要加密的字符串通过update更新到hs对象中运算
hs.update('123456'.encode()) #里面的数据是二进制字节流
#(3) 获取32位16进制的字符串
res = hs.hexdigest()
print(res,len(res)) #加盐(加key=>Xboy_ 加一个关键字配合原字符串,让密码更加复杂,不容易破解)
hs = hashlib.md5('XBoy_^'.encode())
hs.update('123456'.encode())
res = hs.hexdigest()
print(res,len(res)) #动态加盐
res = str(random.randrange(100000,1000000))
print(res)
hs = hashlib.md5(res.encode('utf-8'))
hs.update('123456'.encode())
res = hs.hexdigest()
print(res) #sha 算法
'''
sha 算出来的十六进制的串是40位,加密稍慢,安全性较高
md5 算出来的十六机制的串是32位,加密速度快,安全性一般
'''
hs = hashlib.sha1()
hs.update('123456'.encode())
res = hs.hexdigest()
print(res,len(res)) hs = hashlib.sha512()
hs.update('123456'.encode())
res = hs.hexdigest()
print(res,len(res)) # ### hmac
'''hmac 加密算法更加复杂,不容易破解'''
import hmac
#必须指定加盐
key = b'abc'
#密码
msg = b'123456'
hm = hmac.new(key,msg)
res = hm.hexdigest()
print(res,len(res)) #动态加盐
import os
'''
基本使用
urandom 返回随机的二进制字节流,参数:代表的长度
res = os.urandom(64)
print(res,len(res))
'''
key = os.urandom(32)
msg = b'123456'
hm = hmac.new(key,msg)
res = hm.hexdigest()
print(res,'<1>',len(res))
# ### 文件校验
import hashlib
hm = hashlib.md5()
hm.update('123'.encode())
res = hm.hexdigest()
print(res) '''
mode = r read(数字 -> 字符个数)
mode = rb read(数字 -> 字节个数) with open('ceshi2.txt',mode='rb') as fp:
res2 = fp.read(2)
print(res2)
''' #(1)针对于小文件进行内容校验
def check_md5(file):
with open(file,mode='rb') as fp:
hs = hashlib.md5()
hs.update(fp.read())
return hs.hexdigest() res1 = check_md5('ceshi1.txt')
res2 = check_md5('ceshi2.txt')
print(res1,res2) #(2) 针对于大文件进行内容校验
hs = hashlib.md5()
hs.update('今天是星期一'.encode())
res = hs.hexdigest()
print(res) ##a33fc073e6be76154e58874c4ac7cee1 hs = hashlib.md5()
hs.update('今天是'.encode())
hs.update('星期一'.encode())
res = hs.hexdigest()
print(res) #a33fc073e6be76154e58874c4ac7cee1 #方法一
def check_md5(file):
hs = hashlib.md5()
with open(file,mode='rb') as fp:
while True:
#read(5) 一次最多读取5个字节
content = fp.read(5)
#如果有内容就进行计算
if content:
#分配进行更新计算
hs.update(content)
else:
break
return hs.hexdigest()
print(check_md5('ceshi1.txt'))
print(check_md5('ceshi2.txt')) #方法二
import os
def check_md5(file):
hs = hashlib.md5()
#计算文件大小返回的字节的个数
file_size = os.path.getsize(file) #计算文件大小
with open(file,mode='rb') as fp:
while file_size:
#一次最多读取5个字节
content = fp.read(5)
hs.update(content)
#按照实际的读取个数进行相减
file_size -= len(content)
print(check_md5('ceshi1.txt'))
print(check_md5('ceshi2.txt'))
4.服务器合法校验
# ### 服务端1(公司)
import socket
import hmac
import hashlib
def auth(sk,secret_key):
#处理权限验证的逻辑
msg = sk.recv(32)
hm = hmac.new(secret_key.encode(),msg)
'''
#在不知道加密算法的时候,只知道秘钥也没用
hs = hashlib.md5(secret_key.encode())
hs.update(msg)
res = hs.hexdigest
'''
res = hm.hexdigest()
print(res)
sk.send(res.encode()) secret_key = '芝麻开门'
sk = socket.socket()
sk.connect(('127.0.0.1',9000)) #验证服务端
auth(sk,secret_key) #发送数据
sk.send('请求调用支付宝刷脸支付接口'.encode()) #关闭连接
sk.close()
# ### 服务端2(支付宝)
import socket
import hamc
import os def auth(conn,secret_key):
#随机产生32位二进制字节流
msg = os.urandom(32)
conn.send(msg)
hm = hmac.new(secret_key.encode(),msg)
res_server = hm.hexdigest()
print(res_serve)
res_client = conn.recv(1024).decode() if res_client == res_server:
print("是合法连接用户")
return True
else:
print("是不合法的连接用户")
return False sk = socket.socket()
sk.bind(('127.0.0.1',9000))
sk.listen() #三次握手
conn,addr = sk.accept() #设置秘钥
secret_key = '芝麻开门'
res = auth(conn,secret_key) #权限验证
if res:
print(conn.recv(1024).decode('utf-8')) #四次挥手
conn.close()
#退还端口
sk.close()
udp循环发消息,sockerserver,文件校验,服务器合法性校验---day29的更多相关文章
- socket 服务器向指定的客户端发消息
一.需求 需求如题. 当多个客户端连接服务器时,服务器如何给指定的客户端发送消息. 二.解决方案 核心思想: 在服务器端,需保存不同客户端的socket列表及客户端相关信息. socket含有发送方和 ...
- Springboot 使用 JSR 303 对 Controller 控制层校验及 Service 服务层 AOP 校验,使用消息资源文件对消息国际化
导包和配置 导入 JSR 303 的包.hibernate valid 的包 <dependency> <groupId>org.hibernate.validator< ...
- Spring Boot+Socket实现与html页面的长连接,客户端给服务器端发消息,服务器给客户端轮询发送消息,附案例源码
功能介绍 客户端给所有在线用户发送消息 客户端给指定在线用户发送消息 服务器给客户端发送消息(轮询方式) 项目搭建 项目结构图 pom.xml <?xml version="1.0&q ...
- Py-解决粘包现象,tcp实现并发,tcp实现传输文件的程序,校验思路,线程与进程
黏包现象 TCP粘包就是指发送方发送的若干包数据到达接收方时粘成了一包,从接收缓冲区来看,后一包数据的头紧接着前一包数据的尾,出现粘包的原因是多方面的,可能是来自发送方,也可能是来自接收方TCP接收到 ...
- udp和tcp特点 实现文件上传
本周课程安排: 网络编程结束 并发网络开头 进程 线程 IO模型 上周内容回顾: 1.osi七层:应用层,表示层,会话层,传输层,网络层,数据链路层,物理连接层 也有人把他们归纳为五层: 应用层, 传 ...
- C# Winform TCP发消息
服务端: 代码: using System; using System.Collections.Generic; using System.IO; using System.Net; using Sy ...
- 初识python:scoket 单用户互发消息
实现功能: 启动"服务器".通过"客户端1"连接"服务器",然后互发消息.在此过程中,有"客户端2"连接到"服 ...
- NIO【同步非阻塞io模型】关于 NIO socket 的详细总结【Java客户端+Java服务端 + 业务层】【可以客户端间发消息】
1.前言 以前使用 websocket来实现双向通信,如今深入了解了 NIO 同步非阻塞io模型 , 优势是 处理效率很高,吞吐量巨大,能很快处理大文件,不仅可以 做 文件io操作, 还可以做sock ...
- C# 通过WebService方式 IIS发布网站 上传文件到服务器
应用场景:要将本地的文件 上传到服务器的虚拟机上 网络环境:公司局域网(如下图中第二种) 开发环境:VS2010 服务器环境:WinServer2008 虚拟机环境:WinServer2008 ...
- 【代码笔记】Java深入学习——实现客户端发送文件到服务器的文件传输
Server.java package com.huaxin.lesson02; import java.io.FileOutputStream; import java.io.InputStream ...
随机推荐
- 【转帖】基于官方rpm包方式安装Oracle19c
https://blog.whsir.com/post-5489.html 本文基于Centos7.x环境,通过官方提供的rpm包来安装19c 1.下载Oracle19c安装包 https://w ...
- CentOS9上面使用rpm方式安装SQLServer2022的简单总结
CentOS9上面使用rpm方式安装SQLServer2022的简单总结 下载需要的资料 下载CentOS9 Stream的安装介质 https://mirrors.bfsu.edu.cn/cento ...
- OpenIM Open Source Instant Messaging Project Docker Compose Deployment Guide
The deployment of OpenIM involves multiple components and supports various methods including source ...
- Similarities:精准相似度计算与语义匹配搜索工具包,多维度实现多种算法,覆盖文本、图像等领域,支持文搜、图搜文、图搜图匹配搜索
Similarities:精准相似度计算与语义匹配搜索工具包,多维度实现多种算法,覆盖文本.图像等领域,支持文搜.图搜文.图搜图匹配搜索 Similarities 相似度计算.语义匹配搜索工具包,实现 ...
- 1.6 编写双管道ShellCode
本文将介绍如何将CMD绑定到双向管道上,这是一种常用的黑客反弹技巧,可以让用户在命令行界面下与其他程序进行交互,我们将从创建管道.启动进程.传输数据等方面对这个功能进行详细讲解.此外,本文还将通过使用 ...
- C/C++ 反汇编:流程控制与循环结构
反汇编即把目标二进制机器码转为汇编代码的过程,该技术常用于软件破解.外挂技术.病毒分析.逆向工程.软件汉化等领域,学习和理解反汇编对软件调试.系统漏洞挖掘.内核原理及理解高级语言代码都有相当大的帮助, ...
- Pdfium.Net.Free 一个免费的Pdfium的 .net包装器--快速入门
Pdfium.Net.Free 支持 .NETFramework 4.0 .NETFramework 4.5 .NETStandard 2.0 可以和PdfiumViewer.Free共同使用预览pd ...
- 性价比超频我都要 两大内存绝技带来20%性能提升!技嘉雪雕Z790 AORUS LITE AX-W主板评测
一.前言:主打性价比.两大内存绝技加持的技嘉Z790主板 要说现在最主流的装机方案,那必然是13代酷睿+700系主板.我们此前曾测试过技嘉的Z790钛雕主板,独有的顶级表现让人印象深刻,不过近6K的价 ...
- PHP实现字符串反转
方法一 用自带的函数strrev echo strrev('hello'); 方法二 自写循环方法 $str = 'hello'; $i = strlen($str); $newStr=''; whi ...
- Python脚本之批量复制文件并同时支持重命名
import os import shutil import time start_time = time.time() # 需要被复制的文件夹 old_path = r'C:\old_dir' ne ...