python unpack_关于python中的struct.unpack()
感谢J.F.塞巴斯蒂安的提示。我终于弄明白了,要花点时间在这里解释。通常,我们必须在每个报头的结构中查找C类型,以了解在数据包的不同报头中的每个字段使用的C类型。然后,我们可以使用这个table来知道哪个格式说明符将表示哪个C类型。例如,在IP头的情况下,结构如下所示:struct ipheader {
unsigned char ip_hl:4, ip_v:4; /* this means that each member is 4 bits */
unsigned char ip_tos;
unsigned short int ip_len;
unsigned short int ip_id;
unsigned short int ip_off;
unsigned char ip_ttl;
unsigned char ip_p;
unsigned short int ip_sum;
unsigned int ip_src;
unsigned int ip_dst;
};
对于eg:unsigned char表示为“B”,unsigned int表示为“I”。现在我们可以使用这个方法来了解struct.unpack()中应该使用什么格式说明符来获取IP头的字段值。在IP报头的情况下,它变成如下:struct.unpack('!BBHHHBBHII')
但是你应该注意到大部分程序使用
struct.unpack('!BBHHHBBH4s4s')。
所以问题就来了,为什么在unsigned int ip_src;&;unsigned int ip_dst;的情况下,使用's'而不是'I'作为struct.unpack()中的格式说明符。原因是如果“I”用作格式说明符,那么unpack()方法将以整数形式返回IP地址(例如:3232267778)。然后必须将其转换为实际的IP地址形式(例如:10.0.0.1)。通常在internet上可用的嗅探器程序中,只需使用socket.inet_ntoa()获取实际ip地址。此方法接受字符串类型而不是整数类型。因此,这就是为什么在unsigned int的情况下,在struct.unpack()中使用's'而不是'I'作为格式说明符,以便稍后将结果馈送到socket.inet_ntoa(),以获得实际ip地址格式的ip地址。以太报头的情况类似。在struct.unpack()中,我们使用's'而不是'B',因为我们需要一个字符串,该字符串可以稍后馈送到binascii.hexlify(),以便以实际的MAC地址格式获取MAC。
python unpack_关于python中的struct.unpack()相关推荐
- 用python分析HTTP请求中各过程用时情况(通过分析抓包文件pcap实现)
HTTP卡扯皮终结工具,到底是哪个部分造成的卡?客户端?服务器?网络? 想通过抓包看HTTP过程中详细的用时情况,如: 建立TCP连接用了多少时间? 客户端发送GET/POST请求数据到服务器用了多少 ...
- python中pack函数,python中struct.pack()函數和struct.unpack()函數
python中的struct主要是用來處理C結構數據的,讀入時先轉換為Python的字符串類型,然后再轉換為Python的結構化類型,比如元組(tuple)啥的~.一般輸入的渠道來源於文件或者網絡的二 ...
- python unpack_python中struct.pack()函数和struct.unpack()函数
python中的struct主要是用来处理C结构数据的,读入时先转换为Python的字符串类型,然后再转换为Python的结构化类型,比如元组(tuple)啥的~.一般输入的渠道来源于文件或者网络的二 ...
- python中struct.unpack的用法
python中struct.unpack的用法 4/25/2009 12:18:21 PM Python中按一定的格式取出某字符串中的子字符串,使用struck.unpack是非常高效的. 1. 设置 ...
- Python天天美味(13) - struct.unpack
转载自:http://www.cnblogs.com/coderzh/archive/2008/05/04/1181462.html Python中按一定的格式取出某字符串中的子字符串,使用struc ...
- python 二进制流_Python中对字节流/二进制流的操作:struct模块简易使用教程
前言 前段时间使用Python解析IDX文件格式的MNIST数据集,需要对二进制文件进行读取操作,其中我使用的是struct模块.查了网上挺多教程都写的挺好的,不过对新手不是很友好,所以我重新整理了一 ...
- python中的struct模块
struct模块用于二进制和结构体之间的互相转化,此模块中大部分函数接受一个实现了Buffer协议的对象,最常见的实现了Buffer协议的对象包括bytes.bytearray等,大多数像byte数组 ...
- python struct.unpack和struct.pack详解
Python相关文档链接: https://docs.python.org/3/library/struct.html#format-characters 简介 struct模块用于将外部压缩的格式字 ...
- linux smb 所有者,python-3.x - 在Linux上使用python从smb共享中获取文件的所有者。 - SO中文参考 - www.soinside.com...
这简直不是一件小事,可惜答案并不像我希望的那样简单. 如果以后有人会被这个同样的问题困扰,我就把这个答案贴出来,但希望也许有人能早点贴出更好的解决方案来 为了找到主人,我用 本库及其实例:from s ...
- python短时傅里叶变换_python中的短时傅里叶变换
我想在wav文件中获得每个时刻的最大功率频率. 所以我使用scipy的fft在Python中编写了STFT.我使用了scipy的kaiser窗口函数.一切看起来都很好,但是我的输出看起来很奇怪.它有一 ...
最新文章
- C#异步编程的实现方式(6)——层次任务
- ecmall开发记录(三)
- 基于matlab的人脸五官边缘检测方法,基于MATLAB的人脸识别系统的设计
- 为什么只有360公开支持华为系统,其他公司都不敢表态?
- Xshell配置ssh免密码登录-密钥公钥(Public key)
- iOS开发多线程篇—线程的状态
- 个人所得税如何填写最划算?
- python实现自动打电话软件_电销自动打电话app
- 上海图书馆e卡通阅读器差强人意
- 经典的破解安全论坛,你会在这些论坛学习更多的知识。
- P4173 残缺的字符串(FFT)
- Pygame实战:Python趣味编程之我的兔子终于变了游戏啦
- OSChina 周二乱弹 ——有一天你当了程序员巴巴
- linux系统无法网上看视频文件,重橙网络:Flash Player 发布重要更新,Win7 以下/Linux/Mac 不再支持视频格式内容播放...
- Involution-Convolution
- php uploadify上传文件
- Java实现多图片和文字编辑成一张图片
- 创建一个vue-cli项目到运行的完整流程
- 阿里云OSS集成百度Ueidtor
- 自适应方案:在vue项目中使用postcss-px2rem