在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例Android手机应用开发 → C++ 网络抓包工具源码(KSniffer)

C++ 网络抓包工具源码(KSniffer)

Android手机应用开发

下载此实例
  • 开发语言:C/C++
  • 实例大小:0.13M
  • 下载次数:62
  • 浏览次数:3409
  • 发布时间:2016-05-20
  • 实例类别:Android手机应用开发
  • 发 布 人:aaa的水电费
  • 文件格式:.zip
  • 所需积分:2
 相关标签: 网络 抓包

实例介绍

【实例简介】

MICROSOFT 基础类库: KSniffer 项目概述



应用程序向导已为您创建了这个 KSniffer 应用程序。此应用程序不仅演示 Microsoft 基础类的基本使用方法,还可作为您编写应用程序的起点。

本文件概要介绍组成 KSniffer 应用程序的每个文件的内容。

KSniffer.vcxproj
这是使用应用程序向导生成的 VC 项目的主项目文件。 
它包含生成该文件的 Visual C 的版本信息,以及有关使用应用程序向导选择的平台、配置和项目功能的信息。

KSniffer.vcxproj.filters
    这是使用“应用程序向导”生成的 VC 项目筛选器文件。
    它包含有关项目文件与筛选器之间的关联信息。在 IDE 中,通过这种关联,在特定节点下以分组形式显示具有相似扩展名的文件。例如,“.cpp”文件与“源文件”筛选器关联。

KSniffer.h
这是应用程序的主要头文件。它包括其他项目特定的头文件(包括 Resource.h),并声明 CKSnifferApp 应用程序类。

KSniffer.cpp
这是包含应用程序类 CKSnifferApp 的主要应用程序源文件。

KSniffer.rc
这是程序使用的所有 Microsoft Windows 资源的列表。它包括 RES 子目录中存储的图标、位图和光标。此文件可以直接在 Microsoft Visual C 中进行编辑。项目资源位于 2052 中。

res\KSniffer.ico
这是用作应用程序图标的图标文件。此图标包括在主要资源文件 KSniffer.rc 中。

res\KSniffer.rc2
此文件包含不在 Microsoft Visual C 中进行编辑的资源。您应该将不可由资源编辑器编辑的所有资源放在此文件中。


/////////////////////////////////////////////////////////////////////////////

应用程序向导创建一个对话框类:

KSnifferDlg.h,KSnifferDlg.cpp - 对话框
这些文件包含 CKSnifferDlg 类。该类定义应用程序主对话框的行为。该对话框的模板位于 KSniffer.rc 中,该文件可以在 Microsoft Visual C 中进行编辑。


/////////////////////////////////////////////////////////////////////////////

其他功能:

ActiveX 控件
应用程序包括对使用 ActiveX 控件的支持。

/////////////////////////////////////////////////////////////////////////////

其他标准文件:

StdAfx.h,StdAfx.cpp
这些文件用于生成名为 KSniffer.pch 的预编译头 (PCH) 文件和名为 StdAfx.obj 的预编译类型文件。

Resource.h
这是标准头文件,它定义新的资源 ID。
Microsoft Visual C 读取并更新此文件。

KSniffer.manifest
应用程序清单文件供 Windows XP 用来描述应用程序
对特定版本并行程序集的依赖性。加载程序使用此
信息从程序集缓存加载适当的程序集或
从应用程序加载私有信息。应用程序清单可能为了重新分发而作为
与应用程序可执行文件安装在相同文件夹中的外部 .manifest 文件包括,
也可能以资源的形式包括在该可执行文件中。 
/////////////////////////////////////////////////////////////////////////////

其他注释:

应用程序向导使用“TODO:”指示应添加或自定义的源代码部分。

如果应用程序在共享的 DLL 中使用 MFC,则需要重新发布这些 MFC DLL;如果应用程序所用的语言与操作系统的当前区域设置不同,则还需要重新发布对应的本地化资源 MFC100XXX.DLL。有关这两个主题的更多信息,请参见 MSDN 文档中有关 Redistributing Visual C applications (重新发布 Visual C 应用程序)的章节。

