| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 622 人关注过本帖
标题:话说大有有在MFC上用Winpcap写程序的么,我写了个不过截的都是些错误数据
只看楼主 加入收藏
关鱼
Rank: 1
等 级:新手上路
帖 子:23
专家分:9
注 册:2011-9-13
结帖率:66.67%
收藏
已结贴  问题点数:10 回复次数:3 
话说大有有在MFC上用Winpcap写程序的么,我写了个不过截的都是些错误数据
话说大有有在MFC上用Winpcap写程序的么,我写了个不过截的都是些错误数据

我用的其中一个pcap_next_ex()来捕获数据,新建了一个线程将捕获到的数据输出到扩展组合框中,但是
分析出的各种数据都不对头...
真不知道怎么办了.
就贴些线程的代码吧,里面有些错误,但是不是主要,想先把正确的数据截出来再改
程序代码:
static UINT ThreadFunc(LPVOID pParam)
{
    struct pcap_pkthdr *header;
    CNetstateDlg *Test=static_cast<CNetstateDlg *>(pParam);
    pcap_t *adhandle;
    const u_char *pkt_data;
    int res=0;
    int dataLen;
    

    if ((adhandle=Test->d->openAndComplie(Test->packet_filter,Test->d->device))==NULL)
            return 0;
    
//     pcap_loop(adhandle, 0,packet_handler, NULL);
//}
        



    //    d->FreeDevice();
    
    while((res = pcap_next_ex( adhandle, &header, &pkt_data)) >= 0)
    
    {
        if(res == 0)
            continue; // 超时时间到 
        
        ip_header *ih;
        udp_header *uh;
        tcp_head  *th;
        u_int ip_len;                         //tsport代表tcp的源端口,tdport代表tcp的目的端口
        u_short usport,udport,tsport,tdport; //u-代表udp,t代表tcp,d代表目的地址,h代表源地址
                                             //usport表示udp的源端口,udport代表udp的目的端口
        int procID;     //协议的ID号码
        CString SourceIP,DesIp,SourcePort,
                DesPort,Length;    
        // 获得IP数据包头部的位置 
    ih = (ip_header *) (pkt_data +
        14); //以太网头部长度

    // 获得UDP首部的位置 
    ip_len = (ih->ver_ihl & 0xf) * 4;
    uh = (udp_header *) ((u_char*)ih + ip_len);
    th = (tcp_head   *) ((u_char*)ih + ip_len);

    //将网络字节序列转换成主机字节序列 
    usport = ntohs( uh->sport );//udp的源端口
    udport = ntohs( uh->dport );//udp的目的端口
    tsport = ntohs( th->SourPort );//tcp的源端口
    tdport = ntohs( th->DestPort );//tcp的目的端口
    procID = ntohs( ih->proto );
//    switch(procID) {
//    case TCP:
//        {
            dataLen=header->len;
            SourceIP.Format("%d.%d.%d.%d", ih->saddr.byte1,
                                           ih->saddr.byte2,
                                           ih->saddr.byte3,
                                           ih->saddr.byte4 );
               DesIp.Format("%d.%d.%d.%d", ih->daddr.byte1,
                                           ih->daddr.byte2,
                                           ih->daddr.byte3,
                                           ih->daddr.byte4);
          SourcePort.Format("%d",tsport);
             DesPort.Format("%d",tdport);
              Length.Format("%d",dataLen);
             Test->AddData("TCP",SourceIP,SourcePort,DesIp,DesPort,Length);
                
//        break;
//        }
    
//    }
}
    
    if(res == -1)
        exit(0);
    
    
    return 0;
}
搜索更多相关主题的帖子: 新建 
2013-05-07 20:47
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:5 
Winpcap 是开源的吧
好像有专门的说明文档,你去翻下咯

没有在windows下用过winpcap

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-05-08 20:39
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
《小小黑客之路》第7章 有专门的说明,去下载一部电子书来参考下吧

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-05-08 20:41
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:5 
学习下,就看到这个winpcap(windows packet capture)是windows平台下一个免费,公共的网络访问系统。开发winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。

Maybe
2013-05-08 20:57
快速回复:话说大有有在MFC上用Winpcap写程序的么,我写了个不过截的都是些错误数 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017536 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved