码云git地址:https://gitee.com/lougd/snifferview.git
编译完成的可执行文件: https://pan.baidu.com/s/1XapqLl7YgjkO5yhrNPqehg
作者联系方式: qq:412776488 mail:[email protected]
如果觉的这个工具对你有帮助请点个star,感谢!
这个工具的第一个版本是2015年做的,因为工作中经常要在不同的终端PC上抓包分析网络协议, 一直用的wireshark进行抓包分析,wireshark的安装包比较大,每次装起来太繁琐,也不支持回环网络封包的捕获,于是就起意自己做一个自己的封包协议分析工具。于是就有了这个工具的第一个版本。然后一边使用一边丰富工具的功能,就有了现在的这个版本。
该工具不是一个demo,是一个稳定,切实可用,功能比较完善的网络封包修改,分析工具,如果需要经常进行网络封包的捕获,分析,记录可以使用这个工具。
ComLib子工程: 基础功能静态库,给各个子功能提供通用的基础功能组件。 SnifferView子工程: 主功能模块,实现主要的功能,包括网络封包的嗅探,过滤语句编译解析器实现,网络协议的分析,数据流查看等等。 Dumper子工程: 异常捕获处理模块,捕获未处理异常并生成异常dump和异常日志,用于分析异常原因。 SyntaxView子工程: 语法高亮控件,基于Scintilla改造而成,目前用于展示tcp数据流数据。
本程序只有一个可执行程序,程序启动后即开始封包嗅探,但这时由于没有过滤语句,捕获到的封包会有很多,可以在主界面的过滤规则框中输入合适的过滤规则来捕获感兴趣的网络封包。具体的过滤规则和wireshark的类型,又做了一些优化,主要的规则如下。 SnifferView过滤规则: SnifferView的过滤语法举例: ip.addr==192.168.168.231 过滤ip源地址或者目标地址为192.168.168.231的网络封包 icmp 过滤icmp协议的封包 tcp.src==8345 过滤tcp源端口为8345的网络封包 tcp.length>128 过滤长度大于128字节的tcp封包,这个长度刨除ip头和tcp头 tcp contains "GET" 过滤内容中包含GET字符串的tcp封包 tcp[4:n32]==0x12ff 过滤tcp用户数据偏移4字节取一个32位数据大小为0x12ff的封包 tcp.flag.syn 过滤有syn标记的tcp封包 tcp[chars]=="GET" 过滤tcp用户数据偏移O字节为GET的封包 http 过滤http协议 http.get 过滤http的get协议 http.post 过滤http post协议 http.resp 过滤http的返回包 http.url contains "img" 过滤http的url中包含img字符串的封包 过滤规则的关键字: ip层:ip, ip.addr, ip.src, ip.dst, ip.length icmp层:icmp tcp层:tcp.port, tcp.src, tcp.dst, tcp.length,tcp.flag.syn|ack|fin|rst|psh|urg, tcp[a:b](a为偏移,b是具体的数据类型,没有a的意思是偏移为0), tcp contains “aaa”(包含字符串aaa的tcp封包) udp层:和tcp类似,不再赘述 应用层协议: http协议:http, http.get, http.post, http.head, http.options, http.put, http.delete, http.tarce, http.url contains "aaa"(http的url包含aaa的封包) 过滤规则的数据类型(用于tcp[a:b]或者udp[a:b]): n8(8位无符号整型),n16(16位无符号整型),n32(32位无符号整型),byte(同n8),bytes(byte列表),char(字符型),chars(字符串) 过滤规则的逻辑连接符: >(大于), <(小于), >=(大于等于), <=(小于等于), ==(等于), !=(不等于), &(按位与) 各个过滤表达式可以用and(&&)或者or(||)进行连接,可以使用小括号 比如获取长度大于128的GET包或者POST包: tcp.length>128 and (tcp[chars]==”GET” or tcp[chars]== “POST”) SnifferView语法相对wireshark的主要改进: wireshark过滤封包内容的时候语法是这样的tcp[a:b],a为偏移,b为匹配的长度,偏移是从tcp头开始的,并且tcp头还是变长的,并且只能按字节逐个匹配,用起来很不方便,我们通常关注的并不是tcp头中的内容,而是用户数据的内容,因此SnifferView过滤内容的时候偏移是从用户数据开始的,程序自动计算tcp头的长度,支持各种的数据类型的匹配,自动计算匹配的长度,如果匹配的字符串里有\n\r将自动换为回车和换行。 比如: tcp[4:n16]==0x33ee 从用户数据偏移4字节匹配一个16位整型数据,大小为0x33ee tcp[5:chars]=="aaaa" 从用户数据偏移5个字节匹配一个字符串aaaa 关于配置界面里的主机字节序和网络字节序: 选主机字节序的意思是封包里的数据是以主机字节序的方式存储的,选网络字节序的意思是封包里的数据是以网络字节序存储的。 比如: tcp[4:n32]==0x12345678 如果选的是主机字节序会从用户数据偏移4字节的地方开始依次匹配0x78,0x56,0x34,0x12 如果选的是网络字节序会从用户数据偏移4字节的地方开始依次匹配0x12,0x34,0x56,0x78
qq:412776488 mail:[email protected]
有问题或者好的建议可以联系作者,感谢!
[公告]安全服务和外包项目请将项目需求发到看雪企服平台:https://qifu.kanxue.com
最后于 1天前 被louguodong编辑 ,原因: