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)可以用。主要是页面元素的检查、输入等。比如可以写一个脚本,自动登录百度页面,搜索某一个关键字,并且获得此关键字的百度搜索数量。