python3 crc8校验-3步实现计算

Python021

python3 crc8校验-3步实现计算,第1张

最近项目中用到了跟硬件通信的crc8校验,花了点时间研究了一下python的crc8校验,但是一直没有找到好的技术突破。

google了一番,昨天测试了网上的几种方法都不正确,确定了使用crcmod库来实现,参考官方文档和国内的一遍文章,具体如下:

http://crcmod.sourceforge.net/crcmod.predefined.html#class-predefinedcrc

http://blog.csdn.net/snoop_lttx/article/details/53674657

其实python3 只需要3步即可实现crc8校验,官方有crc8,但是默认是crc-8不是我要找的crc-8-maxim,而crcmod库是支持多种crc8计算的。

下面我是采用crc-8-maxim算法的,多项式:x8+x5+x4+1(二进制为100110001),0x31

正确运行结果为:0xd6

下面我们使用在线crc校验工具测试一下:

http://www.ip33.com/crc.html

测试截图如下:

到此我们完成了crc8校验和。

目前有三种方式实现转换:

关于crc8的理论,本文不再赘述了。可以参考以下文章:

http://blog.csdn.net/haifengid/article/details/51753181

实验拓扑如下,linux向R2发送IP分片,并在R2接口上抓包。

  ICMP包校验和是连通头部信息加数据本身一起进行校验(ip包只需要校验头部信息)而Scapy自动添加ICMP校验和时只会计算第一分片的数据,当三个分片到达目标主机进行重组后校验不通过,将重组后的数据包丢弃;因此在手动设置IP分片时,需要手动将校验和添加入ICMP首部中。

由于手动计算校验和过程较复杂,可通过wireshark抓包,可以获取到正确的校验和。

抓包结果如下,由于单个数据包长度超过MTU,系统自动将ICMP request包分片发送,同样的ICMP reply系统也进行了分片。

  当主机发送分组的长度超过MTU又不可以分片(IP flags位DF置1),则这个分组丢弃,并用ICMP差错报文向主机报告。

参考:( https://fasionchan.com/network/ip/fragmentation/ )

用python做自动化测试,主要是接口测试和UI自动化测试。一、接口测试:http协议的举例:可以用python自带的urllib\urllib2模拟,模拟前端向服务器发送数据,获取返回值后,进行校验和判断来进行接口测试。网上的例子也比较多,这里简单说一下,比如request中data的边界值测试、字符测试、非空为空测试等等,都可以做二、UI自动化测试:html页面(python+selenium)或者一些安卓app(python+appiun)可以用。主要是页面元素的检查、输入等。比如可以写一个脚本,自动登录百度页面,搜索某一个关键字,并且获得此关键字的百度搜索数量。