模仿Wireshark网络抓包工具实现---c++

最近在用Wireshark抓包工具的时候,老感觉这东西用起来很简单,功能强大,所以想了解他的实现原理,我就自己好奇写了一个实现基本功能的demo吧。

其实叫抓包工具,其实就是抓取流经自己网卡的所有ip包,我们能够按照ip包的协议解析不就行了。

实现的核心在这里:

 1 //创建SOCKET
 2     sock = socket(AF_INET, SOCK_RAW, IPPROTO_IP);
 3     if (sock == INVALID_SOCKET)
 4     {
 5         cout << WSAGetLastError();
 6         return 0;
 7     }
 8     //获取本机地址
 9     char  name[128];
10     if (-1 == gethostname(name, sizeof(name)))
11     {
12         closesocket(sock);
13         cout << WSAGetLastError();
14         return 0;
15     }
16     struct hostent * pHostent;
17     pHostent = gethostbyname(name);
18     //绑定本地地址到SOCKET句柄
19     sockaddr_in addr;
20     addr.sin_family = AF_INET;
21     addr.sin_addr = *(in_addr*)pHostent->h_addr_list[0]; //IP
22     addr.sin_port = 8888; //端口,IP层端口可随意填
23     if (SOCKET_ERROR == bind(sock, (sockaddr *)&addr, sizeof(addr)))
24     {
25         closesocket(sock);
26         cout << WSAGetLastError();
27         return 0;
28     }
29
30     //设置该SOCKET为接收所有流经绑定的IP的网卡的所有数据,包括接收和发送的数据包
31     u_long sioarg = 1;
32     DWORD wt = 0;
33     if (SOCKET_ERROR == WSAIoctl(sock, SIO_RCVALL, &sioarg, sizeof(sioarg), NULL, 0, &wt, NULL, NULL))
34     {
35         closesocket(sock);
36         cout << WSAGetLastError();
37         return 0;
38     }
39     //我们只需要接收数据,因此设置为阻塞IO,使用最简单的IO模型
40     u_long bioarg = 0;
41     if (SOCKET_ERROR == ioctlsocket(sock, FIONBIO, &bioarg))
42     {
43         closesocket(sock);
44         cout << WSAGetLastError();
45         return 0;
46     }
47     //开始接收数据
48     //因为前面已经设置为阻塞IO,recv在接收到数据前不会返回。
49     g_event = CreateEvent(NULL,TRUE,FALSE,NULL);

其他的就不多说了,有开发经验的应该都会,这个是半天弄出来的,所以很多代码没有整理,还请见谅。我主要是实现功能,好自己用。

下面是截图: 

代码地址:

http://download.csdn.net/detail/hegangle/9777070

时间: 2024-12-30 13:45:34

模仿Wireshark网络抓包工具实现---c++的相关文章

Wireshark 网络抓包工具Wireshark的使用

阅读目录 wireshark介绍 wireshark不能做的 wireshark VS Fiddler 同类的其他工具 什么人会用到wireshark wireshark 开始抓包 wireshark 窗口介绍 wireshark 显示过滤 保存过滤 过滤表达式 封包列表(Packet List Pane) 封包详细信息 (Packet Details Pane) wireshark与对应的OSI七层模型 TCP包的具体内容 实例分析TCP三次握手过程 wireshark介绍 wireshark

网络抓包工具-Wireshark学习资料

wireshark一个非常牛逼的网络抓包工具.转载一系列博文 一站式学习Wireshark(一):Wireshark基本用法 一站式学习Wireshark(二):应用Wireshark观察基本网络协议 一站式学习Wireshark(三):应用Wireshark IO图形工具分析数据流 一站式学习Wireshark(四):网络性能排查之TCP重传与重复ACK 一站式学习Wireshark(五):TCP窗口与拥塞处理 一站式学习Wireshark(六):狙击网络高延时点 一站式学习Wireshark

HttpWatch网络抓包工具的使用

