基于python3的tkinter和scapy可视化报文构造工具(四)

	前面已经将tkinter的界面相关知识已经介绍完了,其实tkinter用到的组件也不是很多,相信看完前面的三篇应该可以写一些简单的界面。本篇文章将正式进入报文构造和改包的学习。本工具选用的是python的第三方库scapy来进行相关功能实现,scapy需要自己安装,具体安装就不细讲了。学习任何的第三方库官方文档或者官方介绍当然是最佳的途径。scapy的官方介绍和用法https://scapy.readthedocs.io/en/latest/introduction.html。里面相关的用法非常详细,大家学习的过程中可以参考该链接。
	下面讲讲scapy的简单使用。

1,进入scapy
基于python3的tkinter和scapy可视化报文构造工具(四)
2,scapy支持众多的协议,这也是该款工具的强大之处。当然我们在此只用到了常用的TCP,IP协议。咱们可以看看scapy支持的协议。命令行ls()可看,使用 ls(IP()) 可以查看IP数据包可以有哪些参数,其他的协议大家可以自行尝试
基于python3的tkinter和scapy可视化报文构造工具(四)
基于python3的tkinter和scapy可视化报文构造工具(四)
3,用scapy如何构造报文,其实也很简单,使用 IP() 就可以创建一个默认的数据包,传入符合协议标准的参数即可构造自己想要的报文。如使用IP(src=“192.168.1.222”,dst=“192.168.1.111”) 来创建一个源地址是192.168.1.222目的地址是192.168.1.111的数据包。使用show()或者ls()方法都可以显示数据包。
基于python3的tkinter和scapy可视化报文构造工具(四)
4, 互联网报文是有网络七层结构的(有的也说五层),IP层上有TCP层,scapy构造报文使用 ‘/’ 操作符来给数据包加上一层。例如构造一个TCP数据包,在IP层指明数据包的目的地址。在TCP层可以设定数据包的目的端口等等,同样传输层的另一个常见协议UDP数据包也是同理。从下图可以看到如果不指定mac地址目的mac地址会默认使用组播地址。
基于python3的tkinter和scapy可视化报文构造工具(四)
5,例如构造一个完整的http-request报文. Ether()/IP(src=“192.168.1.222”,dst=“192.168.1.111”)/TCP(sport=1234,dport=80,flags=24)/“POST /index.html HTTP/1.1\r\nAccept-Encoding: gzip\r\nContent-Type: application/json\r\nConnection: keep-alive\r\nHost: ftz.com.cn\r\n”
基于python3的tkinter和scapy可视化报文构造工具(四)
6,有时候需要对现有的报文进行改动,首先则需要读取现有的报文。使用rdpcap(filepath)来读取报文,参数就是报文的路径。httpPkt是一个保存报文的列表,通过下标索引可以定位到具体的数据包,如取一个数据包httpPkt[0]
先用wireshark打开已经存在的报文
基于python3的tkinter和scapy可视化报文构造工具(四)
再看看用scapy读取的报文
基于python3的tkinter和scapy可视化报文构造工具(四)
7,如何写入一个数据包呢,首先pktdump = PcapWriter(savefile, append=True, sync=True)用PcapWriter返回一个写入的句柄,然后调用pktdump.write(pkt)来写入一个数据包
基于python3的tkinter和scapy可视化报文构造工具(四)
可以看看保存的报文
基于python3的tkinter和scapy可视化报文构造工具(四)
以上就是scapy的一些基本用法,当然还有其他很多的功能,大家根据需要自行去学习尝试,本工具构造报文和改包主要用到的就是上面的一些用法。手敲不易,如果转载请带上出处。

上一篇:数据包处理利器——Scapy基础知识


下一篇:python2.7使用scapy发送syn实例