wireshark 过滤截取的数据包中哪些是801.11协议中所谓的Null帧

转载地址:
1.1学习VOIP软件X-Lite的使用;
1.2学习SIP协议的工作流程;
1.3了解VOXALOT的工作机制;
1.4练习使用wireshark抓包软件;
1.5利用wireshark抓包软件分析SIP协议的通信过程
PC: win7;
CPU: Intel Core2&&
内存:2G;
主频:2.0GHz
wireshark: v 1.2.6
VOIP软件 :X-Lite Version 3.0 build 56125
概念简述:
:会话发起协议(Session
Initiation Protocol)是一个应用层的信令控制协议。用于创建、修改和释放一个或多个参与者的会话。这些会话可以好似Internet多媒体会议、IP电话或多媒体分发。会话的参与者可以通过组播(multicast)、网状单播(unicast)或两者的混合体进行通信。
SDP:会话描述协议(Session
Description Protocol或简写SDP)描述的是流媒体的初始化参数。此协议由IETF发表为
RFC 2327。
RFC:Request
For Comments (RFC),是一系列以编号排定的文件。文件收集了有关因特网相关资讯,以及UNIX和因特网社群的软件文件。目前RFC文件是由Internet
Society(ISOC)所赞助发行。基本的因特网通讯协定都有在RFC文件内详细说明。RFC文件还额外加入许多的论题在标准内,例如对于因特网新开发的协定及发展中所有的记录。因此几乎所有的因特网标准都有收录在RFC文件之中。RFC(Request
For Comments)-意即“请求评议”,包含了关于Internet的几乎所有重要的文字资料。
.RTP:实时传送协议(Real-time
Transport Protocol或简写RTP)。RTP协议详细说明了在互联网上传递音频和视频的标准数据包格式。它一开始被设计为一个多播协议,但后来被用在很多单播应用中。RTP协议常用于流媒体系统(配合RTSP协议),视频会议和一键通(Push
to Talk)系统(配合H.323或SIP),使它成为IP电话产业的技术基础。RTP协议和RTP控制协议RTCP一起使用,而且它是建立在用户数据报协议上的。
.RTCP:实时传输控制协议(Real-time
Transport Control Protocol或RTP Control Protocol或简写RTCP)是[[实时传输协议|实时传输协议(RTP)]]的一个姐妹协议。RTCP由RFC
3550定义(取代作废的RFC 1889)。RTCP为RTP媒体流提供信道外(out-of-band)控制。RTCP本身并不传输数据,但和RTP一起协作将多媒体数据打包和发送。RTCP定期在流多媒体会话参加者之间传输控制数据。RTCP的主要功能是为RTP所提供的服务质量(Quality
of Service)提供反馈。
.SIP通信概述:
客户端注册过程
刚启动X-Lite的时候,X-Lite会将本地号码注册到相应的域名服务器上。注册过程如下图所示:
发送注册request
我们假设Alice向Bob发起会话请求,则过程如下图所示:
会话发起过程
a)Alice首先发起一个INVITE数据包到其代理服务器,如上图中INVITE F1;每个INVITE数据包包头含有如下数据域:
图(5)INVITE数据包包含域
lVia:Alice用来接收响应包的终端地址。因为,在SIP协议中,是允许主叫方重定位此次通话的。也即是,可以允许主叫方用A手机拨打C的号码,但是却通知C将信息传到B手机。该域中还包括一个branch,用来标识此次交互。
lMax-Forwards:该域表示包被允许传送的最大通信距离
lTo:被叫方的ID
lFrom:主叫方ID
lCall-ID:基于”To”和”From”的会话ID。和前两者共同标识一个唯一的会话
lCSeq:标识在一次会话中request发送的个数
lContact:标识数据包发起者
lContent-Type:标识数据包内容的类型
lContent-Length:标识数据包内容的长度
b)Alice的代理端收到Alice的请求之后,会要求Alice对自己的身份进行认证。
这个认证过程如下图所示:
代理端向Alice发送认证请求包407
Alice出示证件
c)Alice的代理端将INVITE路由到Bob的代理端,并返回一个100 Trying数据包
代理端通过INVITE数据包中的”To”域,获取到INVITE的下一个目的地址,即Bob的代理端。然后将该数据包转发出去。而后,再向自己的上一跳返回一个100
Trying数据包,通知Alice,连接正在建立中。
d)Bob的代理端将INVITE转发给Bob,并返回100 Trying数据包
Bob的代理端在收到INVITE后,通过本地数据库查找到Bob,然后将该INVITE数据包发给Bob。同时返回一个100 Trying数据包给上一跳。
e)Bob接受Alice的呼叫,并返回180 Ring和200 OK
数据包到Alice
Bob收到从自己的代理端来的INVITE并开始响铃。同时,将响铃信号发送给代理端,代理端。之后,该Ringing包将沿着INVITE的逆向路径到达Alice。如果,Bob在接到响铃后,接听电话,那么Bob的客户端将发送一个200
OK包,该包到达Alice的路径和上面的Ringing数据包的路径一样。此时连接其实已经建立起来。
f)Alice返回ACK确认,从而建立起连接
Alice收到相应的200 OK包之后,将向Bob返回一个ACK包进行确认。到此,该连接正式建立起来。
在建立起会话之后,通信双方通过各自的代理服务器进行通信。通信的内容则采用一种称作RTP的协议来传输。通信的内容:可以包括语音、视频和电子邮件。
会话结束动作可以由通信双方中的任何一端发起。会话结束动作由数据包BYE标识。一旦某个用户收到BYE包,那么就会返回一个ACK数据包,从而彻底中断连接
搭建实验平台,获得sip账号
通过美国的远程服务器实现点到点通话
局域网内注册成为sip Server并分配分机
登录局域网内的sip server成功注册本分机
局域网内作为分机与另一分机通话
去官网下载wiresharp软件
)运行安装程序,即可完成安装
a)去官方网站下载X-Lite
/x-lite.html
b)运行下载好的安装程序,即可完成安装。
为了使得我们能够顺利利用X-Lite进行免费通话,我们需要到VOXALOT去注册账号。该账号的作用类似于我们的手机号码。
注册VOXALOT的网站:
本次实验中,我注册的账号为:198772
服务器为:
&&& Display Name: 本地显示用户名
User Name: 申请的账号名
Password: 账号对应的口令
Authorization user name: 采用默认(空白)
Domain: 服务器端域名
proxy: 代理端域名
Dialing plan: 采用默认设置
u运行wireshark,启动wireshark,设置正确的抓包规则,开始抓包.
u拨打对方电话,进行通话
获取对方的号码之后,按照正常拨打电话的流程即可完成电话的拨打。
u结束通话,分析数据包
在结束通话之后,停止wireshark抓包动作。在Filter域中输入”sip”。
局域网内注册成为sip Server并分配分机
启动minisipserver,自动将服务器ip配置为当前主机ip,并分配四个分机100,101,102,103
用户100和101注册成功,miniSipServer的MySql数据库中自动记录用户100和101的ip地址,便于在以后的通信中查找102用户的地址。
用户注册过程中抓包如下:
局域网内作为分机与另一注册过的分机通话
在结束通话之后,停止wireshark抓包动作。在Filter域中输入”sip”。
客户端向服务器端注册
从上图中可以看出,客户端在启动的时候,会主动向服务器端注册。注册过程如下:
a) 客户端向服务器端发送Request REGISTER数据包,请求注册,该包的SIP头如下:
b) 服务器端需要客户端出示证明,因此针对上面的注册包,返回一个401包;
c) 客户端再次向服务器端发起Request REGISTER数据包,请求认证,其SIP头如下:
从上面两幅图中可以看出,第二次申请认证的数据包中,明显多了一个Authorization域。
d)& 针对上面的申请,服务器端返回一个Status 200 OK包,表示通过认证。
e)& 注册成功后,客户端向服务器端查询当前的连接状况,因此发送Request SUBSCRIBE
同样服务器端要求客户端再次出示“证件”,于是发送了Status: 407 Proxy Authentication Required
客户端再次发起查询数据包,并在其中添加相应的认证,如下图所示:
&客户端之间建立连接
从上面的数据可以看出通信流程:
a) 客户端向服务器端发送Request INVITE数据包,请求和198771建立连接
服务器端转发相应的INVITE数据包(上图中没反映出来),并且向客户端返回一个100 Trying数据包
当被呼叫端发出Ring信后号,代理端再返回相应的Ring数据包
当被呼叫端接受呼叫后,发出Status 200 OK数据包,并被代理端转发到客户端
6.3&客户端之间通信
当经过上述步骤,建立连接之后,就开始双方的通信过程。通信过程中使用RTP协议进行通信数据的传送。
上图中所示即为双方通信过程。其中111.186.57.199为主叫服务器IP;111.186.57.3为被呼叫客户端IP。
通过和上面连接建立时的图片相比较,可以发现,当经过代理端建立连接之后的通话数据包将不再通过代理端传输,而是直接在通话双方之间传输。这个是非常合理的,因为双方经过连接建立过程已经相互得知对方的IP地址,因此就没有必要再通过服务器端来传送数据包。这样使得通话的实时性更加可靠。
由于使用miniserver的sip协议过程与上述过程大致相似,本论文中不进行详细分析。
6.4通话音频还原
WireShark自身就集成有语音播放器,可以播放通话中的语音信息。(之前的VoIP界面点击Player进入,解码后如下图所示)
图12.WireShark Player
此外,通过WireShark强大的功能与相关格式转换工具Cool Edit,我们能够成功地将储存在RTP报文中的语音信息还原。
具体为选取通话中的RTP报文,进入Telephony-&RTP-&Stream Analysis。
图13.Stream Analysis工具
然后将之通过Save payload转化为.raw格式的音频文件,最终通过Cool Edit软件进行格式转换,转换成wav格式。
在试验过程中,我发现通过wireshark自带的Telephony功能,只能够将抓获的通话数据包还原,但是不能播放还原之后的数据包中的声音,只有当X-lite开启record功能时,才能正确截取数据包中的声音。然而当我做完实验,与别人交流时,却发现有些同学在做实验时,X-lite没有开启record功能也能正确截取数据包中的声音,该问题是我大为困惑。后来仔细比对之后,才明白是软件问题。虽然X-lite和3CX
Phone的Server-Client软件都能成功地进行VOIP电话,然而WireShark进行报文截取及报文分析过程中,虽然能够识别SIP协议的相关报文,并能作出流程图,但却无法识别具体通话中所使用的RTP。在WireShark中显示“Unknown RTP version”,可能是X-Lite使用的RTP版本与WireShark不兼容。导致WireShark无法根据RTP报文还原出语音。
通过此次实验,我学到了如下东西:
a) Wireshark软件的使用
电话的使用
对SIP协议有了一个比较深入的认识
对VOIP的通话过程和工作原理也有了比较侧地的认识。
由于是大二学生,以前并没有接触过wireshark软件,导致本实验开始时困难重重。但是在学长们的帮助下,还是顺利完成了实验,并且收获不小。
注:由于本次实验进行了多次,而且每次地点不同,导致IP地址也各不相同。而且由于对wirreshark软件的深入了解,声音提取实验是在之后的实验中进行的。所以原始报文比较多,不好意思……
附录1:SIP常见数据包类型和作用
Request: Invite
邀请对方参与会话
数据包头中各域的解释:
记录SIP的版本/使用传输协议,以及会话发起者。
记录此次会话
Max-Forwards:最大传输跳数
本机的IP地址以及正在使用的传输协议
呼叫的目的方
From:呼叫的发起方
Call-ID:标识此次通话的ID;
它和To、From唯一标识一个会话
CSeq:每次发起request,该域就增加1;同时后面标识使用的method,该包的作用
Content-Type:描述数据包的内容
Content-Length:内容message body长度。以8进制计数,单位为byte
Status 407
代理端要求客户端认证
Request:ACK
针对上面407的回复
Status:100 Trying
通知上一跳节点正在为之转发数据包
Status:477
下一条出错
Request:SUBSCRIBE
查询当前的服务否可用
Status:200 OK
标识对请求的肯定回答
Request:NOTIFY
在subscribe查询过程中,如果会话状态发生改变,则发出的通知包,收到这个数据包的节点会返回一个Status
Request:REGISTER
客户端向代理端发起注册请求
Status: 401
代理端不接受发客户端注册请求包中的证书信息。之后,客户端可以通过回复Status 200,来“强制”代理端查看相应的信息
Request:CANCEL
用于结束一次呼叫请求request
Status: 603
被叫端拒绝连接
Status: BYE
作用同CANCEL,但是不需要OK进行确认
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:32692次
积分:753分
排名:千里之外
原创:36篇
转载:45篇
评论:15条
(2)(1)(2)(4)(3)(6)(2)(2)(4)(2)(4)(5)(9)(7)(7)(3)(13)(6)维基百科,自由的百科全书
Wireshark(前称Ethereal)是一个网络分析软件。网络数据包分析软件的功能是截取网络数据包,并尽可能显示出最为详细的网络数据包数据。
在过去,网络数据包分析软件是非常昂贵,或是专门属于营利用的软件,Wireshark的出现改变了这一切。在的保障范围底下,使用者可以以免费的代价取得软件与其代码,并拥有针对其源代码修改及定制化的权利。Wireshark是目前全世界最广泛的网络数据包分析软件之一。
1997年底,Gerald Combs需要一个能够追踪网络流量的工具软件作为其工作上的辅助。因此他开始撰写Ethereal软件。
Ethereal 在经过几次中断开发的事件过后,终于在1998年7月发布其第一个版本 v0.2.0。自此之后,Combs收到了来自全世界的补丁、错误回报与鼓励邮件。Ethereal的发展就此开始。不久之后,Gilbert Ramirez 看到了这套软件的开发潜力并开始参予低级程序的开发。1998年10月,来自 Network Appliance 公司的 Guy Harris 在查找一套比 (另外一套网络数据包截取程序)更好的软件。于是他也开始参与Ethereal的开发工作。
1998年底,一位在教授
课程的讲师 Richard Sharpe,看到了这套软件的发展潜力,而后开始参与开发与加入新协议的功能。在当时,新的通信协议的制定并不复杂,因此他开始在Ethereal上新增的数据包截取功能,几乎包含了当时所有。
自此之后,数以千计的人开始参与Ethereal的开发,多半是因为希望能让Ethereal截取特定的,尚未包含在Ethereal默认的网络协议的数据包而参予新的开发。
2006年6月,因为商标的问题,Ethereal更名为Wireshark。
以下是一些使用Wireshark目的的例子:
网络管理员使用Wireshark来检测网络问题
网络安全工程师使用Wireshark来检查信息安全相关问题
开发者使用Wireshark来为新的通信协议除错
普通使用者使用Wireshark来学习网络协议的相关知识
Wireshark不是(Intrusion Detection Software, IDS)。对于网络上的异常流量行为,Wireshark不会产生警示或是任何提示。然而,仔细分析Wireshark截取的数据包能够帮助使用者对于网络行为有更清楚的了解。
Wireshark不会对网络数据包产生内容的修改 - 它只会反映出目前流通的数据包信息。 Wireshark本身也不会提交数据包至网络上。
《实战数据包分析:使用Wireshark》wireshark能截取路由工作信息吗_百度知道
wireshark能截取路由工作信息吗
wireshark能截取路由工作信息比说截取发送密码
我有更好的答案
按默认排序
恩发送报文明文发送能截取
其他类似问题
wireshark的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁您尚未  &
Pages: ( 1/2 total )
本页主题: 用哪些软件可截取报文?
级别: 普通会员
发帖: 4843
威望: 934 点
财富: 416 论坛币
活期存款: 655
定期存款: 34000
总资产: 35071 论坛币
在线时间:6580.9(小时)
注册时间: 10:46
最后登录: 22:18
用哪些软件可截取报文?
用哪些软件可截取报文?请你列示名称及下载链接或提供下载附件,请不要重复其他会员的列示。
netbooking
级别: 普通会员
发帖: 3884
威望: 52 点
财富: 474 论坛币
活期存款: 0
定期存款: 12000
总资产: 12474 论坛币
在线时间:4725.8(小时)
注册时间: 10:01
最后登录: 23:25
ieHTTPHeaders
(221 K) 下载次数:150
本帖最近评分记录:财富:+5(hn0733zxc) 感谢分享
netbooking
级别: 普通会员
发帖: 3884
威望: 52 点
财富: 474 论坛币
活期存款: 0
定期存款: 12000
总资产: 12474 论坛币
在线时间:4725.8(小时)
注册时间: 10:01
最后登录: 23:25
老鹰集团纯绿色网络嗅探器 GSocketAnalyzerLite v2.1.0
本帖最近评分记录:财富:+5(hn0733zxc) 感谢分享
级别: 普通会员
发帖: 9892
威望: 31 点
财富: 111 论坛币
活期存款: 8602
定期存款: 16000
总资产: 24713 论坛币
在线时间:12866.2(小时)
注册时间: 22:31
最后登录: 17:34
HttpAnalyerV2
(999 K) 下载次数:87
(869 K) 下载次数:74
本帖最近评分记录:财富:+5(hn0733zxc) 感谢分享
netbooking
级别: 普通会员
发帖: 3884
威望: 52 点
财富: 474 论坛币
活期存款: 0
定期存款: 12000
总资产: 12474 论坛币
在线时间:4725.8(小时)
注册时间: 10:01
最后登录: 23:25
GBooksHttpAM
本帖最近评分记录:财富:+5(hn0733zxc) 感谢分享
级别: 普通会员
发帖: 3752
威望: 38 点
财富: 224 论坛币
活期存款: 497
定期存款: 85000
总资产: 85721 论坛币
在线时间:7069.3(小时)
注册时间: 10:23
最后登录: 22:30
1.一回车获取cookie和str,为读秀JPG下载器 SSLIBDTXZ V1.5版2.基于winpcap的websniffer3.老鹰集团纯绿色网络嗅探器 GSocketAnalyzerPro v2.1.04. 浏览器&打洞工具 SnowFoxPro v1.8.0[ 此贴被miaoziao在 18:39重新编辑 ]
本帖最近评分记录:财富:+10(hn0733zxc) 感谢分享
级别: 普通会员
发帖: 5170
威望: 52 点
财富: 119 论坛币
活期存款: 2088
定期存款: 20888
总资产: 23095 论坛币
在线时间:3625.7(小时)
注册时间: 19:46
最后登录: 21:13
与3楼的重复
By:hn0733zxc
论坛就有好用的免费利器嗅探报文的利器--HttpAnalyzer免安装汉化绿色版
级别: 论坛版主
发帖: 6155
威望: 559 点
财富: 337 论坛币
活期存款: 0
定期存款: 6666
总资产: 7003 论坛币
在线时间:3290.3(小时)
注册时间: 11:43
最后登录: 08:27
WinSock Expert v0.6 beta1汉化、免杀
本帖最近评分记录:财富:+5(hn0733zxc) 感谢分享
netbooking
级别: 普通会员
发帖: 3884
威望: 52 点
财富: 474 论坛币
活期存款: 0
定期存款: 12000
总资产: 12474 论坛币
在线时间:4725.8(小时)
注册时间: 10:01
最后登录: 23:25
IE Inspector HTTP Analyzer
本帖最近评分记录:财富:+4(hn0733zxc) 感谢分享
级别: 普通会员
威望: 5 点
财富: 201 论坛币
活期存款: 4264
定期存款: 16480
总资产: 20945 论坛币
在线时间:1994.5(小时)
注册时间: 10:02
最后登录: 08:25
用C#下的Raw Socket编程实现网络封包监视 用C#下的Raw Socket编程实现网络封包监视  谈起socket编程,大家也许会想起QQ和IE,没错。还有许多网络工具如P2P、NetMeeting等在应用层实现的应用程序,也是用socket来实现的。Socket是一个网络编程接口,实现于网络应用层,Windows Socket包括了一套系统组件,充分利用了Microsoft Windows 消息驱动的特点。Socket规范1.1版是在1993年1月发行的,并广泛用于此后出现的Windows9x操作系统中。Socket规范2.2版(其在Windows平台上的版本是Winsock2.2,也叫Winsock2)在 1996 年 5 月发行,Windows NT 5.0及以后版本的Windows系统支持Winsock2,在Winsock2中,支持多个传输协议的原始套接字,重叠I/O模型、服务质量控制等。  本文向大家介绍Windows Sockets的一些关于用C#实现的原始套接字(Raw Socket)的编程,以及在此基础上实现的网络封包监视技术。同Winsock1相比,Winsock2最明显的就是支持了Raw Socket套接字类型,使用Raw Socket,可把网卡设置成混杂模式,在这种模式下,我们可以收到网络上的IP包,当然包括目的不是本机的IP包,通过原始套接字,我们也可以更加自如地控制Windows下的多种协议,而且能够对网络底层的传输机制进行控制。  在本文例子中,我在nbyte.BasicClass命名空间实现了RawSocket类,它包含了我们实现数据包监视的核心技术。在实现这个类之前,需要先写一个IP头结构,来暂时存放一些有关网络封包的信息:  [StructLayout(LayoutKind.Explicit)]  public struct IPHeader  {   [FieldOffset(0)] public byte ip_ //I4位首部长度+4位IP版本号   [FieldOffset(1)] public byte ip_ //8位服务类型TOS   [FieldOffset(2)] public ushort ip_ //16位数据包总长度(字节)   [FieldOffset(4)] public ushort ip_ //16位标识   [FieldOffset(6)] public ushort ip_ //3位标志位   [FieldOffset(8)] public byte ip_ //8位生存时间 TTL   [FieldOffset(9)] public byte ip_ //8位协议(TCP, UDP, ICMP, Etc.)   [FieldOffset(10)] public ushort ip_ //16位IP首部校验和   [FieldOffset(12)] public uint ip_ //32位源IP地址   [FieldOffset(16)] public uint ip_ //32位目的IP地址  }  这样,当每一个封包到达时候,可以用强制类型转化把包中的数据流转化为一个个IPHeader对象。  下面就开始写RawSocket类了,一开始,先定义几个参数,包括:   private bool error_ //套接字在接收包时是否产生错误   public bool KeepR //是否继续进行   private static int len_receive_ //得到的数据流的长度   byte [] receive_buf_ //收到的字节   private Socket socket = //声明套接字  还有一个常量:  const int SIO_RCVALL = unchecked((int)0x);//监听所有的数据包  这里的SIO_RCVALL是指示RawSocket接收所有的数据包,在以后的IOContrl函数中要用,在下面的构造函数中,实现了对一些变量参数的初始化:   public RawSocket() //构造函数   {   error_occurred=   len_receive_buf = 4096;   receive_buf_bytes = new byte[len_receive_buf];   }  下面的函数实现了创建RawSocket,并把它与终结点(IPEndPoint:本机IP和端口)绑定:   public void CreateAndBindSocket(string IP) //建立并绑定套接字   {   socket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);   socket.Blocking = //置socket非阻塞状态   socket.Bind(new IPEndPoint(IPAddress.Parse(IP), 0)); //绑定套接字   if (SetSocketOption()==false) error_occurred=   }  其中,在创建套接字的一句socket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);中有3个参数:  第一个参数是设定地址族,MSDN上的描述是“指定 Socket 实例用来解析地址的寻址方案”,当要把套接字绑定到终结点(IPEndPoint)时,需要使用InterNetwork成员,即采用IP版本4的地址格式,这也是当今大多数套接字编程所采用一个寻址方案(AddressFamily)。  第二个参数设置的套接字类型就是我们使用的Raw类型了,SocketType是一个枚举数据类型,Raw套接字类型支持对基础传输协议的访问。通过使用 SocketType.Raw,你不光可以使用传输控制协议(Tcp)和用户数据报协议(Udp)进行通信,也可以使用网际消息控制协议 (Icmp) 和 Internet 组管理协议 (Igmp) 来进行通信。在发送时,您的应用程序必须提供完整的 IP 标头。所接收的数据报在返回时会保持其 IP 标头和选项不变。  第三个参数设置协议类型,Socket 类使用 ProtocolType 枚举数据类型向 Windows Socket API 通知所请求的协议。这里使用的是IP协议,所以要采用ProtocolType.IP参数。  在CreateAndBindSocket函数中有一个自定义的SetSocketOption函数,它和Socket类中的SetSocketOption不同,我们在这里定义的是具有IO控制功能的SetSocketOption,它的定义如下:   private bool SetSocketOption() //设置raw socket   {   bool ret_value =   try   {   socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, 1);   byte []IN = new byte[4]{1, 0, 0, 0};   byte []OUT = new byte[4];    //低级别操作模式,接受所有的数据包,这一步是关键,必须把socket设成raw和IP Level才可用SIO_RCVALL   int ret_code = socket.IOControl(SIO_RCVALL, IN, OUT);   ret_code = OUT[0] + OUT[1] + OUT[2] + OUT[3];//把4个8位字节合成一个32位整数   if(ret_code != 0) ret_value =   }   catch(SocketException)   {   ret_value =   }   return ret_   }  其中,设置套接字选项时必须使套接字包含IP包头,否则无法填充IPHeader结构,也无法获得数据包信息。  int ret_code = socket.IOControl(SIO_RCVALL, IN, OUT);是函数中最关键的一步了,因为,在windows中我们不能用Receive函数来接收raw socket上的数据,这是因为,所有的IP包都是先递交给系统核心,然后再传输到用户程序,当发送一个raws socket包的时候(比如syn),核心并不知道,也没有这个数据被发送或者连接建立的记录,因此,当远端主机回应的时候,系统核心就把这些包都全部丢掉,从而到不了应用程序上。所以,就不能简单地使用接收函数来接收这些数据报。要达到接收数据的目的,就必须采用嗅探,接收所有通过的数据包,然后进行筛选,留下符合我们需要的。可以通过设置SIO_RCVALL,表示接收所有网络上的数据包。接下来介绍一下IOControl函数。MSDN解释它说是设置套接字为低级别操作模式,怎么低级别操作法?其实这个函数与API中的WSAIoctl函数很相似。WSAIoctl函数定义如下:  int WSAIoctl(   SOCKET s, //一个指定的套接字   DWORD dwIoControlCode, //控制操作码   LPVOID lpvInBuffer, //指向输入数据流的指针   DWORD cbInBuffer, //输入数据流的大小(字节数)   LPVOID lpvOutBuffer, // 指向输出数据流的指针   DWORD cbOutBuffer, //输出数据流的大小(字节数)   LPDWORD lpcbBytesReturned, //指向输出字节流数目的实数值   LPWSAOVERLAPPED lpOverlapped, //指向一个WSAOVERLAPPED结构   LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine//指向操作完成时执行的例程  );  C#的IOControl函数不像WSAIoctl函数那么复杂,其中只包括其中的控制操作码、输入字节流、输出字节流三个参数,不过这三个参数已经足够了。我们看到函数中定义了一个字节数组:byte []IN = new byte[4]{1, 0, 0, 0}实际上它是一个值为1的DWORD或是Int32,同样byte []OUT = new byte[4];也是,它整和了一个int,作为WSAIoctl函数中参数lpcbBytesReturned指向的值。  因为设置套接字选项时可能会发生错误,需要用一个值传递错误标志:   public bool ErrorOccurred   {   get   {   return error_   }   }  下面的函数实现的数据包的接收:   //解析接收的数据包,形成PacketArrivedEventArgs事件数据类对象,并引发PacketArrival事件   unsafe private void Receive(byte [] buf, int len)   {   byte temp_protocol=0;   uint temp_version=0;   uint temp_ip_srcaddr=0;   uint temp_ip_destaddr=0;   short temp_srcport=0;   short temp_dstport=0;   IPAddress temp_      PacketArrivedEventArgs e=new PacketArrivedEventArgs();//新网络数据包信息事件   fixed(byte *fixed_buf = buf)   {   IPHeader * head = (IPHeader *) fixed_//把数据流整和为IPHeader结构   e.HeaderLength=(uint)(head-&ip_verlen & 0x0F) && 2;      temp_protocol = head-&ip_   switch(temp_protocol)//提取协议类型   {   case 1: e.Protocol=&ICMP&;   case 2: e.Protocol=&IGMP&;   case 6: e.Protocol=&TCP&;   case 17: e.Protocol=&UDP&;   default: e.Protocol= &UNKNOWN&;   }   temp_version =(uint)(head-&ip_verlen & 0xF0) && 4;//提取IP协议版本   e.IPVersion = temp_version.ToString();   //以下语句提取出了PacketArrivedEventArgs对象中的其他参数   temp_ip_srcaddr = head-&ip_   temp_ip_destaddr = head-&ip_   temp_ip = new IPAddress(temp_ip_srcaddr);   e.OriginationAddress =temp_ip.ToString();   temp_ip = new IPAddress(temp_ip_destaddr);   e.DestinationAddress = temp_ip.ToString();   temp_srcport = *(short *)&fixed_buf[e.HeaderLength];   temp_dstport = *(short *)&fixed_buf[e.HeaderLength+2];   e.OriginationPort=IPAddress.NetworkToHostOrder(temp_srcport).ToString();   e.DestinationPort=IPAddress.NetworkToHostOrder(temp_dstport).ToString();   e.PacketLength =(uint)   e.MessageLength =(uint)len - e.HeaderL   e.ReceiveBuffer=   //把buf中的IP头赋给PacketArrivedEventArgs中的IPHeaderBuffer   Array.Copy(buf,0,e.IPHeaderBuffer,0,(int)e.HeaderLength);   //把buf中的包中内容赋给PacketArrivedEventArgs中的MessageBuffer   Array.Copy(buf,(int)e.HeaderLength,e.MessageBuffer,0,(int)e.MessageLength);   }   //引发PacketArrival事件   OnPacketArrival(e);   }  大家注意到了,在上面的函数中,我们使用了指针这种所谓的不安全代码,可见在C#中指针和移位运算这些原始操作也可以给程序员带来编程上的便利。在函数中声明PacketArrivedEventArgs类对象,以便通过OnPacketArrival(e)函数通过事件把数据包信息传递出去。其中PacketArrivedEventArgs类是RawSocket类中的嵌套类,它继承了系统事件(Event)类,封装了数据包的IP、端口、协议等其他数据包头中包含的信息。在启动接收数据包的函数中,我们使用了异步操作的方法,以下函数开启了异步监听的接口:  public void Run() //开始监听  {  IAsyncResult ar = socket.BeginReceive(receive_buf_bytes, 0, len_receive_buf, SocketFlags.None, new AsyncCallback(CallReceive), this);  }  Socket.BeginReceive函数返回了一个异步操作的接口,并在此接口的生成函数BeginReceive中声明了异步回调函数CallReceive,并把接收到的网络数据流传给receive_buf_bytes,这样就可用一个带有异步操作的接口参数的异步回调函数不断地接收数据包:   private void CallReceive(IAsyncResult ar)//异步回调   {   int received_   received_bytes = socket.EndReceive(ar);    Receive(receive_buf_bytes, received_bytes);   if (KeepRunning) Run();   }  此函数当挂起或结束异步读取后去接收一个新的数据包,这样能保证让每一个数据包都能够被程序探测到。  下面通过声明代理事件句柄来实现和外界的通信:  public delegate void PacketArrivedEventHandler(Object sender, PacketArrivedEventArgs args);  //事件句柄:包到达时引发事件  public event PacketArrivedEventHandler PacketA//声明时间句柄函数  这样就可以实现对数据包信息的获取,采用异步回调函数,可以提高接收数据包的效率,并通过代理事件把封包信息传递到外界。既然能把所有的封包信息传递出去,就可以实现对数据包的分析了:)不过RawSocket的任务还没有完,最后不要望了关闭套接字啊:   public void Shutdown() //关闭raw socket   {   if(socket != null)   {   socket.Shutdown(SocketShutdown.Both);   socket.Close();   }   }  以上介绍了RawSocket类通过构造IP头获取了包中的信息,并通过异步回调函数实现了数据包的接收,并使用时间代理句柄和自定义的数据包信息事件类把数据包信息发送出去,从而实现了网络数据包的监视,这样我们就可以在外部添加一些函数对数据包进行分析了。
级别: 普通会员
威望: 5 点
财富: 201 论坛币
活期存款: 4264
定期存款: 16480
总资产: 20945 论坛币
在线时间:1994.5(小时)
注册时间: 10:02
最后登录: 08:25
sniffer 4.75 sp5 PORTABLE V4.7.5 SP5.rar[ 此贴被hn0733zxc在 08:43重新编辑 ]
本帖最近评分记录:财富:+4(hn0733zxc) 感谢分享
级别: 普通会员
发帖: 1403
威望: 13 点
财富: 146 论坛币
活期存款: 568
定期存款: 0
总资产: 714 论坛币
在线时间:5076.1(小时)
注册时间: 00:00
最后登录: 11:33
GSocketAnalyzerLite2.0.2.exe个人觉得这个比升级版GSocketAnalyzerLite v2.1.0好用可惜2.02好像没看到链接了。2.02可以探测指定选项。2.1.0自动探测所有,这样很费内存。
(997 K) 下载次数:88
(997 K) 下载次数:74
(997 K) 下载次数:64
(989 K) 下载次数:67
本帖最近评分记录:财富:+5(hn0733zxc) 感谢分享
级别: 普通会员
发帖: 2313
威望: 58 点
财富: 154 论坛币
活期存款: 1900
定期存款: 28000
总资产: 30054 论坛币
在线时间:6619.6(小时)
注册时间: 00:00
最后登录: 21:58
HttpFox(FireFox add on)既简单,又好用。
本帖最近评分记录:财富:+3(hn0733zxc) 感谢分享
级别: 普通会员
发帖: 7864
威望: 82 点
财富: 265 论坛币
活期存款: 3000
定期存款: 33333
总资产: 36598 论坛币
在线时间:11273.6(小时)
注册时间: 01:15
最后登录: 23:16
CxCandyEnt1.6 build100505自带截取报文功能。
本帖最近评分记录:财富:+5(hn0733zxc) 感谢分享
级别: 普通会员
发帖: 2313
威望: 31 点
财富: 31 论坛币
活期存款: 887
定期存款: 0
总资产: 918 论坛币
在线时间:5177.2(小时)
注册时间: 21:53
最后登录: 21:00
网络嗅探器(影音神探) httplook
本帖最近评分记录:财富:+5(hn0733zxc) 感谢分享
级别: 普通会员
发帖: 7864
威望: 82 点
财富: 265 论坛币
活期存款: 3000
定期存款: 33333
总资产: 36598 论坛币
在线时间:11273.6(小时)
注册时间: 01:15
最后登录: 23:16
作者:icanfly软件名称:bookinfo v1.5功能:读取bookinfo信息+基于socket的智能嗅探报头功能使用说明:嗅探浏使用方法: 1. 用阅读器打开图书,等待第一页显示出来 2. 打开本程序,再激活阅读器窗口(如,点一下阅读器窗口) 3. 弹出本程序界面如图,用户可以对相关信息进行修改(除非超星阅读器的信息是错的,否则不需要) 4. 在需要的信息旁边点击&复制&即可复制到剪贴板 览器报头功能,支持Maxthon1、Maxthon2、IE6、IE7、ssreader。相关链接:
本帖最近评分记录:财富:+5(hn0733zxc) 感谢分享
dingdangch
级别: 灌水达人
发帖: 10045
威望: 100 点
财富: 1117 论坛币
活期存款: 14265
定期存款: 100000
总资产: 115382 论坛币
在线时间:11182.5(小时)
注册时间: 23:29
最后登录: 14:49
Smartsniff我来推荐一款相当好用的小软。呵呵。 &
本帖最近评分记录:财富:+5(hn0733zxc) 感谢分享
不会游泳的鱼儿。。
级别: 原创达人
威望: 32 点
财富: 1764 论坛币
活期存款: 10000
定期存款: 0
总资产: 11764 论坛币
在线时间:511.5(小时)
注册时间: 22:35
最后登录: 21:02
前面已经有很多朋友推荐了,但是觉得比较混乱,所以也上来说两句。就截获报文而言,其实也是应该按TCP/IP协议先分个层级出来才好比较的。1、数据包层级(相当于TCP/IP数据链路层向上走)经典软件:Sniffer Pro、IRIS、Wireshark,分别对应于windows和linux等各种平台,真正从底层起拦截网络数据包,还可以做综合网络分析和统计,以及TCP/IP协议学习的辅助工具,个人爱好IRIS。2、套接字层级(相当于TCP/IP传输层向上、应用层向下)不针对于某种具体应用,但同时不对数据包包头、包身格式做进一步的分析。代表软件除了上面提到的winsock expert外,推荐一款socksmon,以往5.x版本是共享软件,现在由无花果编程驿站推出的2010新版已是免费软件,虽然有了新的特点,但是软件稳定性降低了,可是做socks分析还是一款不可多得的好软件。3、HTTP层级(相当于TCP/IP应用层)仅仅针对HTTP协议,对于其他的如UDP、ICMP等等全部忽略。这里面软件就很多了,如果要说还可以继续划分为基于winpcap和独立注入的。一边举一个代表吧:EffeTech Http Sniffer、HttpAnalyzer,推荐后者,现更名为IE Inspector HTTP Analyzer,希望汉化了老版的兄弟能够利用以往的资源继续汉化新版,新版加入了对json的支持,以及可以编辑参数列表,同时建议修补一下以前汉化过度的一些问题,比如GET、HEAD、POST这些就不要汉化了。4、已经没有了层级,但是为了让大家更好区分,还有一类属于accessories。比如IE下的httpwatch、FireFox下的firebug,以及Chrome自带的网络分析工具,这些都是和浏览器集成的,方便使用但是脱离不开母体。所以按此分类大家就清楚了,大雪兄写的那个属于4,鹰总的那个属于2,至于叮当兄推荐的nirsoft的精品小软也是属于2的。那么我们平时分析应该选用怎样的工具呢?那就看个人喜好的,由于我们要分析的多数是http,当然了解socks层级的情况对于跟踪pdg调试超星会有帮助,所以多数情况下,建议大家选择3或者2系列的软件来做Duxiu、SSlib、SSreader等的网络分析。
本帖最近评分记录:威望:+1(hn0733zxc) 感谢分享
级别: 普通会员
发帖: 2477
威望: 32 点
财富: 58 论坛币
活期存款: 634
定期存款: 0
总资产: 692 论坛币
在线时间:4201.4(小时)
注册时间: 13:56
最后登录: 17:29
LS说得太详细了,我只能谈一下使用上的心得体会了,鹰总的选定进程比较方便,可以排除干扰,通常在有的放矢的情况下我用它嗅探,比如各种PDG。但它不能自动解码Gzip的,基本就不能用来打洞了,所以打洞的时候我用HttpAnalyzer~~ &
级别: 普通会员
威望: 72 点
财富: 51 论坛币
活期存款: 0
定期存款: 690
总资产: 741 论坛币
在线时间:1081.1(小时)
注册时间: 09:13
最后登录: 14:19
楼上几位推荐的HttpAnalyzer 这个好用,但有时候抓不到遨游的,这时就改用微软的IE,一般都能抓出来,还可以指定进程、构造提交地址,还有编码转换,很方便,乃是翻墙打洞之利器。不过我也遇到好多次HttpAnalyzer不工作的情况,关掉所有杀软和防火墙,也改用IE访问目标也不好使,原因不得而知。
Pages: ( 1/2 total )
>> 论坛导航
&|- 论坛公告栏
&|- 书园制度版
&|- 书园日记
&|- 新手学园
>> 友情求助区
&|- 专家找书
&|- 期刊论文求助
&|- 悬赏求助和财富交易
&|- 你问我答
>> 社区交流
&|- 书园茶社
转贴【关闭】
抗震救灾,众志成城
&|- 多媒体空间
&|- 书园风云录
&|- 文学原创与美文欣赏
>> 检索讨论区
&|- 检索方法探索
&|- 资源销售专区
&|- 神神叨叨
&|- 中文文献资源
&|- 外文文献资源
>> 资源共享区
&|- FTP联盟
&|- BT资源专区[关闭中]
&|- 网络资源
>> 专业交流与互助
&|- 读书软件交流
&|- 健康卫生
&|- 电子书,课件,视频,音频制作与交流
&|- 计算机技术[关闭中]
linux/unix[关闭中]
大型专业软件交流[关闭中]
&|- 外语学习
&|- 网络经管
&|- 法律之窗
书园法律援助中心
&|- 教学相长
>> 读书交流
&|- 学术妙笔
&|- 读书参考
&|- 学苑书林
>> 站务管理
&|- 网站建设
&|- 项目活动组
项目组存档
&|- 认证会员申请与考察区
>> 会员认证区
&|- 初级认证区
&|- 中级认证区
&|- 群英会
&|- 强国梦
&|- 秋爽斋
&|- 淡泊草
&|- 水清木华
&|- 书园旧梦
Total 0.046800(s) query 6, Time now is:09-27 06:38, Gzip enabled
Powered by
Code & 2003-07
Corporation

我要回帖

更多关于 lol帧数低 的文章

 

随机推荐