/////////////////////////////////////////////////////////////////////////////


【实例截图】
【核心代码】

主函数

void main()  

{  

    pcap_t *pcap_handle;                       /* Winpcap句柄 */  

    char error_content[PCAP_ERRBUF_SIZE];        /* 存储错误信息 */  

    char *net_interface;                           /* 网络接口 */  

    bpf_program bpf_filter;                      /* BPF过滤规则 */  

    char bpf_filter_string[] = "";                  /* 过滤规则字符串 */   

    bpf_u_int32 net_mask;                              /* 掩码 */    

    bpf_u_int32 net_ip;                            /* 网路地址 */ 

    net_interface = pcap_lookupdev(error_content); /* 获得可用的网络接口 */    

    pcap_lookupnet(net_interface, &net_ip, &net_mask, error_content);/* 获得网络地址和掩码地址 */     

    pcap_handle = pcap_open_live(net_interface, BUFSIZ, 1, 1, error_content);  /* 打开网路接口 */   

    pcap_compile(pcap_handle, &bpf_filter, bpf_filter_string, 0, net_ip);  /* 编译BPF过滤规则 */     

    pcap_setfilter(pcap_handle, &bpf_filter);                   /* 设置过滤规则 */

IP协议的定义

class ip_header 

 

{  public: 

    #if defined(WORDS_BIGENDIAN)  

        u_int8_t ip_version: 4,           /* 版本 */  

        ip_header_length: 4;           /* 首部长度 */  

    #else  

        u_int8_t ip_header_length: 4, ip_version: 4;  

    #endif  

    u_int8_t ip_tos;            /* 服务质量 */  

    u_int16_t ip_length;       /* 长度 */  

    u_int16_t ip_id;             /* 标识 */  

    u_int16_t ip_off;            /* 偏移 */  

    u_int8_t ip_ttl;            /* 生存时间 */  

    u_int8_t ip_protocol;       /* 协议类型 */  

    u_int16_t ip_checksum;       /* 校验和 */  

   in_addr ip_souce_address;       /* 源IP地址 */  

   in_addr ip_destination_address;       /* 目的IP地址 */

pcap_loop(pcap_handle,  n, ethernet_protocol_packet_callback, NULL); /* 注册回调函数,循环捕获网络数据包,利用回调函数来处理每个数据包 */     

分析UDP协议的函数代码

            void udp_protocol_packet_callback(u_char *argument, const  pcap_pkthdr *packet_header, const u_char *packet_content)  

{  

    class udp_header *udp_protocol;         /* UDP协议变量 */    

    u_short source_port;                 /* 源端口 */  

    u_short destination_port;              /* 目的端口号 */  

    u_short length;                             //长度

    udp_protocol = (class udp_header*)(packet_content 14 20);/* 获得UDP协议内容 */   

    source_port = ntohs(udp_protocol->udp_source_port);  /* 获得源端口 */   

    destination_port = ntohs(udp_protocol->udp_destination_port); /* 获得目的端口 */    

    length = ntohs(udp_protocol->udp_length);  /* 获得长度 */   

   cout<<"----------  UDP协议    ----------"<<endl;  

   cout<<"源端口号:"<<dec<<source_port<<endl;  

   cout<<"目的端口号:"<<dec<<destination_port<<endl;  

    switch (destination_port)  

    {  

        case 138:  

           cout<<"上层协议为NETBIOS数据报服务"<<endl;  

            break;  

        case 137:  

           cout<<"上层协议为NETBIOS名字服务"<<endl;  

            break;  

        case 139:  

           cout<<"上层协议为NETBIOS会话服务"<<endl;  

            break;  

        case 53:  

           cout<<"上层协议为域名服务"<<endl;  

            break;  

        default:  

            break;  

    }  

   cout<<"长度:"<<length<<endl;  

   cout<<"校验和:"<<setw(4)<<setfill('0')<<hex<<ntohs(udp_protocol->udp_checksum)<<endl;  

}  

 


标签: 网络 抓包

实例下载地址

C++ 网络抓包工具源码(KSniffer)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警