抓包是什么器 是什么

抓包工具 - 文章 - 伯乐在线
& 抓包工具
抓包工具:顾名思义、耳熟能详。tcpdump、wireshark、sniffsmart、httpwatch(还算有点良心)。。。
但当其只是当为工具使用时,又贵为可惜。因工作需要,再度涉及该领域。
可随想云随风去,江河大变。某某文公司镜像工具,价比天高。某某调公司主打产品,爱理不理。
脑中闪过一句 码农何苦为难码农。
下班后闭关修炼3周,输出类似功能,自己动手丰衣足食。感谢libpcap,感谢gnu。下面把一些心得与君共享。
网上有很多libpcap的起步教程,这里就不几大主要函数的功能在此进行罗列,
* 回调函数
* ========
* arg pcap_loop外传参数
* pcap_pkthdr结构,该结构位于真正的物理帧前面,用于消除不同链路层支持的差异
* packet结构,指向所捕获报文的物理帧。
* &span&void processPacket(u_char *arg, const struct pcap_pkthdr *pkthdr, const u_char *packet)&/span&
123456789101112131415
&&/*&* 回调函数&* ========&* arg pcap_loop外传参数&* pcap_pkthdr结构,该结构位于真正的物理帧前面,用于消除不同链路层支持的差异&* packet结构,指向所捕获报文的物理帧。&* &span&void processPacket(u_char *arg, const struct pcap_pkthdr *pkthdr, const u_char *packet)&/span&&*/
/* Opening the device for sniffing
* 打开一个设备,官方建议1.0以后使用pcap_create()和pcap_activate()
* 1-设备名称,2-每次捕捉的最大字节数,3-混杂模式, 4-捕捉间隔(毫秒),5-存放的报错信息
* 混杂模式:混杂模式就是接收所有经过网卡的数据包,包括不是发给本机的包
pcap_t *descr=pcap_open_live(device, MAXBYTE2CAPTURE, 1,1024, errbuf);
12345678910111213
/* Opening the device for sniffing&* =======&* 打开一个设备,官方建议1.0以后使用pcap_create()和pcap_activate()&* 1-设备名称,2-每次捕捉的最大字节数,3-混杂模式, 4-捕捉间隔(毫秒),5-存放的报错信息&* 混杂模式:混杂模式就是接收所有经过网卡的数据包,包括不是发给本机的包&*/&pcap_t *descr=pcap_open_live(device, MAXBYTE2CAPTURE, 1,1024, errbuf);
/* Loop forever & call processPacket() for every received packet
* =============
* 循环收报
* 1-设备名称,2-循环次数[-1无限],3,自定义回调,4,类同pthread_create的外传参数
* pcap_next
* ============
* pcap_next() returns a u_char pointer to the packet that is described by this structure
* void got_packet(u_char *args, const struct pcap_pkthdr *header,const u_char *packet);
* 1-外传参数,2,pcap-header。3, points to the first byte of a chunk of data containing the entire packet
pcap_loop(descr, -1, processPacket, (u_char *)&count);
1234567891011121314151617181920212223242526272829
/* Loop forever & call processPacket() for every received packet&* =============&* 循环收报&* 1-设备名称,2-循环次数[-1无限],3,自定义回调,4,类同pthread_create的外传参数&*&* pcap_next&* ============&* pcap_next() returns a u_char pointer to the packet that is described by this structure&*&*&* void got_packet(u_char *args, const struct pcap_pkthdr *header,const u_char *packet);&* =====&* 1-外传参数,2,pcap-header。3, points to the first byte of a chunk of data containing the entire packet&*/&pcap_loop(descr, -1, processPacket, (u_char *)&count);
2,解析HTTP包的坑
准备一张ASCII的表,转备一张EXCEL,提升你的分析速度。自认是高手的还可以备一份《密码学理论》。
先举例TELNET包,直接上图,不废话。蓝色为二层帧,橙色为三层包,绿色为四层包。四层包大坑在于包长会变。
OSI的4~7层感觉有些酱油。直接跳7层进行展示
http报文最恶心的在于OD/0A太多,列的意义无法固定,导致头不能固定,BODY不能固定。博主没太好的方法,统统扔给HBASE去玩。这里抛砖,望高手提供解决方案。
3,计算成本留给谁?
几乎所有抓包工具只输出一条单向记录,如果部署100台,每台每天产生1GB报文(算少的),那么把它们串成大闸蟹的活谁来干?
答案A: 每台服务器自己算
答案B: 交给后台SQL或NOSQL。
答案C:Hbase+Mapreduce。
答案A:很有意思,分散计算压力,同时训练你的算法实践能力应用。
答案B:训练你的sql能力,如oracle的connect by,但几乎坐等宕机。
答案C:训练你的MR能力。但槽点不少,从100-》1-》100^N。坐等硬盘和网络兹兹。
4,串包的烦恼
选B/C的下面就不要看了。大家都知道三次握手,但实际情况比这恶心多了。话说1来2去,2来1去,1来1去,0来1去,1去0来。
之前笔者也停留在理论阶段,在你用调试多种网站场景后发现,网络资源大多数浪费在这些seq和ack上。
串包看似简单,但实际操作起来还得应付各种N来N去的SHAKE场景。下图是比较理想的场景。
这个是F5不放的场景,其他的我就不贴了。
这是我想串成的场景。
怎么办?好在libpcap是一家良心的组织,包的分解几乎都是在阻塞形式下给出,这就给我们的程序设计提供的清晰的蓝天。
随即祭出码农3宝:红黑、指针、绕开FOR。
虾兵蟹将,三个皮匠,百试百灵。
开始为了程序的可读性:没用3宝前,1 CORE CPU高峰情况下就要30%~60%。3宝后,CPU立即压到了5%以下。欣喜!~
5、时差的计算
http在所有报文结束都会有一个结束FIN动作,这动作在httpwatch中不被记录耗时,这个动作差不多就是两个MSL。所以这个耗时的计算我们要绕开,但HTTP何时才算正常传输完毕,这个是个头大是活儿。所以只能靠捕捉纯握手来进行判断,还要提前一个串联维度。当然这个维度至于提前多少,还要看具体场景进行分析。
6,说说回城卷轴
计算好的报文是珍贵的信息资源,但发回服务器的过程未必一帆风顺。服务器的设计就不多说了,要抗高负载就这么1、2个模型。从程序设计的便利度上看,临时存放在mq中是一个好选择。
虽然mq有初始大小限制,但对于程序的健壮性而言,不可谓是一个好的避风港。传回的过程在加上一个超时、非阻塞、自动重连、fork等特色。基本上你的程序就变成”周泰”
贴两张效果图。服务显示BODY RESPONSE完毕约203 MS。实际终端侧纯报文213MS,加上IE渲染40~50ms。OK,和目标一致,可以交差了。
可能感兴趣的话题
试试在网卡驱动层直接做这个事情,会更有趣。open your mind.
关于伯乐在线博客
在这个信息爆炸的时代,人们已然被大量、快速并且简短的信息所包围。然而,我们相信:过多“快餐”式的阅读只会令人“虚胖”,缺乏实质的内涵。伯乐在线内容团队正试图以我们微薄的力量,把优秀的原创文章和译文分享给读者,为“快餐”添加一些“营养”元素。
新浪微博:
推荐微信号
(加好友请注明来意)
– 好的话题、有启发的回复、值得信赖的圈子
– 分享和发现有价值的内容与观点
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 翻译传播优秀的外文文章
– 国内外的精选文章
– UI,网页,交互和用户体验
– 专注iOS技术分享
– 专注Android技术分享
– JavaScript, HTML5, CSS
– 专注Java技术分享
– 专注Python技术分享
& 2016 伯乐在线13069人阅读
&抓包工具简单介绍
要做网页操作,get和post提交数据是必须要学会的一件事。想要获取get或者post的数据就必须要学会抓包。下面我就对常见的抓包工具简单的介绍一遍。
抓包工具1:
HTTP Analyzer
界面非常直观,无需选择要抓包的浏览器或者软件,直接全局抓取,很傻瓜化,但是功能决定不简单。其他抓包工具有的功能它有,其他没有的功能它也有。点击start即可进行抓包,红色按钮停止抓包,停止按钮右边的就是暂停抓包按钮。
抓包完成以后,选择数据列表框内的数据,就可以在下面的选择夹内查看具体的数据,比如post的数据。其中post数据有几种查看方式:1.提交的真正数据(url编码数据)。
2.提交的数据的具体每个参数和参数的值(url解码出来显示)。
3.以16进制数据查看。
抓包完成可以保存数据为XML文件,方便以后查看和分析。
特点:全局抓包,无需选择抓包对象,也可以附加到IE浏览器进行抓包, 方法:打开浏览器-》查看-》浏览器栏-》IE HTTP Analyzer即可。可以筛选只显示出需要的数据。可以很方便查看post提交的数据和参数,这点对易语言和delphi等编程工具来说很有用。
抓包工具2:
界面和HTTP Analyzer有点像,但是功能少了几个。而且只能附加到浏览器进行抓包。附加的办法:打开浏览器-》查看-》浏览器栏-》HttpWatch,然后点record即可抓包。
特点:抓包功能强大,但是只能依附在IE上。Post提交的数据只有参数和参数的值,没有显示提交的url编码数据。
HttpWatch强大的网页数据分析工具.集成在Internet Explorer工具栏.包括网页摘要.Cookies管理.缓存管理.消息头发送/接受.字符查询.POST 数据和目录管理功能.报告输出HttpWatch 是一款能够收集并显示页页深层信息的软件。它不用代理服务器或一些复杂的网络监控工具,就能够在显示网页同时显示网页请求和回应的日志信息。甚至可以显示浏览器缓存和之间的交换信息。集成在Internet
Explorer工具栏。
启动Httpwatch
从IE的“查看”—“浏览器栏”—“HttpWatch”启动HttpWatch。如下图所示:
以下是HttpWatch程序界面
&3.1 Overview(概要)
表示选定某个信息显示其概要信息
2.&3.2 Header(报头)
如上图红框所示:
Http请求头发送信息
Headers Sent&&&&&&&&&&&&&&&&&&&& value
Request-Line&&&&&&&&&&&&&&&&&&&& GET /external/closea_d.jsHTTP/1.1
备注:在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能,才能进行更层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80
表示Http接受到请求操作响应后的缓存时间
Cache-Control&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&max-age=3600
一个用于定义缓存指令的通用头标
Connection&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&keep-alive
保持Tcp请求连接
Content-Type&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&application/x-javascript
标明发送或者接收的实体的MIME类型
Date&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Fri,04 Jan :26 GMT&
发送HTTP消息的日期
Etag&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&10f470-734-b32eb00&
一种实体头标,它向被发送的资源分派一个唯一的标识符
Expires&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Fri, 04 Jan :26 GMT
指定实体的有效期
Last-Modified&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Fri, 04 Jan :00 GMT
指定被请求资源上次被修改的日期和时间
Server&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Apache
一种标明Web服务器软件及其版本号的头标
X-Cache&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&HIT from &&&&
表示你的&http&request&是由&proxy&server&回的&
3.&3.3 Cookies
显示Cookies信息
如上图所示City=021,其实是我163邮箱中设置城市信息值,在Cookies中记录为021(代表上海这个城市)
什么是cookie?Cookie是一种在客户端保持HTTP状态信息的技术,Cookie是在浏览器访问WEB服务器的某个资源时,由WEB服务器在HTTP响应消息头中附带传送给浏览器的一片数据,WEB服务器传送给各个客户端浏览器的数据是可以各不相同的。
浏览器可以决定是否保存这片数据,一旦WEB浏览器保存了这片数据,那么它在以后每次访问该WEB服务器时,都应在HTTP请求头中将这片数据回传给WEB服务器。
显然,Cookie最先是由WEB服务器发出的,是否发送Cookie和发送的Cookie的具体内容,完全是由WEB服务器决定的。
Cookie在浏览器与WEB服务器之间传送的过程如图7.1所示。
4.&3.4 Cache(缓存)
3.5 Query String(查询字符串)
显示查询字符串被用在是传递参数url中
6.&3.6 POST Data
显示通过Post方式数据信息
以下是登录过程中POST Data,如下图所示:
备注:以下为Post方式提交数据编码几种方式:
text/plain
以纯文本的形式传送
application/x-www-form-urlencoded
默认的编码形式,即URL编码形式
multipart/form-data
MIME编码,上传文件的表单必须选择该
Mime Type指的是如text/html,text/xml等类型
MIME(Multipurpose Internet Email Extension),意为多用途Internet邮件扩展,它是一种多用途网际邮件扩充协议,在1992年最早应用于电子邮件系统,但后来也应用到浏览器。服务器会将它们发送的多媒体数据的类型告诉浏览器,而通知手段就是说明该多媒体数据的MIME类型,从而让浏览器知道接收到的信息哪些是MP3文件,哪些是JPEG文件等等。当服务器把把输出结果传送到浏览器上的时候,浏览器必须启动适当的应用程序来处理这个输出文档。在HTTP中,MIME类型被定义在&head&、&/head&部分的Content-Type中。
超文本标记语言文本 .htm,.html文件
text/html(数据类别是text,种类是html,下同)
纯文本,.txt文件
text/plain
RTF文本,.rtf文件
application/rtf
GIF图形,.gif文件
JPEG图形,.jpeg, .jpg文件
image/jpeg
au声音,.au文件
audio/basic
MIDI音乐,mid,.midi文件
audio/midi,audio/x-midi
RealAudio音乐,.ra, .ram文件
audio/x-pn-realaudio
MPEG,.mpg,.mpeg文件
video/mpeg
AVI,.avi文件
video/x-msvideo
GZIP,.gz文件
application/x-gzip
TAR,.tar文件
application/x-tar
如上图红圈所表示,可以看到POSTData 中的password和username数据;
GET方法是默认的HTTP请求方法,我们日常用GET方法来提交表单数据,然而用GET方法提交的表单数据只经过了简单的编码,同时它将作为URL的一部分向Web服务器发送,因此,如果使用GET方法来提交表单数据就存在着安全隐患上。例如
Http://127.0.0.1/login.jsp?Name=zhangshi&Age=30&Submit=%cc%E+%BD%BB
从上面的URL请求中,很容易就可以辩认出表单提交的内容。(?之后的内容)另外由于GET方法提交的数据是作为URL请求的一部分所以提交的数据量不能太大
POST方法是GET方法的一个替代方法,它主要是向Web服务器提交表单数据,尤其是大批量的数据。POST方法克服了GET方法的一些缺点。通过POST方法提交表单数据时,数据不是作为URL请求的一部分而是作为标准数据传送给Web服务器,这就克服了GET方法中的信息无法保密和数据量太小的缺点。因此,出于安全的考虑以及对用户隐私的尊重,通常表单提交时采用POST方法。
&3.7 Content
统计显示收到的Http响应信息
如下图所示:可以查看
页响应具体内容:
&3.9 HttpWatch请求信息框
菜单区如上图红框所示:
启动Httpwatch
从IE的“查看”—“浏览器栏”—“HttpWatch”启动HttpWatch。如下图所示:
以下是HttpWatch程序界面
&3.1 Overview(概要)
表示选定某个信息显示其概要信息
2.&3.2 Header(报头)
如上图红框所示:
Http请求头发送信息
Headers Sent&&&&&&&&&&&&&&&&&&&& value
Request-Line&&&&&&&&&&&&&&&&&&&& GET /external/closea_d.jsHTTP/1.1
备注:在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能,才能进行更层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80
表示Http接受到请求操作响应后的缓存时间
Cache-Control&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&max-age=3600
一个用于定义缓存指令的通用头标
Connection&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&keep-alive
保持Tcp请求连接
Content-Type&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&application/x-javascript
标明发送或者接收的实体的MIME类型
Date&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Fri,04 Jan :26 GMT&
发送HTTP消息的日期
Etag&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&10f470-734-b32eb00&
一种实体头标,它向被发送的资源分派一个唯一的标识符
Expires&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Fri, 04 Jan :26 GMT
指定实体的有效期
Last-Modified&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Fri, 04 Jan :00 GMT
指定被请求资源上次被修改的日期和时间
Server&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Apache
一种标明Web服务器软件及其版本号的头标
X-Cache&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&HIT from &&&&
表示你的&http&request&是由&proxy&server&回的&
3.&3.3 Cookies
显示Cookies信息
如上图所示City=021,其实是我163邮箱中设置城市信息值,在Cookies中记录为021(代表上海这个城市)
什么是cookie?Cookie是一种在客户端保持HTTP状态信息的技术,Cookie是在浏览器访问WEB服务器的某个资源时,由WEB服务器在HTTP响应消息头中附带传送给浏览器的一片数据,WEB服务器传送给各个客户端浏览器的数据是可以各不相同的。
浏览器可以决定是否保存这片数据,一旦WEB浏览器保存了这片数据,那么它在以后每次访问该WEB服务器时,都应在HTTP请求头中将这片数据回传给WEB服务器。
显然,Cookie最先是由WEB服务器发出的,是否发送Cookie和发送的Cookie的具体内容,完全是由WEB服务器决定的。
Cookie在浏览器与WEB服务器之间传送的过程如图7.1所示。
4.&3.4 Cache(缓存)
3.5 Query String(查询字符串)
显示查询字符串被用在是传递参数url中
6.&3.6 POST Data
显示通过Post方式数据信息
以下是登录过程中POST Data,如下图所示:
备注:以下为Post方式提交数据编码几种方式:
text/plain
以纯文本的形式传送
application/x-www-form-urlencoded
默认的编码形式,即URL编码形式
multipart/form-data
MIME编码,上传文件的表单必须选择该
Mime Type指的是如text/html,text/xml等类型
MIME(Multipurpose Internet Email Extension),意为多用途Internet邮件扩展,它是一种多用途网际邮件扩充协议,在1992年最早应用于电子邮件系统,但后来也应用到浏览器。服务器会将它们发送的多媒体数据的类型告诉浏览器,而通知手段就是说明该多媒体数据的MIME类型,从而让浏览器知道接收到的信息哪些是MP3文件,哪些是JPEG文件等等。当服务器把把输出结果传送到浏览器上的时候,浏览器必须启动适当的应用程序来处理这个输出文档。在HTTP中,MIME类型被定义在&head&、&/head&部分的Content-Type中。
超文本标记语言文本 .htm,.html文件
text/html(数据类别是text,种类是html,下同)
纯文本,.txt文件
text/plain
RTF文本,.rtf文件
application/rtf
GIF图形,.gif文件
JPEG图形,.jpeg, .jpg文件
image/jpeg
au声音,.au文件
audio/basic
MIDI音乐,mid,.midi文件
audio/midi,audio/x-midi
RealAudio音乐,.ra, .ram文件
audio/x-pn-realaudio
MPEG,.mpg,.mpeg文件
video/mpeg
AVI,.avi文件
video/x-msvideo
GZIP,.gz文件
application/x-gzip
TAR,.tar文件
application/x-tar
如上图红圈所表示,可以看到POSTData 中的password和username数据;
GET方法是默认的HTTP请求方法,我们日常用GET方法来提交表单数据,然而用GET方法提交的表单数据只经过了简单的编码,同时它将作为URL的一部分向Web服务器发送,因此,如果使用GET方法来提交表单数据就存在着安全隐患上。例如
Http://127.0.0.1/login.jsp?Name=zhangshi&Age=30&Submit=%cc%E+%BD%BB
从上面的URL请求中,很容易就可以辩认出表单提交的内容。(?之后的内容)另外由于GET方法提交的数据是作为URL请求的一部分所以提交的数据量不能太大
POST方法是GET方法的一个替代方法,它主要是向Web服务器提交表单数据,尤其是大批量的数据。POST方法克服了GET方法的一些缺点。通过POST方法提交表单数据时,数据不是作为URL请求的一部分而是作为标准数据传送给Web服务器,这就克服了GET方法中的信息无法保密和数据量太小的缺点。因此,出于安全的考虑以及对用户隐私的尊重,通常表单提交时采用POST方法。
&3.7 Content
统计显示收到的Http响应信息
如下图所示:可以查看
抓包工具3:
HTTPDebugger
同样是全局抓包,抓包和停止抓包同个按钮。软件界面感觉没有那么友好,POST的数据只能在requestcontent内查看,只显示提交的url编码数据如;
fastloginfield=username&username=xxxx&password=xxxxx&quickforward=yes&handlekey=ls&questionid=0&answer=
抓包工具4:
精易编程助手
点网页抓包,点开始,在出现的浏览器中打开要抓包的网站,别忘了要回去点开始,否则抓不到数据,然后再在网站登陆或者其他操作。操作完成以后回到软件界面查看封包数据即可。
该软件能生成易语言的post代码,对易语言编程来说很方便。Post的数据同样是真正提交的url编码数据,不显示解码参数。Post数据形如:
fastloginfield=username&username=xxxxx&password=qazwsx&quickforward=yes&handlekey=ls&questionid=0&answer=
注意:该工具对百度网站登陆抓包失败,不知道是SLL安全的原因还是什么。
抓包工具5:
WSockExpert
Post数据同样是显示提交的url编码数据,但是post的数据需要自己翻动查找,感觉很不方便,特别是列表框里面的数据有很多行的时候。
对ie7和其他多线程浏览器,选择进程的时候要如下图选择GDI+Window,然后点打开即可自动抓包:
注意:该工具对百度网站登陆抓包失败,不知道是SLL安全的原因还是什么。
抓包工具6:
封包助手。
界面和WSockExpert很像,同样是选择进程,然后开始抓包。但是对于多线程浏览器或者其他软件来说,要选择正确的进程才能抓到数据包,
不知道是哪个进程的可以不断尝试。
注意:该工具对百度网站的登陆抓包失败,不知道是SLL安全的原因还是什么。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:93921次
积分:1231
积分:1231
排名:千里之外
原创:23篇
转载:33篇
(1)(1)(4)(1)(3)(2)(5)(1)(9)(17)(12)西西软件下载最安全的下载网站、值得信赖的软件下载站!
→ wireshark怎么抓包、wireshark抓包详细图文教程
1.4.2 免费版
类型:浏览辅助大小:18.7M语言:英文 评分:4.0
wireshark是非常流行的网络封包分析软件,功能十分强大。可以截取各种网络封包,显示网络封包的详细信息。使用wireshark的人必须了解网络协议,否则就看不懂wireshark了。为了安全考虑,wireshark只能查看封包,而不能修改封包的内容,或者发送封包。wireshark能获取HTTP,也能获取HTTPS,但是不能解密HTTPS,所以wireshark看不懂HTTPS中的内容,总结,如果是处理HTTP,HTTPS 还是用Fiddler,
其他协议比如TCP,UDP 就用wireshark.
类别: 远程监控 &&&大小:22M
&&&语言: 中文
wireshark 开始抓包开始界面wireshark是捕获机器上的某一块网卡的网络包,当你的机器上有多块网卡的时候,你需要选择一个网卡。点击Caputre-&Interfaces.. 出现下面对话框,选择正确的网卡。然后点击&Start&按钮, 开始抓包Wireshark 窗口介绍WireShark 主要分为这几个界面1. Display Filter(显示过滤器),& 用于过滤2. Packet List Pane(封包列表), 显示捕获到的封包, 有源地址和目标地址,端口号。 颜色不同,代表3. Packet Details Pane(封包详细信息), 显示封包中的字段4. Dissector Pane(16进制数据)5. Miscellanous(地址栏,杂项)
第1页: 首页
06-2501-2301-2201-2101-1701-1701-1401-1301-1301-12
阅读本文后您有什么感想? 已有23人给出评价!
名称大小下载网络抓包工具的开发和实现
0、说在前面的话
1)本文将以一个初学者的角度,一步一步几乎是从0开始讲述如何完成一个基于winpcap+MFC的sniffer(嗅探器)当然我指的“0”并不是指连编程都不会,如果C/C++不知为何物那么还是别看这篇文章了,本文只有那么几点小小要求:
a.懂基本的编程语法,只会的没关系,语言这东西语法差别不大,看着看着就懂了
&&&&&&&&&b.懂一点点网络知识,起码知道OSI七层网络模型或者TCP/IP四层(也有说五层的)网络模型
&&&&&&&&&c.想学怎么做一个sniffer,而不是想来这里down代码,这种代码CSDN下载里多得是,不用来这里了
2)本文里的程序不是最优秀的,不是最牛的,甚至不知道能不能算作优秀,所以牛人可以略过此文,此文是给那些想开发但又不会开发,懂那么一点点又其实不太懂的人看的(写这个程序之前,我在MFC方面也算是这一类人:)
3)本文不讨论专业、学术内容,什么之类的都不在讨论范围之类,一切以实用为主,一切以开发出一个sniffer为核心
4)本文主要内容:
& a.工欲善其事,必先配环境——配置winpcap开发环境
b.掀起你的盖头来,让我来画你的脸——用MFC开发GUI
&c.安得广厦千万间,先画蓝图再砌砖——搭建wipcap抓包框架
d.要想从此过,留下协议头——各层网络协议头的实现
e.莫道无人能识君,其实我懂你的心——解析数据包
f.千呼万唤始出来,不抱琵琶也露面——将解析数据写到GUI上&
5)来看看我们要做的最终成果:&
&&&&&&列出监测主机的所有网卡,选择一个网卡,在混杂模式下进行监听。
捕获所有流经网卡的数据包,并利用WinPcap函数库设置过滤规则。
可以本地文件形式保存和读取已捕获的数据包信息。
分析捕获到的数据包的包头和数据,按照各种协议的格式进行格式化显示。
支持协议包括:、、、、、、&&
&&&一、工欲善其事,必先配环境——配置winpcap开发环境
&&&&&&&&1.0、背景
&&&&&&&&WinPcap(Windows
Packet Capture)是Windows平台下的链路层网络访问工具,其目的在于为Windows应用程序提供访问网络底层的能力。需要注意的是WinPcap只能把数据包从网络中抓过来(其实是复制过来,并没有真实的抓过来,感觉像是拍了张照),并不能修改数据。
&&&&&&&&“那么在哪里可以买得到呢?”,其实不用买,要得到很容易,更何况咱中国人没有为软件付费的习惯:),参看下一节,“不可或缺的东西”:
&&&&&&&&1.1、不可或缺的东西
V4.1.2:驱动程序、Dll文件
WinPcap V4.1.2
Developer’s
Pack:库文件、头文件、简单的示例程序代码和帮助文件
当然还有VisualStudio2008或者VC++6.0,本文用的是VS2008
&&&&&&&&(这玩意的下载网址就不用我介绍了吧)
1.2、配置过程
l添加头文件目录
&&&&&&&&工具-&属性-&项目和解决方案-&
VC++目录-&包含文件-&添加WinPcap开发包中的Include目录,如下图:
Tools-&Options-&Derectories-&Include
files-&添加WinPcap开发包中的Include目录,如下图:
l添加库文件目录
与上一个步骤一样,只有一小个变化,选择“库文件”,然后添加WinPcap开发包中的Lib目录,如下图:
Tools-&Options-&Derectories-&Library
files-&添加WinPcap开发包中的Lib目录,如下图:
l增加与WinPcap有关的预处理定义
&&&&&&&&项目-&项目属性-&配置属性-&预处理定义-&添加WPCAP和HAVE_REMOTE,如下图:
&&&&&&&&&&&&&&&&&&VC6:
Project-&Setting-&C/C++-&Preprocessor-&添加WPCAP和HAVE_REMOTE,如下图:
l添加wpcap.lib库文件
&&&&&&&&&&&&&&&&&&&&&&&&&&&
项目-&项目属性-&配置属性-&连接器-&命令行-&附加选项框中加入wpcap.lib,如下图:&
&&&&&&&&&&&&&&&&&&&&&&&&Project-&setting-&link-&加入wpcap.lib,如下图:
l添加pcap.h头文件
在使用WinPcap
API的所有源文件中添加#include "pcap.h”
1.3、运行测试代码
所有配置工作全部搞定,现在来运行测试代码,如果能顺利执行,那么就配置成功了。
这里的测试代码其实就是WinPcap中自带的实例,还记得“不可或缺的文件”中下载的两个文件没?从WpdPack_4_1_2.zip解压出来的文件中有Examples-pcap和Examples-remote两个文件夹,进入Examples-pcap中可以看到,里面有很多实例,任意打开一个文件夹,打开其中的.dsw文件,执行一下就知道了。
笔者这里选择的是UDPdump这个实例,执行成功的画面如下:&
第一步,打开VS,新建工程,选择“MFC应用程序”,如下图:
输入工程名,我这里命名为lixsniff,其他的没什么了,点击“确定”,进入下面这个画面,选择“基于对话框”(再多解释下,“单文档”、“多个文档”是应用于多窗口之类较为复杂的界面,我们这个程序很简单,在一个界面上就完成所有的事,所以就先最简单的“基于对话框”):
其他的没什么,点击“完成”,进入下面的画面,可以看到画面中间,写有“TODO:在此放置对话框控件”的窗口,这就是我们要画的GUI的底板啦:
&&&&&&&&&&&&&&&&&
下面把这个“底板”适当的调整一下大小,直接用鼠标拖就行了,选中按delete把默认生成的“确定”和“取消”按钮删了,我们用不着,结果如下图:
&&&&&&&&&&&&&&
MFC写GUI非常的方便,直接在控件库里拖动就行了,下面按照上一节最开始看到的最终效果图来一步一步添加控件,点击右侧的“工具箱”,可以看到有很多可供选择,如下图:
第一步,添加下拉列表,点击“工具箱”,选择“combo
box”,在“底板”上拖动,增添一个合适长宽的控件,然后右键点击此控件,选择“属性”,在“外观-Type”栏中选择“DropList”,再复制粘贴一个此控件,整体情况,如下图:
下一步,添加四个按钮:开始、结束、保存、读取。点击“工具箱”中的“button”,在“底板”增添一个适当大小的的按钮,点击此按钮,把“外观-Caption”修改为“开始”,这样,按钮上的文字就被设置为“开始”了,其他三个按钮方法相同,结果如下:
第三步,添加列表,用来显示接受到的包信息,点击“工具箱”,选择“List
Control”,添加一个适当大小的列表框控件,设置其属性,“外观-View”项设置为“Report”,“外观-single
selection”设置为“true”,如下图:
第四步,添加树形列表,显示每一个包的具体字段信息,点击“工具箱”,选择“Tree
Control”,添加一个合适大小树形列表控件,将其“属性”中的“外观”下面的“Full Row
Select”、“Has
Buttons”、“Info
Tip”、“Lines At
Root”均设置为“True”,如下图:
第五步,添加文本框,显示数据包的二进制信息,添加一个合适大小的“Edit
Control”,将“Multiline”、“Readonly”、“Auto
Vscroll”、“Horizon
Scroll”、“Vertical
Scroll”均设置为“True”,如下图:
最后,再添加若干适当大小“Edit
Control”及“Static
Text”,用于显示,并添加一个“Group
Box”它们包围起来,具体步骤就不详述了,见下图:
至此为止,所有的GUI算是画完了,表面上是完成了,但是实际上还有些数据及属性的设置需要通过后台对相应的控件来完成,如何实现这一点,将在最后一章“千呼万唤始出来,不抱琵琶也露面——将解析数据写到GUI上”详细阐述。
这一章要讲的是winpcap核心编程,首先来看一下sniffer程序的整体框架,程序主要由三个部分构成,其示意图如下:
其中,winpcap对数据的捕获主要在cmcf6Dlg.cpp中完成(偷了些懒,就没有把界面与这部分程序分开了,我得承认这不是一个好习惯),一些功能函数如解析数据包等程序在utilities.cpp中完成,协议包及类型定义在Protocol.h完成。
winpcap的主要流程如下:
1)&&&&&&&&调用pcap_findalldevs()获得网卡接口信息,一台计算机上可能有很多个网卡接口,知道有哪些接口是非常有必要的。
//初始化winpcap&&
int&Cmcf6Dlg::lixsniff_initCap()&&
&&&&devCount&=&0;&&
&&&&if(pcap_findalldevs(&alldev,&errbuf)&==-1)&&
&&&&&&&&return&-1;&&
&&&&for(dev=dev=dev-&next)&&
&&&&&&&&devCount++;&&&&&//记录设备数&&
&&&&return&0;&&
&其中 alldev与dev声明如下,主要是用来记录查找到的网卡设备
&& pcap_if_t *
&& pcap_if_t *
2)&&&&&&&&在获取了网卡接口信息后,即可调用pcap_open_live()打开指定网卡接口,winpcap将在此接口上侦听数据
"code"&class="cpp"&if&((adhandle=&pcap_open_live(dev-&name,&&//&设备名&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&65536,&&&&&//捕获数据包长度&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&1,&//&混杂模式&(非0意味着是混杂模式)&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&1000,&&&&&//&读超时设置&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&errbuf&&&&//&错误信息&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&))&==&NULL)&&
&&&&&&&&MessageBox(_T("无法打开接口:"+CString(dev-&description)));&&&
&&&&&&&&pcap_freealldevs(alldev);&&
&&&&&&&&return&-1;&&
3)&&&&&&&&调用pcap_datalink()、pcap_compile()、pcap_setfilter()分别检查是否是以太
网,并对过滤器进行设置。网络中过来的数据有些可能不是以太网数据,这样的数据我们处理不了,所以首先要进行一个检查;而过滤器是什么呢,简单的说,网络
中过来的数据是不同层次、不同协议的,过滤器的作用就是可以设定一些的规则来查看你想要的数据包,如指定只需要TCP包。
&&&&if(pcap_datalink(adhandle)!=DLT_EN10MB)&&
&&&&&&&&MessageBox(_T("这不适合于非以太网的网络!"));&&
&&&&&&&&pcap_freealldevs(alldev);&&
&&&&&&&&return&-1;&&
&&&&if(0==filter_index)&&
&&&&&&&&char&filter[]&=&"";&&
&&&&&&&&if&(pcap_compile(adhandle,&&fcode,&filter,&1,&netmask)&&0&)&&
&&&&&&&&{&&
&&&&&&&&&&&&MessageBox(_T("语法错误,无法编译过滤器"));&&
&&&&&&&&&&&&pcap_freealldevs(alldev);&&
&&&&&&&&&&&&return&-1;&&
&&&&&&&&}&&
&&&&}else{&&
&&&&&&&&CString&&&
&&&&&&&&char&*&&
&&&&&&&&int&len,x;&&
&&&&&&&&this-&m_comboBoxRule.GetLBText(filter_index,str);&&
&&&&&&&&len&=&str.GetLength()+1;&&
&&&&&&&&filter&=&(char*)malloc(len);&&
&&&&&&&&for(x=0;x
&&&&&&&&{&&
&&&&&&&&&&&&filter[x]&=&str.GetAt(x);&&
&&&&&&&&}&&
&&&&&&&&if&(pcap_compile(adhandle,&&fcode,&filter,&1,&netmask)&&0&)&&
&&&&&&&&{&&
&&&&&&&&&&&&MessageBox(_T("语法错误,无法编译过滤器"));&&
&&&&&&&&&&&&pcap_freealldevs(alldev);&&
&&&&&&&&&&&&return&-1;&&
&&&&&&&&}&&
&&&&if&(pcap_setfilter(adhandle,&&fcode)&0)&&
&&&&&&&&MessageBox(_T("设置过滤器错误"));&&
&&&&&&&&pcap_freealldevs(alldev);&&
&&&&&&&&return&-1;&&
4)&&&&&&&&调用pcap_dump_open()先创建一个文件,捕获的数据将会存储到此文件中,后面捕获的数据包将会实时地写入一个临
时文件,文件默认存储在工程中的SaveData文件中,文件名为存储时的时间,如在日14:15:16存储的,那么其文件名即为
16,在捕获数据结束时,用户可以选择将此文件存储于指定路径。
dumpfile&=&pcap_dump_open(adhandle,&filepath);&&
if(dumpfile==NULL)&&
&&&&&&&&&MessageBox(_T("文件创建错误!"));&&
&&&&&&&&&return&-1;&&
5)&&&&&&&&完成以上设置后,即可开始捕获数据包了。调用CreateThread()创建一个新的线程,调用
lixsinff_CapThread()函数在线程中完成数据包的捕获工作。为什么要新建一个线程来完成这项工作?那是因为我们的主进程是一个
Dialog(对话框),它主要的任务是处理界面交互,而数据捕获是一项后台工作,将数据包的捕获与界面进程分离,可以提高程序效率,避免了二者的干扰。
LPDWORD&threadCap=NULL;&&
m_ThreadHandle=CreateThread(NULL,0,lixsinff_CapThread,this,0,threadCap);&&
if(m_ThreadHandle==NULL)&&
&&&&int&code=GetLastError();&&
&&&&CString&&&
&&&&str.Format(_T("创建线程错误,代码为%d."),code);&&
&&&&MessageBox(str);&&
&&&&return&-1;&&
6)在lixsinff_CapThread()中调用pcap_next_ex()函数进行数据包捕获,每到达一个数据包,调用自定义的包处理函数analyze_frame()完成对捕获数据的解析。注:对于analyze_frame()函数将在第五章专门介绍其工作流程。
while((res&=&pcap_next_ex(&pthis-&adhandle,&&header,&&pkt_data))&&=&0)&&
&&&&&&&&if(res&==&0)&&&&&&&&&&&&&&&&//超时&&
&&&&&&&&&&&&continue;&&
&&&&&&&&&&
&&&&&&&&struct&datapkt&*data&=&(struct&datapkt*)malloc(sizeof(struct&datapkt));&&&&&&&
&&&&&&&&memset(data,0,sizeof(struct&datapkt));&&
&&&&&&&&if(NULL&==&data)&&
&&&&&&&&{&&
&&&&&&&&&&&&MessageBox(NULL,_T("空间已满,无法接收新的数据包"),_T("Error"),MB_OK);&&
&&&&&&&&&&&&return&-1;&&
&&&&&&&&}&&
&&&&&&&&//分析出错或所接收数据包不在处理范围内&&
&&&&&&&&if(analyze_frame(pkt_data,data,&(pthis-&npacket))&0)&&
&&&&&&&&&&&&continue;&&&&
…….(以下省略)&&
7)&&&&&&&&经过analyze_frame()函数处理后将相关数据更新到GUI。这一点第六章会讲到。
&以下是cmcf6Dlg.h以及cmcf6Dlg.cpp的源代码,也就是我们的主程序代码,在代码中可以看到完整的实现过程,实际上对于如何将数据写到GUI上已经大体从这里可以看得出来了:)
下一章:要想从此过,留下协议头——各层网络协议头的实现
cmcf6Dlg.h:
//&mcf6Dlg.h&:&头文件&&
#pragma&once&&
#include&"afxcmn.h"&&
#include&"afxwin.h"&&
#include"pcap.h"&&
#include&"Protocol.h"&&
#include&"utilities.h"&&
//&Cmcf6Dlg&对话框&&
class&Cmcf6Dlg&:&public&CDialog&&
&&&&Cmcf6Dlg(CWnd*&pParent&=&NULL);&//&标准构造函数&&
&&&&/////////////////////////////////////////////[my&fuction]//////////////////////////////////////////////&&
&&&&int&lixsniff_initCap();&&
&&&&int&lixsniff_startCap();&&
&&&&int&lixsniff_updateTree(int&index);&&
&&&&int&lixsniff_updateEdit(int&index);&&
&&&&int&lixsniff_updateNPacket();&&
&&&&int&lixsniff_saveFile();&&
&&&&int&lixsniff_readFile(CString&path);&&
&&&&//////////////////////////////////////////////[my&data]/////////////////////////////////////////////&&
&&&&int&devC&&
&&&&struct&pktcount&&&&&&&&&&&&&&&&&//各类数据包计数&&
&&&&char&errbuf[PCAP_ERRBUF_SIZE];&&
&&&&pcap_if_t&*&&
&&&&pcap_if_t&*&&
&&&&pcap_t&*&&
&&&&pcap_dumper_t&*&&
&&&&char&filepath[512];&&&&&&&&&&&&&&&&&&&&&&&&&//&&文件保存路径&&
&&&&char&filename[64];&&&&&&&&&&&&&&&&&&&&&&&&&&//&&文件名称&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&HANDLE&m_ThreadH&&&&&&&&&&//线程&&
&&&&CPtrList&m_pktL&&&&&&&&&&&&&&&&&&&&&&&&&//捕获包所存放的链表&&
//&对话框数据&&
&&&&enum&{&IDD&=&IDD_MCF6_DIALOG&};&&
&&&&protected:&&
&&&&virtual&void&DoDataExchange(CDataExchange*&pDX);&&&&//&DDX/DDV&支持&&
protected:&&
&&&&HICON&m_hI&&
&&&&//&生成的消息映射函数&&
&&&&virtual&BOOL&OnInitDialog();&&
&&&&afx_msg&void&OnSysCommand(UINT&nID,&LPARAM&lParam);&&
&&&&afx_msg&void&OnPaint();&&
&&&&afx_msg&HCURSOR&OnQueryDragIcon();&&
&&&&DECLARE_MESSAGE_MAP()&&
&&&&CListCtrl&m_listC&&
&&&&CComboBox&m_comboB&&
&&&&CComboBox&m_comboBoxR&&
&&&&CTreeCtrl&m_treeC&&
&&&&CEdit&m_&&
&&&&afx_msg&void&OnBnClickeon1();&&
&&&&afx_msg&void&OnBnClickeon2();&&
&&&&CButton&m_buttonS&&
&&&&CButton&m_buttonS&&
&&&&CPtrList&m_localDataL&&&&&&&&&&&&&&&//保存被本地化后的数据包&&
&&&&CPtrList&m_netDataL&&&&&&&&&&&&&&&&&//保存从网络中直接获取的数据包&&
&&&&CBitmapButton&m_bitButton&&&;&&&&&&&//图片按钮&&
&&&&int&&&
&&&&afx_msg&void&OnLvnItemchangedList1(NMHDR&*pNMHDR,&LRESULT&*pResult);&&
&&&&CEdit&m_editNT&&
&&&&CEdit&m_editNU&&
&&&&CEdit&m_editNI&&
&&&&CEdit&m_editNIp;&&
&&&&CEdit&m_editNA&&
&&&&CEdit&m_editNH&&
&&&&CEdit&m_editNO&&
&&&&CEdit&m_editNS&&
&&&&afx_msg&void&OnNMCustomdrawList1(NMHDR&*pNMHDR,&LRESULT&*pResult);&&
&&&&afx_msg&void&OnBnClickeon5();&&
&&&&CButton&m_buttonS&&
&&&&CButton&m_buttonR&&
&&&&afx_msg&void&OnBnClickeon4();&&
&&&&CEdit&m_editNIpv4;&&
&&&&CEdit&m_editIcmpv6;&&
来源:http://blog.csdn.net/litingli/article/details/5950962
本人个人开发实现了以后认为如果用QT来开发会相对更容易一些,而且界面也更加友好。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 vy抓包工具是什么 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信