感谢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()相关推荐

  1. 用python分析HTTP请求中各过程用时情况(通过分析抓包文件pcap实现)

    HTTP卡扯皮终结工具,到底是哪个部分造成的卡?客户端?服务器?网络? 想通过抓包看HTTP过程中详细的用时情况,如: 建立TCP连接用了多少时间? 客户端发送GET/POST请求数据到服务器用了多少 ...

  2. python中pack函数,python中struct.pack()函數和struct.unpack()函數

    python中的struct主要是用來處理C結構數據的,讀入時先轉換為Python的字符串類型,然后再轉換為Python的結構化類型,比如元組(tuple)啥的~.一般輸入的渠道來源於文件或者網絡的二 ...

  3. python unpack_python中struct.pack()函数和struct.unpack()函数

    python中的struct主要是用来处理C结构数据的,读入时先转换为Python的字符串类型,然后再转换为Python的结构化类型,比如元组(tuple)啥的~.一般输入的渠道来源于文件或者网络的二 ...

  4. python中struct.unpack的用法

    python中struct.unpack的用法 4/25/2009 12:18:21 PM Python中按一定的格式取出某字符串中的子字符串,使用struck.unpack是非常高效的. 1. 设置 ...

  5. Python天天美味(13) - struct.unpack

    转载自:http://www.cnblogs.com/coderzh/archive/2008/05/04/1181462.html Python中按一定的格式取出某字符串中的子字符串,使用struc ...

  6. python 二进制流_Python中对字节流/二进制流的操作:struct模块简易使用教程

    前言 前段时间使用Python解析IDX文件格式的MNIST数据集,需要对二进制文件进行读取操作,其中我使用的是struct模块.查了网上挺多教程都写的挺好的,不过对新手不是很友好,所以我重新整理了一 ...

  7. python中的struct模块

    struct模块用于二进制和结构体之间的互相转化,此模块中大部分函数接受一个实现了Buffer协议的对象,最常见的实现了Buffer协议的对象包括bytes.bytearray等,大多数像byte数组 ...

  8. python struct.unpack和struct.pack详解

    Python相关文档链接: https://docs.python.org/3/library/struct.html#format-characters 简介 struct模块用于将外部压缩的格式字 ...

  9. linux smb 所有者,python-3.x - 在Linux上使用python从smb共享中获取文件的所有者。 - SO中文参考 - www.soinside.com...

    这简直不是一件小事,可惜答案并不像我希望的那样简单. 如果以后有人会被这个同样的问题困扰,我就把这个答案贴出来,但希望也许有人能早点贴出更好的解决方案来 为了找到主人,我用 本库及其实例:from s ...

  10. python短时傅里叶变换_python中的短时傅里叶变换

    我想在wav文件中获得每个时刻的最大功率频率. 所以我使用scipy的fft在Python中编写了STFT.我使用了scipy的kaiser窗口函数.一切看起来都很好,但是我的输出看起来很奇怪.它有一 ...

最新文章

  1. C#异步编程的实现方式(6)——层次任务
  2. ecmall开发记录(三)
  3. 基于matlab的人脸五官边缘检测方法,基于MATLAB的人脸识别系统的设计
  4. 为什么只有360公开支持华为系统,其他公司都不敢表态?
  5. Xshell配置ssh免密码登录-密钥公钥(Public key)
  6. iOS开发多线程篇—线程的状态
  7. 个人所得税如何填写最划算?
  8. python实现自动打电话软件_电销自动打电话app
  9. 上海图书馆e卡通阅读器差强人意
  10. 经典的破解安全论坛,你会在这些论坛学习更多的知识。
  11. P4173 残缺的字符串(FFT)
  12. Pygame实战:Python趣味编程之我的兔子终于变了游戏啦
  13. OSChina 周二乱弹 ——有一天你当了程序员巴巴
  14. linux系统无法网上看视频文件,重橙网络:Flash Player 发布重要更新,Win7 以下/Linux/Mac 不再支持视频格式内容播放...
  15. Involution-Convolution
  16. php uploadify上传文件
  17. Java实现多图片和文字编辑成一张图片
  18. 创建一个vue-cli项目到运行的完整流程
  19. 阿里云OSS集成百度Ueidtor
  20. 自适应方案:在vue项目中使用postcss-px2rem

热门文章

  1. gcc用-O0优化无问题,-O3优化时程序崩溃的问题
  2. 什么是Bounding Box、anchor box?
  3. Java十进制转换为二进制
  4. collapse mode 严重_Android工具栏collapseMode问题
  5. ecu故障现象_分析及检修汽车ECU常见故障
  6. 设计模式四:用一个生产手机的简单例子说清楚工厂模式
  7. windows系统清除电脑地址栏文件(夹)路径
  8. cogs 2235 烤鸡翅
  9. 【Scratch 3.0游戏】—— 乒乓弹球游戏
  10. Spring -> Spring Boot、Spring MVC 和 Spring 有什么区别