解决沾包问题:python 中网络编程中C/S架构中通过 struck模块制作固定长度的报头 ,从而得到传输数据的总共长度

Python socket长连接、心跳、重连、自定义二进制数据报文 讲述Python socket长连接、心跳、重连、自定义二进制数据报文,以及代码实现。 阅读详情

沾包问题的解决----- 

 

struck模块 使用:

# 制作固定长度的报头 一个整型--->固定长度的bytes对象
import struct
obj = struct.pack('i',1111111)  # 生成一个bytes对象
print(obj,len(obj),type(obj))

b = struct.unpack('i',obj)
print(b)
print(b[0])
结果:

b'G\xf4\x10\x00' 4 <class 'bytes'>
(1111111,)
1111111

实例运用:

server 端:

# 制作固定长度的报头
total_size = len(stdout)+len(stderr)
header = struct.pack('i',total_size) # 将total_size做成客户端可以接受的固定长度
# 发送报头(指定长度)发送给客户端
conn.send(header) # 长度为4

# 把命令的结果返回给客户端
conn.send(stdout)
conn.send(stderr)

client 端:

# 1 首先接受固定长度的报头
header = socket_obj.recv(4)
# 2再解码报头,拿到数据的长度
total_size = struct.unpack('i', header)[0]
# 3 接受真实的数据
recv_size = 0
recv_data = b''
while recv_size < total_size:
    res = socket_obj.recv(1024)
    recv_data += res
    recv_size += len(res)

 

python 解析pcap数据长度 # -*- coding: UTF-8 -*- import dpkt import collections # 有序字典需要的模块 import time def main(file_path): f = open(file_path, 'rb') #python3 pcap = dpkt.pcap.Reader(f) # 先按.pcap格式解析,若解析不了,则按pcapng格式解析 all_pcap_data = collections.OrderedDict(). 阅读详情

相关推荐

python网络基础:STRUCT模块定制报文,实现FTP上传功能

一、struct模块 python中struct 模块用于python数据结构与C结构之间的相互转换,其中C结构是用一种格式化字符串表示的,学习struct 模块的难点就在这个格式化字符串上,强烈建议最好了解下C语言结构体的相关知识点,如果比较熟悉C语言结构体及对齐,学习struct 模块轻而易举。 官方英文文档:struct — Interpret strings as packed binar...

金鞍少年的博客 532

python二进制转化模块struct

在pyton中,通过struct模块来对二进制进行转换,主要括两大类函数,即用于打的pack和用于解的unpack。 其中,struct.pack的输入格式为struct.pack(format, v1, v2, ...),其中format为格式字符串,v1,v2..为将要转成bytes的字符。 例如 >>> import struct >>> struct.pack('i', 15) b'\x0f\x00\x00\x00' >>> struct.

微小冷的学习笔记 2871

python之路---网络篇之socket

什么是socket socket是应用层与传输层之间(TCP/IP通信协议)的中间软件抽象层,它是一组接口,将复杂的TCP/IP等协议隐藏在简单的接口之后,我们只要使用socket去编程,自然而然就是遵循TCP/UDP协议的。 两个家族 基于文件型的(AF_UNIX)与基于网络型的(AF_INET)  套接字工作流程 要使用套接字,肯定要知道其工作流程 基本模板 # ...

风中琉璃 324

python中用struct打

格式字符串由格式字符和对应的数据类型组成。解数据: 使用struct模块的unpack函数可以将字节流解成指定格式的数据。unpack函数的第一个参数是格式字符串,用于指定解的数据类型和字节顺序,第二个参数是要解的字节流。打数据: 使用struct模块的pack函数可以将数据打成指定格式的字节流。pack函数的第一个参数是格式字符串,用于指定打的数据类型和字节顺序,后面的参数是要打的数据。struct模块提供了一些函数,用于将数据转换为特定的字节流格式,或者将字节流解析为特定的数据类型。

weixin_49577420的博客 770

python3 tcp自定制报头

