赞
踩
scapy 解析pcap数据包笔记
wireshark 抓的包,格式更新了,scapy不能直接解析
tcpdump -w 的包,scapy 可以直接解析
from scapy.all import * def analyzePcap(filepath): s1 = PcapReader(filepath) # data 是以太网 数据包 data = s1.read_packet() ip_packet = data.payload icmp_packet = ip_packet.payload payload = icmp_packet.payload original_payload = payload.original hex_payload = original_payload.hex() print(type(payload)) # <class 'scapy.packet.Raw'> print(type(original_payload)) # <class 'bytes'> print(type(hex_payload)) # <class 'str'> #print(type(data.payload)) #==><class 'scapy.layers.inet.IP'> 可以使用 help(scapy.layers.inet.IP) 查看帮助文档 analyzePcap('weird_pcap/linux_icmp_with_timestamp.pcap')
这里有一个python解析器 https://github.com/xiaxiaocao/pcap-parser 其他解析器也存在(dpkt),但要注意通信量可能是加密的。
http://fivezh.github.io/2016/05/31/Python-http-packet-parsing/
https://www.xmanblog.net/python-pcap/
Python解析pcap数据包
https://scapy.readthedocs.io/en/latest/usage.html#first-steps
https://github.com/isCharlesChang/WireWhale
基于Python3.6,Scapy2.4,可以侦听、解析、构造并发送数据包的多功能抓包软件。其中还包括的扩展功能有:流量监测及攻击检测(Land攻击,Ping of Death)。软件目前支持解析的协议有:IP, IPv6, ARP, TCP, UDP, ICMP, SSDP, ICMPv6主要协议及扩展头, TLS。
主要功能
对网络接口的数据包尽可能多的捕获,可以将网卡设置为混杂模式,然后进行数据包的采集;
对捕获的数据包进行一定的解析,将报文在网络层和传输层逐字段展开,对数据包的协议类型、源目的地址、数据包截获时间、数据包内容进行分析;
根据用户不同的要求能够依据特定指定地址、特定协议类型相关包等条件进行自定义监视;
针对应用进行流量监测,监测结果输出实时流量图显示,管理员可设置流量预警线,当应用流量超过预警线时自动报警;
系统提供了多种方式显示结果,如以饼状图的形式统计ARP报文、TCP报文、UDP报文ICMP报文进行统计,以柱状图的形式统计IPv4报文、IPv6报文进行统计,以折线图的形式实时显示具体应用流量;
实现数据包保存,便于日后分析,即将捕获到的数据包,可另存为一个文件,并能被本系统所读取和展示;
伪造报文实现网络反攻击或进行深入微调IP或传输层的域。
主要模块
数据报文采集模块:完成网络接口数据的捕获、解析,可以根据用户定义条件组合来进行捕获,如只监视采用TCP或UDP协议的数据包,也可以监视用户希望关注的相关IP地址的数据包,同时完成数据封包日志记录,提高了系统的灵活性。此外,对IP类型、ARP、TCP、UDP、ICMP的数量进行统计。
应用流量监测模块:获取当前正在运行的应用进程,用户可选择一个应用进行流量监测,获取应用中流量信息,同时对一些常见的入侵攻击特征进行判断,如根据源目的地址是否相同判断Land攻击、IP头部长度是否过长判断ping拒绝服务攻击,并发出预警。
报文伪造模块:可以自行构造Ether、IP、TCP、UDP、ICMP、ARP报文,并选择send()、sendp()、sr()、srl()、srloop()五种方式发送报文以实现简单攻击或对TCP/IP进行调试。
界面显示模块:设计系统主窗口即数据报文采集界面、应用流量监测界面、报文伪造界面。并完成报文统计图的显示,流量图的显示。
源代码结构
img 存放程序中使用的图标。
capture_core.py 抓包程序的后台文件,主要用来生成数据包的摘要信息、分析数据包的结构、程序状态处理、下载速度和上传速度的更新等。
flow_monitor.py 流量监控程序的后台服务代码,实时更新速度、应用流量的过滤及摘要信息的生成、更新应用的网络连接等。
forged_packet 用于构造数据包并发送,可自定义数据包的每个字段,实现网络攻击或网络欺骗等功能。
main_ui.py 抓包程序的GUI代码,包括了快捷键的绑定以及可自定义字体和背景图片、已抓到数据包的摘要信息的展示、显示某个数据包的详细信息和十六进制数据等功能。
main.py 程序的入口。
monitor_system.py 流量监控的GUI代码,用于查看网络连接速度等。
tools.py 工具代码,用于获取网卡的NIC、格式的转换、网络连接速度的获取。
data.json 用于存放程序的配置信息。
环境依赖
Linux & Windows:
在windows下,还需要
Linux & Windows:
使用方法
进入项目目录
主程序
单独打开伪造包程序
单独打开流量监测程序
部分功能介绍
主界面主要包括5个部分:
菜单栏
文件:文件保存、打开,软件退出。
编辑:可自行设置主窗体字体。
捕获:捕获数据包的流程。
分析:两大拓展功能,应用流量监测和伪造数据包。
统计:报文统计。
帮助:即使用手册和关于软件。
工具栏
界面初始时,根据程序运行状态转移图只有开始键可以响应。
设置了标志位:start_flag、pause_flag、stop_flag、save_flag,用于对程序中一些函数的使用添加限制。开始、暂停、停止、重新开始四个按钮全部按照下图逻辑设置在什么情况下可响应。
下面为部分状态截图
起始状态
运行状态
暂停状态
停止状态
过滤器以及网卡选择
页面初始化时网卡选择下拉框获取网卡信息进行显示,如下图所示,默认全选。
报文显示
根据报文类型显示不同颜色,以进行明显的区别。
报文解析以树状结构显示,层次结构清晰明了。
抓包简略信息显示框定时滑到最底部。
状态栏(显示当前网卡、实时收发包速度、上传下载速度)
数据统计模块:绘制图使用python下最流行的数据处理框架Matplotlib绘制要求的统计图。
IP地址类型统计,以柱状图显示:
ARP等协议报文数量饼状图统计:
部分截图
主程序
数据包伪造
流量监控
dot1q就是802.1q,是vlan的一种封装方式。vlan封装有2种协议DOT1Q和 ISL,DOT1Q和 ISL的区别:DOT1Q是各类产品的VLAN通用协议模式,Dot1q是一种普遍使用的标准,适用所有交换机与路由设备。ISL是CISCO设备的专用协议,适用于Cisco设备。
读文件
def test(filepath):
pcaps = rdpcap(filepath)
for p in pcaps:
print p.show()
break
muXTCP
Writing your own flexible Userland TCP/IP Stack - Ninja Style!!!
https://events.ccc.de/congress/2005/fahrplan/events/529.en.html
读文件
packet_consummer(pkt)这个参数指对抓到的每一个包进行packet_consumer()函数处理即协议分析函数处理。
流量监测和攻击检测(Land攻击,Ping of Death)
https://scapy.readthedocs.io/en/latest/api/scapy.layers.html
https://scapy.readthedocs.io/en/latest/api/scapy.packet.html
https://scapy.readthedocs.io/en/stable/build_dissect.html
用scapy解析出pcap文件的http报文
https://blog.csdn.net/Yuberhu/article/details/64123516
https://blog.csdn.net/jjonger/article/details/81275120
Python | 解析pcap文件分析HTTP Request/Response报文
http://fivezh.github.io/2016/05/31/Python-http-packet-parsing/
from scapy.all import * import scapy_http.http as http import requests import json pkts = rdpcap('test.pcap') req_list = [] for pkt in pkts: if TCP in pkt and pkt[TCP].fields['dport']==80 and pkt.haslayer(http.HTTPRequest): http_header = pkt[http.HTTPRequest].fields if 'Host' in http_header and '/article/content/' in http_header['Path']: req_url = 'http://' + http_header['Host'] + http_header['Path'] req_list.append(req_url) #print req_list print str(len(req_list)) + ' toutiao request url achieved.' f = open('result.log', 'w+') record = 'title' + '\t' + 'source' + '\t' + 'src_link' + '\t' + 'publish_time' + '\t' + 'req_link' + '\n' f.write(record) for url in req_list: res = requests.get(url).text res = json.loads(res) if 'data' not in res: continue if 'h5_extra' not in res['data']: continue h5_extra = res['data']['h5_extra'] title = h5_extra['title'] source = h5_extra['source'] src_link = h5_extra['src_link'] publish_time = h5_extra['publish_time'] record = title + '\t' + source + '\t' + src_link + '\t' + publish_time + '\t' + url + '\n' f.write(record.encode('utf-8')) f.close()
https://github.com/HatBoy/Pcap-Analyzer
1.展示数据包基本信息
2.分析数据包协议
3.分析数据包流量
4.绘制出访问IP经纬度地图
5.提取数据包中特定协议的会话连接(WEB,FTP,Telnet)
6.提取会话中的敏感数据(密码)
7.简单的分析数据包中的安全风险(WEB攻击,暴力破解)
8.提取数据报中的特定协议的传输文件或者所有的二进制文件
将项目从Python2.X移植到Python3.X
修复了多个Bug
我这个也不会,你自己再找找其他博文吧,你可以看看snort或是netflow,dpdk之类的处理流量相关的文章表情包我也是刚学的菜鸡
#! /usr/bin/env python
from scapy.all import *
def arp_monitor_callback(pkt):
if ARP in pkt and pkt[ARP].op in (1,2): #who-has or is-at
return pkt.sprintf("%ARP.hwsrc% %ARP.psrc%")
sniff(prn=arp_monitor_callback, filter="arp", store=0)
def pack_callback(packet):
print('-' * 50)
print('新包来了:'+nowTime(packet.time)+'\n')
p=packet
print("%s, dst: %s, src: %s, type: %s" %(p.name,p.dst,p.src,hex(p.type)))
if 'IP' in p:
ip=p.getlayer(IP)
print("%s,Version:%s,src:%s,dst:%s,proto:%s,TLL:%s" % (ip.name, ip.version, ip.src, ip.dst, str(ip.proto), str(ip.ttl)))
if 'TCP' in p:
tcp=p.getlayer(TCP)
print("%s,sport: %s,dport: %s, seq: %s, ack: %s, flags: %s" %( \
tcp.name,str(tcp.sport),str(tcp.dport),\
str(tcp.seq),str(tcp.ack),str(tcp.flags)))
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。