一、介绍
Scapy是一个可以让用户发送、侦听和解析自定义网络报文的Python程序,比如只发物理层报文、只发icmp的报文等等,利用这个可以做很多在socket层数之下的小工具。
教程
二、Scapy下载安装
pip install scapy
三、使用方法
#导入库 #from scapy import * #linux from scapy.all import * #windows #生成各网络层的包 print("生成更网络层的包") eth_packet = Ether()#生成以太网包 ip_packet = IP() #生成以IP包 tcp_packet = TCP() #生成tcp包 udp_packet = UDP() #生成udp包 icmp_packet = ICMP()#生成icmp包 #查看包内容 print("查看包内容") raw(eth_packet)# 使用raw()方法查看 hexdump(ip_packet)#使用hexdump()查看。类似Wireshark Ether(raw(ip_packet))#raw()配合协议类查看。最佳 #raw()配合协议类查看。最佳 Ether(raw(ip_packet))# 查看该数据包以太网层内容(下层内容不层示,上层内容不解析只以load形式展示) IP(raw(ip_packet)) #自定义字段生成各网络层的包 print("自定义字段生成各网络层的包") print("在构造时直接传递参数") ip_packet = IP(src="10.10.6.92",ttl=128) IP(raw(ip_packet)) print("在生成后重新赋值") ip_packet.src = "10.10.6.93" ip_packet.ttl = 200 IP(raw(ip_packet)) print("同时自定义多层协议的字段") ip_packet = Ether(src="00:00:00:00:00:11")/IP(src="10.10.6.92") Ether(raw(ip_packet)) tcp_packet = Ether(src="00:00:00:00:00:11")/IP(src="10.10.6.92")/TCP(sport=1234) Ether(raw(tcp_packet)) app_packet = IP()/TCP()/"GET / HTTP/1.0\r\n\r\n" IP(raw(app_packet)) #包的发送接收 print("包的发送接收") print("发送") try: send(IP(dst="10.10.6.92")/ICMP()) except: print() try: sendp(Ether()/IP(dst="10.10.6.92")/ICMP()) except: print() print("发送并响应") try: rec_packet = sr1(IP(dst="10.10.6.92")/ICMP()/"abcdefg") rec_packet print("直接读取某项值") rec_packet.src print("使用show()方法格式化输出") rec_packet.show() except: print() #syn扫描 print("syn扫描") rec_packet = sr1(IP(dst="10.10.6.92")/TCP(dport=80,flags="S")) rec_packet.show()