发送时: 先发报头长度(dict->json.dumps序列号(json字符串)->bytes->struct.pack打) 再编码报头内容然后发送(dict->json字符串->bytes) 最后发真实内容 接收时: 先接收报头长度,用struct取出来(struct.unpack解) 根据取出的长度收取报头内容,然后解码,反序列化(...

ddxr5515的博客 738

python socket 先读取长度,在读取报文内容

tlpmts1:~/sbin # cat test9105.py # -*- coding: utf-8 -*- import SocketServer import socket import time import sys reload(sys) print time.ctime() sys.setdefaultencoding('utf-8') class SMSsendx (obje...

zhaoyangjian724的专栏 3726

python笔记(报文,hmac,socketservr,复习)

一、报文 1、我们在网络上传输的所有数据都叫数据 2、数据里的数据都叫报文 3、报文里不止有你的数据 还有:ip地址,mac地址,端口号 4、所有的报文都有报头(能告诉你接收多少个字节) 5、自己定制报文: (1) 在复杂的应用上就会用到 (2)传输文件:文件的名字,文件的大小,文件的类型,储存路径 head = {‘filename’:‘test’,‘filesize’:40966,‘fil...

小小龙的博客 280

python(12-4 网络编程 ---HTTP协议 报文收发结构 )

HTTP简介 HTTP协议主要工作在客户端-服务端的架构上,浏览器作为HTTP客户端通过URL向HTTP服务端即 WEB服务器发送请求,服务器根据接受到的请求,向客户端发送相应信息 超文本传输协议 超文本(Hyper Text) 含有超链接(Link)和各种多媒体元素标记(Markup)的文本。这些超文本文件彼此链接,形成网状(Web),因此又被称为网页(Web Page)

userez的博客 850

python定制报文发送与回特定取值

-_- 无FCUK说....需求使用Python编写一个脚本,实现向特定端口发送特定的探测payload报文,根据响应,取特定字节范围的字符进行输出实例这里就以工控设备:Mitsubishi(三菱) Q系列PLC CPU型号识别 作为案例其实,在之前写的文章 Nmap NSE开发之三菱Q系列PLC以太网识别 之中已经可以得出大体的设计思路向设备的5007 TCP...

KEY0NE的个人博客 447

python的socket发送和接收大数据

本文介绍了python发送和接收大数据的思路: 发送方提供要发送数据的长度,接收方根据数据长度,循环接收数据,直到全部接收。并采用自定义的header结构体,保证每次数据传送的独立。 发送方代码示例: # 自定义header def build_header(data_len): header = {'data_len': data_len} return json.dumps(header).encode('UTF-8') # 发送报文 def send(client, message):

johnny0316的博客 5897

python收发报文_使用Python发送和接收MQ,利用,python,收发

一、收发MQ基础引入stomp,# -*- coding: utf-8 -*-import stompimport time,randomfrom cmd.util import timePaserport = 700ip='10.13.69.16'passcode='8JiPUndN'queue_name = '/topic/SampleQueue'topic_name = '/topic/c...

weixin_34875640的博客 1416

Python使用struct处理二进制(pack和unpack用法)

python有时需要处理二进制数据,例如 存取文件,socket操作时.这时候,可以使用python的struct模块来完成.可以用struct来处理c语言中的结构体. struct模块中最重要的三个函数是pack(), unpack(), calcsize # 按照给定的格式(fmt),把数据封装成字符串(实际上是类似于c结构体的字节流) pack(fmt, v1, v2, ...

JackyOps 5万+

实例struct.pack打文件、解文件(图像)

背景 之前一篇论文代码使用此方式将数据进行了打,然后再训练,实际上这种方式处理数据集能够提升读取耗费的时间。但是由于电脑性能有限,不得不将打文件的方式替换掉,故也查了下这种方式打数据的思路,以后备用。代码未细致整理,但是亲测可用。祝好! 代码 打 import os import struct # 判断文件夹中是否有目标类型图片,没有则返回0 def is_image_file(filename): # 如果不都为空、0、false,则any()返回true return

Alocus的博客 2195

python struct_python 用struct模块解决问题

为什么会出现黏现象:首先只有在TCP协议中才会出现黏现象,是因为TCP协议是面向流的协议,在发送的数据传输的过程中还有缓存机制来避免数据丢失,因此,在连续发送小数据的时候,以及接收大小不符的时候容易出现黏现象。本质还是因为我们在接收数据的时候不知道发送的数据的长短。解决问题在传输大量数据之前首先告诉接收端要发送的数据大小,如果想更漂亮的解决问题,可以通过struct模块来定制协议。str...

weixin_33812391的博客 220

python之struct

最近在写一个tcp的服务端,交互的报文是字节流。 在python中解析字节流,那就是必须用到struct,但是在使用过程中发现一个问题。 那就是使用struct.pack的时候发现拼出来的字符串和自己想得到的不一样。 比如下面这段代码: import struct import binascii import dis print '5sI len is:',struct.calcs

zt3032的博客 753

struct pack 打可变长度

这段代码的作用是将变长的数据打成二进制格式。具体来说,它使用了Python的struct模块中的pack函数,将数据长度和数据本身打成一个二进制字符串。I{length}s'是pack函数的格式化字符串,其中'!'表示使用网络字节序,'I'表示使用4字节无符号整数,'{length}s'表示使用长度为length的字符串。最后,打后的二进制字符串被输出到控制台。

act50的专栏 531
上一篇: python-shelve模块详解-------可以用类似字典的形式持久化存储
下一篇: python终端打印带颜色的print
Python_bh
博客等级 码龄7年 11粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值