一个http网络数据包, 用winpcap如何分解得到http协议Get字段的内容?
我只会分析到tcp层,应用层的不知道该怎么写代码。赐教

解决方案 »

  1.   

    没有用过winpcap,不过你既然可以截获网络封包,就可以从封包中取出应用层http字符流;再用一些http解析器获得结果不就可以了吗?要不简单的字符串查找不行吗?
      

  2.   

    回anjuta_c() :
    我也是这么想的,我的问题是不知道该如何得到 tcp数据包(也就是http的整个内容)??
    http包结构好象vc中没有定义?自己定义一个,在解包的时候出现错误了
      

  3.   

    不是太懂winpcap,在这只能和兄台交流一下理论了
       当应用层进行send的时候,如果发送的缓冲区大于mtu,则tcp层会将应用层缓冲区进行分段,就是分成多个"分段"。如果tcp层进行分段了,你可能需要将截获的"tcp分段"合并一下?
       同样tcp协议栈接受"tcp分段"的时候,可能需要组合一下"tcp分段",从而生成用户数据   我不知道你用winpcap截获的是什么形式的数据,如果需要手工合并,或者分解"tcp分段"出应用层数据,可能要涉及tcp协议栈的实现
      

  4.   

    http是字符流格式的,是没有定义几个结构体来代表协议的
      

  5.   

    我昨天晚上下载了winpcap看了里边的示例代码,目录是 Exaples-pcap,下边有个iflist目录是得到本地网络接口信息,用这个程序得到你的网络接口名称后;
       Exaples-pcap 下边有个pcap_filter目录,是根据你 传入的“网络接口名”,“过滤器”来过滤流经接口的数据包,指定一个过滤器就可以过滤http get了
       C:\>pf -s "\Device\NPF_{D4F45ACF-82C4-47E0-B10D-E7525000CA1C}" -o mytxt.txt -f "
    tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420"
       关键还是wincap的过滤器写法
      

  6.   

    winpcap的这个例子pcap_filter已经可以过滤http get请求了,看看里边的代码就可以了啊
      

  7.   

    to anjuta_c:
    只能过滤ip和tcp层:complierstring="ip and tcp"
    应用层好象过滤不了。如果能过滤,那过滤的代码complierstring 怎么写?
      

  8.   

    C:\>pf -s "\Device\NPF_{D4F45ACF-82C4-47E0-B10D-E7525000CA1C}" -o mytxt.txt -f "
    tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420"
      

  9.   

    tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420 就是这个,我在六楼的帖子里边已经回复了
      

  10.   

    我昨天晚上下载了winpcap看了里边的示例代码,目录是 Exaples-pcap,下边有个iflist目录是得到本地网络接口信息,用这个程序得到你的网络接口名称后;
       Exaples-pcap 下边有个pcap_filter目录,是根据你 传入的“网络接口名”,“过滤器”来过滤流经接口的数据包,指定一个过滤器就可以过滤http get了
       C:\>pf -s "\Device\NPF_{D4F45ACF-82C4-47E0-B10D-E7525000CA1C}" -o mytxt.txt -f "
    tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420"
       关键还是wincap的过滤器写法