分享我做的一个封包嗅探和分析工具

lougd 2015-05-13 02:22:41
加精
【SnifferView界面】
主界面:


配置界面:


网卡选择界面:


【SnifferView介绍】

SnifferView是一款基于raw socket嗅探的网络封包嗅探,分析工具,它的特点如下:

通过raw嗅探获取ip层网路封包,绿色,精巧,不需要驱动,不需要安装,只有一个应用层的可执行文件大约300多KB

支持类似wireshark过滤器的过滤语句,并从一个普通程序员的角度出发做了一些调整和优化

网络封包的处理使用了多重缓存机制,不会因为封包的分析阻塞网络数据的接收

主界面大小可变,可以随意拖动,并且提供了gdi自绘的hex控件,支持高亮展示封包数据并且高亮内容支持配置

提供了网卡选择界面,可以通过配置嗅探你感兴趣网卡的网络封包

支持将嗅探到的网络封包保存成文件,支持封包文件数据的导入和分析

主界面网络封包的展示采取了特殊的处理,在网络流量很大的情况(2m/秒以上)或者封包总数很多的情况(总数超过50万条)下不会感到不流畅

PS:SnifferView嗅探网络数据需要admin权限,防火墙可能会影响嗅探结果,如果发现有部分封包不能正常的嗅探可以把防火墙关掉再试一下。

有BUG或者是瑕疵请告诉我,有好的过滤规则的点子也可以告诉我,如果好的话可以加进去。


【SnifferView过滤语法】

SnifferView的过滤语法举例:
ip.addr==192.168.168.231 过滤ip源地址或者目标地址为192.168.168.231的网络封包
tcp.port==8222 过滤tcp端口为8222的网络封包
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的封包

过滤规则的关键字:
ip层:ip, ip.addr, ip.srcaddr, ip.length
tcp层:tcp.port, tcp.srcport, tcp.dstport, tcp.length,tcp.flag.syn|ack|fin|rst|psh|urg, tcp[a:b](a为偏移,b是具体的数据类型,没有a的意思是偏移为0), tcp contains “aaa”(包含字符串aaa的tcp封包)
udp层: udp.port, udp.srcport, udp.dstport, udp.length, udp[a:b], udp contains “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

SnifferView下载链接:http://download.csdn.net/detail/u011391040/8695273
...全文
16746 76 打赏 收藏 转发到动态 举报
写回复
用AI写文章
76 条回复
切换为时间正序
请发表友善的回复…
发表回复
弱_智 2015-11-02
  • 打赏
  • 举报
回复
下载学习,多谢分享
tiankong_bear 2015-06-15
  • 打赏
  • 举报
回复
支持,下载一份看看
fhflover 2015-06-10
  • 打赏
  • 举报
回复
我也很好奇代码!
  • 打赏
  • 举报
回复
ztlw520 2015-05-28
  • 打赏
  • 举报
回复
赞一个
xusir98 2015-05-27
  • 打赏
  • 举报
回复
qq_28482839 2015-05-25
  • 打赏
  • 举报
回复
很不错呀...
qq_23908539 2015-05-23
  • 打赏
  • 举报
回复
什么时候才能像楼主那么牛逼
_sunshine 2015-05-22
  • 打赏
  • 举报
回复
hjzhlc 2015-05-22
  • 打赏
  • 举报
回复
很高级的样子
Carlven2012 2015-05-22
  • 打赏
  • 举报
回复
好东东。谢谢分享。
qq_27936447 2015-05-21
  • 打赏
  • 举报
回复
没有代码啊楼主。分享这个工具有啥意思呢?要就分享代码给各位观众参考下
lougd 2015-05-20
  • 打赏
  • 举报
回复
引用 62 楼 halswls 的回复:
quote=引用 59 楼 u011391040 的回复:] [quote=引用 57 楼 halswls 的回复:] 楼主,请问一下可以对modbus tcp进行抓包分析吗?
这个协议是基于tcp实现的吗?tcp封包是可以嗅探到的。[/quote] 想问问楼主怎么实现点让分析区的数据包高亮的?[/quote] 这个hex控件是用gdi自绘的,高亮是通过gdi绘制上去的。
halswls 2015-05-20
  • 打赏
  • 举报
回复
quote=引用 59 楼 u011391040 的回复:]
引用 57 楼 halswls 的回复:
楼主,请问一下可以对modbus tcp进行抓包分析吗?
这个协议是基于tcp实现的吗?tcp封包是可以嗅探到的。[/quote] 想问问楼主怎么实现点让分析区的数据包高亮的?
halswls 2015-05-20
  • 打赏
  • 举报
回复
quote=引用 59 楼 u011391040 的回复:]
引用 57 楼 halswls 的回复:
楼主,请问一下可以对modbus tcp进行抓包分析吗?

这个协议是基于tcp实现的吗?tcp封包是可以嗅探到的。[/quote]
想问问楼主怎么实现点让分析区的数据包高亮的?
lougd 2015-05-20
  • 打赏
  • 举报
回复
引用 64 楼 tangtangtangbaoli 的回复:
是基于libpcap的开源库上的吗?
不是,通过原始套接字抓的包,然后过滤算法是自己实现的。
tangtangtangbaoli 2015-05-20
  • 打赏
  • 举报
回复
是基于libpcap的开源库上的吗?
qq_18599547 2015-05-19
  • 打赏
  • 举报
回复
为什么不加入 拦截修改封包数据的功能呢?
lougd 2015-05-19
  • 打赏
  • 举报
回复
引用 57 楼 halswls 的回复:
楼主,请问一下可以对modbus tcp进行抓包分析吗?
这个协议是基于tcp实现的吗?tcp封包是可以嗅探到的。
lougd 2015-05-19
  • 打赏
  • 举报
回复
引用 56 楼 Sandrer 的回复:
其实我最想知道的是如何拦截底层的包...
这个是通过原始套接字获取的,再底层的话就要通过驱动来获取了,winpcap就行。
加载更多回复(55)

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