happyhappy
驱动牛犊
驱动牛犊
  • 注册日期2004-03-24
  • 最后登录2004-05-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1649回复:12

包捕获后怎么取出做协议分析?

楼主#
更多 发布于:2004-05-08 16:32
我用winpcap 捕获了包,要进一步进行协议分析,不大明白怎么把捕获的包取出来,请教高手~~!
javahong
驱动牛犊
驱动牛犊
  • 注册日期2003-05-16
  • 最后登录2006-03-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-05-08 19:59
捕获报文得首先知道该报文的协议,然后用相应的报文格式去parse,
eg,ARP报文
PPACKET_ARP pArp = (PPACKET_ARP) pCapturedPacket;
...
happyhappy
驱动牛犊
驱动牛犊
  • 注册日期2004-03-24
  • 最后登录2004-05-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-05-08 21:50
谢谢。但我用的是PacketReceivePacket系列的函数,不晓得要怎么弄哦?
zxcasd
驱动牛犊
驱动牛犊
  • 注册日期2001-06-14
  • 最后登录2007-08-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-05-09 12:52
谢谢。但我用的是PacketReceivePacket系列的函数,不晓得要怎么弄哦?


LPPACKET   lpPacket;
PacketReceivePacket(lpAdapter,lpPacket,TRUE);
buf = (char *)lpPacket->Buffer;

buf就是包的内容.......-_-....忽然发现分好少哦。。hoho

[编辑 -  5/9/04 by  zxcasd]
死了都要爱......
happyhappy
驱动牛犊
驱动牛犊
  • 注册日期2004-03-24
  • 最后登录2004-05-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-05-09 17:44
不好意思哦,继续问。如果回答了,我可以重新开贴给分。请多指教~!
下面这段代码
void DecodeEther(LPPACKET lpPacket)
{
    
     char    *buf,packet;
 //    struct bpf_hdr *hdr;
 //    u_int off=0,tlen;

ETHERNET_HEADER *pEtherHead;
     IP_HEADER *pIPHead;
     buf =(char *) lpPacket->Buffer;

 //        hdr=(struct bpf_hdr *)(buf+off);

  //       tlen=hdr->bh_caplen;
  //       off+= hdr->bh_hdrlen;

  //       off=Packet_WORDALIGN(off+tlen);
    packet=*buf;
    pEtherHead=(ETHERNET_HEADER *)packet;
      int EthHdrLen=sizeof(ETHERNET_HEADER);//以太帧头部长度
//取源MAC地址
    printf(\"srcMAC地址:%02X-%02X-%02X-%02X-%02X-%02X:\",pEtherHead->src_mac[0],pEtherHead->src_mac[1],pEtherHead->src_mac[2],pEtherHead->src_mac[3],pEtherHead->src_mac[4],pEtherHead->src_mac[5]);
    printf(\"\\n\");
//取目的MAC地址
    printf(\"desMAC地址:%02X-%02X-%02X-%02X-%02X-%02X:\",pEtherHead->des_mac[0],pEtherHead->des_mac[1],pEtherHead->des_mac[2],pEtherHead->des_mac[3],pEtherHead->des_mac[4],pEtherHead->des_mac[5]);
         printf(\"\\n\");
    //int pType=pEtherHead->type[0]*0x100+pEtherHead->type[1]; //求协议类型
         unsigned short pType = *(unsigned short *)pEtherHead->type;
    switch(pType)
{
        case  IP:    //解ip包
是什么地方有问题呢?如果这个函数写完了,应该放在
     while(!kbhit())
     {
         // capture the packets
         if(PacketReceivePacket(lpAdapter,lpPacket,TRUE)==FALSE){
            printf(\"Error: PacketReceivePacket failed\");
             return (-1);
         }
之后吗?
包结构定义如下:
typedef struct ETHERNET_HEADER
{
byte des_mac[6]; //接收端的MAC地址
byte src_mac[6]; //发送端的MAC地址
byte type[2]; //类型字段
}ETHERNET_HEADER;
typedef struct IP_HEADER
{
byte ver_len; //版本4位,头长度4位,报头长度以32位为一个单位
byte type; //类型8位
byte length[2]; //总长度,16位,指出报文的以字节为单位的总长度,报文长度不能超过65536个字接,否则认为报文遭到破坏
byte id[2]; //报文标示,用于多于一个报文16位
byte flag_offset[2];//标志,3位 数据块偏移13位
byte time; //生存时间,8位
byte protocol; //协议,8位
byte crc_val[2]; //头校验和,16位
byte src_addr[4]; //源地址,32位
byte des_addr[4]; //目标地址,32位
byte options[4]; //选项和填充,32位
}IP_HEADER;

谢谢大虾们了。小女子是菜菜菜鸟,多多关照。我会另开帖送分的!
zxcasd
驱动牛犊
驱动牛犊
  • 注册日期2001-06-14
  • 最后登录2007-08-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-05-09 20:01
你是不是想这样

while(!kbhit())
{
// capture the packets
if(PacketReceivePacket(lpAdapter,lpPacket,TRUE)==FALSE){
printf(\"Error: PacketReceivePacket failed\");
return (-1);
}
else{
                       buf=(char *)lpPacket->Buffer;
//这里调用你写的函数对包分析
}
}
死了都要爱......
happyhappy
驱动牛犊
驱动牛犊
  • 注册日期2004-03-24
  • 最后登录2004-05-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-05-09 21:19
我觉得应该不是else的关系。就是捕获包以后对每个包进行分析就是了,我太菜了,所以不晓得该放哪里。上面的函数编译没错,但执行不了。
zxcasd
驱动牛犊
驱动牛犊
  • 注册日期2001-06-14
  • 最后登录2007-08-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-05-09 22:23
我觉得应该不是else的关系。就是捕获包以后对每个包进行分析就是了,我太菜了,所以不晓得该放哪里。上面的函数编译没错,但执行不了。


是用else没错的,if是先执行的也就是说在if里取包,在else里分析包,不信你试试:)
死了都要爱......
happyhappy
驱动牛犊
驱动牛犊
  • 注册日期2004-03-24
  • 最后登录2004-05-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-05-10 15:14
你的else后面的那行代码在我的函数里有了,那是不是我直接在else后面调用就行了?
我这样做了,但是还是不行。
我觉得是解包函数没写对哦。。。。。。
真不好意思了,麻烦你了。再帮忙看看。
zxcasd
驱动牛犊
驱动牛犊
  • 注册日期2001-06-14
  • 最后登录2007-08-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-05-10 16:40
你的else后面的那行代码在我的函数里有了,那是不是我直接在else后面调用就行了?
我这样做了,但是还是不行。
我觉得是解包函数没写对哦。。。。。。
真不好意思了,麻烦你了。再帮忙看看。


没错直接用你的函数分析就可以了。我不知道你说的不行具体指什么,你可以在函数里断点调试一把看看
首先得确定if里取包是不是返回true,如果是的话肯定会执行else的。

[编辑 -  5/10/04 by  zxcasd]
死了都要爱......
daffadilly
驱动牛犊
驱动牛犊
  • 注册日期2004-05-16
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-05-16 22:36
关注中,帮你顶一下:)
happyhappy
驱动牛犊
驱动牛犊
  • 注册日期2004-03-24
  • 最后登录2004-05-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-05-17 09:35
呵呵,还是没弄好。有什么好的意见或建议可以给我,分我是不会吝啬的。
jlstw
驱动牛犊
驱动牛犊
  • 注册日期2004-05-18
  • 最后登录2006-07-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-05-18 20:27
俺也不会,关注中
committed to excellence
游客

返回顶部