1 Python版本的pcap存储内存数据过小,也就是说缓存不够,在高并发下容易发生丢包现象,其实C版本的也同样存在这样的问题,只不过Python版本的缓存实在是过低,让人很郁闷。
2 dpkt协议分析并非必须,如果你对RFC 791和RFC 793等协议熟悉的话,完全可以使用structunpack的方式进行分析。
如果你平常习惯使用tcpdump抓取数据包的话,完全可以使用它来代替pcap软件包,只不过我们需要利用tcpdump将抓取的数据以pcap格式进行保存,说道这里大家一定会想到Wireshark工具,具体命令如下:
tcpdump dst 1013202116 and tcp dst port 80 -s 0 -i eth1 -w /pcap/tcpdumppcap -C 1k -W 5
我们首先需要对pcap文件格式有所了解,具体信息大家可以参考其他资料文档,我这里只说其重要的结构体组成,如下:
sturct pcap_file_header
{
DWORD magic;
WORD version_major;
WORD version_minor;
DWORD thiszone;
DWORD sigfigs;
DWORD snaplen;
DWORD linktype;
}
struct pcap_pkthdr
{
struct timeval ts;
DWORD caplen;
DWORD len;
}
struct timeval
{
DWORD GMTtime;
DWORD microTime;
}
这里需要说明的一点是,因为在Python的世界里一切都是对象,所以往往Python在处理数据包的时候感觉让人比较麻烦。Python提供了几个libpcapbind,>本地是指浏览器客户端的话,可以在浏览器的文件打开方式里设置(比如Firefox就就可以设置某种类型的文件怎样打开,是直接下载还是用某个程序打开等)。如果你是指点击Web服务器端的pcap文件,然后在服务器端就解析这种文件格式,再以图形表格等数据显示出来传回浏览器端的话,那需要自己用Web服务器端的开发技术(PHP、Python等)写pcap的解析器(基本的解析估计Wireshark会有C语言的API)和绘图代码你可以先将你抓到的包保存到文件
主要代码:
/ 回调函数,用来处理数据包 /
void packet_handler(u_char dumpfile,const struct pcap_pkthdr header,const u_char pkt_data)
{
/ 保存数据包到堆文件 /
pcap_dump(dumpfile,header,pkt_data);
}
然后用wireshark 这款软件,打开文件你保存抓包信息的文件,查看你抓到的包
Wireshark(前称Ethereal)是一个网络封包分析软件
两种抓包模式
Spawn 模式,直接抓包
python r0capturepy -U -f 包名
Attach 模式,将抓包内容保存成pcap格式文件
python r0capturepy -U 包名 -p 文件名pcap
建议使用Attach模式,从感兴趣的地方开始抓包,并且保存成pcap文件,供后续使用Wireshark进行分析。
导入脚本项目
导入到Pycharm项目中
安装项目所需的包
pip install win_inet_pton
pip install hexdump
pip install loguru
在开启的命令行中两种方式的任意一种进行抓包,建议使用Attach模式,从感兴趣的地方开始抓包,并且保存成pcap文件。
开始抓包
获取应用包名
1adb shell am monitor
2启动需要获取包名的应用
3窗口就会打印出来当前应用的包名
给应用添加读取存储空间权限
启动frida-server
adb sehll
su
cd /data/local/tmp/
/frida-server &
ps | grep frida
Spawn 模式,直接抓包
Attach 模式,将抓包内容保存成pcap格式文件
先打开需要抓包的应用,然后在命令行输入
python r0capturepy -U comdianpingv1 -p 123pcap
Ctrl+C 结束,如果数据量很大的话,需要等待一会才能彻底关闭
分析数据
你直接抓 TCP/UDP 数据包,然后根据数据包内的 IP 地址,判断两个 IP 地址是否在同一个局域网内就 OK 了(这个你可以根据 IPV4 协议的私有地址来实现,即如果两个地址都是私有地址则说明是局域网数据包) winpcap混杂模式下抓包就可以抓到流经本
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)