模仿Wireshark网络抓包工具实现---c++
来源:互联网 发布:计算机编程怎么自学 编辑:程序博客网 时间:2024/06/07 19:08
最近在用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
0 0
- 模仿Wireshark网络抓包工具实现---c++
- 模仿Wireshark网络抓包工具实现---c++
- 模仿Wireshark网络抓包工具实现---c++
- 模仿Wireshark网络抓包工具实现---c++
- 模仿Wireshark网络抓包工具实现---c++
- 模仿Wireshark网络抓包工具实现---c++
- 模仿Wireshark网络抓包工具实现---c++
- Wireshark网络抓包工具
- 网络抓包工具Wireshark
- 介绍一款网络抓包工具-Wireshark
- 网络抓包工具wireshark使用技术
- 网络抓包工具 wireshark、tcp dump
- Wireshark网络抓包工具--过滤
- 抓包工具 Wireshark
- 抓包工具 Wireshark
- Wireshark抓包工具
- wireshark 抓包工具
- 抓包工具wireshark
- 360笔试遇到的博弈问题(DP)
- 数学题 贪心+二分答案
- 【Leetcode】459. Repeated Substring Pattern
- CGLib动态代理
- 手动将Apache注册为系统服务
- 模仿Wireshark网络抓包工具实现---c++
- 邮件发送客户端
- 信息奥赛 按一定规则出牌
- vi使用、Ant安装配置、Junit和Sonar的学习心得
- cudnn5.0配置
- tensorflow官方rnn教程的源码阅读总结
- 日常代码
- Spring MVC入门1
- Activiti 学习笔记 小结