HttpWatch网络抓包工具是专为IE浏览器集成的一款网络拽包工具. 是一款强大的网页数据分析软件,是最好用的抓包工具,httpwatch可以抓到上传视屏图片的包,一般的抓包软件是抓不到的.打开IE浏览器,选择工具“再选择“HttpWatch Professional”即可.建议用专业版进行网络数据抓取. 网络爬虫是捜索引擎抓取系统的重要组成部分.爬虫技术可以应用在很多方面,当然是好的方面.用HttpWatch结合网络爬虫技术就可以很轻松的实现网络数据的抓取. 然后实现一些应用. (1)下载H

网络抓包工具Charles的介绍与使用

在复杂的App开发过程中,我们会涉及各种复杂的网络操作,各种API的调用和数据接收.如果我们只是通过控制台来查看网络的输入输出,就会非常麻烦.在Mac上有一款非常优秀的网络抓包工具--Charles,在iOS开发中也是常常用到.今天我们就来介绍如何安装使用Charles.关于Charles安装包.破解包和证书我已经上传至网盘:http://pan.baidu.com/s/1numMoTr    .大家可以下载直接安装.操作步骤如下: (1)直接安装dmg文件,安装过程很简单,就不赘述了.由于Ch

对几款网络抓包工具的评测

对几款网络抓包工具的评测 by 拉登哥哥 最近在写个CMD远控 写着写着 想在服务端上做点手脚 都知道杀软误报 特别是黑软大部分都报毒 但实际上是正常的 对此可能部分人并不装杀软 基本上靠自己分析软件是否安全 1 低级点的 用相关工具 检测不能真的完全保证程序无毒  也没啥技术含量 原因是 可能你正在检测时 后门没激活(比如 我设置晚上12点才向外连接等) 你在白天或其它时间检测我的工具 可能没发现任何异常 晚上你开工具做事的时候 后门也跟着激活了 哈哈 这方法 实际中还真有人这么看 以前某个木

网络抓包工具 Fiddler

网络抓包工具 Fiddler 下载网址 http://www.telerik.com/fiddler 简单介绍 Fiddler是一个http协议调试代理工具,它能够记录并检查全部你的电脑和互联网之间的http通讯,设置断点.查看全部的"进出"Fiddler的数据(指cookie,html,js,css等文件,这些都能够让你胡乱改动的意思). Fiddler 要比其它的网络调试器要更加简单.由于它不只暴露http通讯还提供了一个用户友好的格式. 能够在调试HTTP中使用.也能够用来进行爬

iOS系统设备网络抓包工具介绍:越狱和不越狱的办法

对终端进行抓包是客户端测试中的一种重要手段.本文主要介绍了ios设备(iphone.ipad和ipodtouch)的几种常用的抓包方法. 一.准备条件 需要进行抓包的设备必须经过root,俗称越狱,主要利用redsn0w和各种iOSFirmwares进行,如越狱不用更换固件版本,只需使用 redsn0w安装Cydia即可,网上有详细教程,此处省略.安装完毕,在3G或WiFi环境下启动Cydia,确认身份为“开发者”,如下图. 通过Cydia源,用户可以下载和安装比appstore更高权限的软件,

网络抓包工具的使用

随着时代的发展,网络显得越来越重要了,很多信息的交互,都通过网络来进行了.比如说,各种类似于"俺来也"的app需要将信息传送到后台.再比如,我们大多时候需要借助形如"乐动力","悦跑圈"等工具将数据传送到后台,进而同步到微信等社交平台.网络信息交互的频繁,让网络技术变得更加重要. 既然数据都是以包的形式进行传送的,我们能不能通过模拟别人或者app通过模拟数据包的形式,传递任意我们想传送的数据呢?理论上是可行的.但是,事实上,由于很多软件加密机制的

Wireshark网络抓包(三)——网络协议

一.ARP协议 ARP(Address Resolution Protocol)地址解析协议,将IP地址解析成MAC地址. IP地址在OSI模型第三层,MAC地址在OSI第二层,彼此不直接通信: 在通过以太网发生IP数据包时,先封装第三层(32位IP地址)和第二层(48位MAC地址)的报头: 但由于发送数据包时只知道目标IP地址,不知道其Mac地址,且不能跨越第二.三层,所以需要使用地址解析协议. ARP工作流程分请求和响应: 在dos窗口内"ping"某个域名抓取到的包: 二.IP协