WinPcap还原HTTP

本文介绍了WinPcap在网络分析中的作用,包括数据包捕获、过滤、发送等功能,并详细阐述了如何通过WinPcap还原HTTP协议,从以太网数据包中解析出HTTP文本,以及处理字节序转换和查找HTTP请求与响应的关键字。
摘要由CSDN通过智能技术生成

 

WinPcap简介

WinPcapWin32平台上开源库,用于网络分析和数据包捕获。操作系统提供的socket,隐藏了网络底层细节,如协议处理,数据包重组等,使用Socket编程类似于操作文件。但是,有些应用程序需要直接访问网络的原始数据,比如Http分析工具,网络监控工具等等,此时操作系统提供的Socket就无法满足我们的要求了。WinPcap可以直接捕获网络中原始数据,主要功能如下:

1.         捕获原始数据,既可以捕获本机数据包,还可以捕获传输给其它机器的数据包;

2.         根据用户自定义规则过滤包

3.         发送原始数据包到网络

4.         收集网络流量统计信息

WinPcap也有自己的局限。它对数据包的操作独立于其它应用程序的。它不能堵塞、过滤和操纵网络。它只能简单的“嗅探”网络中传输的数据包。因此,它不能用于开发类似防火墙的应用程序。

WinPcap安装

点击这里下载WinPcap。点击这里下载WinPcap Win32 SDKWinPcap安装十分简单,只需要点击下一步就可以。WinPcapSDK十分有用,里面主要有以下几个文件夹:

LibWinPcap的静态库,里面有32位和64位两个版本。

IncludeWinPcap的头文件

DocsWinPcap手册,结合例子描述十分详细。

Examples-remoteExamples-pcap:示例代码,使用VC 6.0的项目进行组织。

WinPcap还原HTTP

下面,我就是用WinPcap编写一个示例程序,演示WinPcap如何还原Http协议。WinPcap可以捕获到链路层的数据包,在本例子中对应的是以太网协议。对于一个装有Http数据的以太数据包,其结构如下图:

图中E_HEthernet Header的缩写,E_DEthernet Data的缩写,HTTP_THTTP Text的缩写,其它的依次类推。从此图中,我们可以看出来,最右边(最里面)HTTP_T是由其他协议一层一层包裹起来的。由于http协议是可读文本形式,所以一旦获取以太数据包后,就可以直接分析包中的内容。但是以太包头文件没有长度信息,所以,无法直接分析,只有跳到上一层协议包,也就是ip包中,获取整个ip包的长度,然后在分析ip包数据,找到http协议文本。以太包头部长度为14dmac,smac,type,以下代码说明了如何获取ip包长度。

ether_header *eh = (ether_header*)pkt_data;

if(ntohs(eh->ether_type)==0x0800){ // ip packet only

    ip_header *ih = (ip_header*)(pkt_data+14);

    if(ntohs(ih->proto) == 0x0600){ // tcp packet only

        int ip_len = ntohs(ih->tlen);//ip_len = ip_body + ip_header

       

    }

}

在上面的代码中,尤其需要注意ntohs函数的使用,该函数是将一个short整数由网络字节序转化成主机字节序(net to host short)。如果不使用以上函数,无法保证ip包长度正确。 

获取的ip包的长度和ip包的首地址,现在可以分析包中内容。HTTP协议的请求信息(request)一般是以“GET ”或“POST ”开头,响应(response)一般是以“HTTP/1.1 ”开头,所以在ip包中直接搜索这些字段即可。

bool find_http = false;

string http_txt = "";

 

char* ip_pkt_data = (char*)ih;

for(int i=0;i<ip_len;++i){  

//check the http request

    if(!find_http && (i+3<ip_len && strncmp(ip_pkt_data

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值