嗅探器 可以窃听网络上流经的数据包。 用集线器hub组建的网络是基于共享的原理的, 局域网内所有的计算机都接收相同的数据包, 而网卡构造了硬件的“过滤器“ 通过识别MAC地址过滤掉和自己无关的信息, 嗅探程序只需关闭这个过滤器, 将网卡设置为“混杂模式“就可以进行嗅探 用交换机switch组建的网络是基于“交换“原理的 ,交换机不是把数据包发到所有的端口上, 而是发到目的网卡所在的端口。
嗅探 sniff。嗅探器可以窃听网络上流经的数据包。用集线器hub组建的网络是基于共享的原理的,局域网内所有的计算机都接收相同的数据包,而网卡构造了硬件的“过滤器“通过识别MAC地址过滤掉和自己无关的信息,嗅探程序只需关闭这个过滤器,将网卡设置为“混杂模式“就可以进行嗅探用交换机switch组建的网络是基于“交换“原理的,交换机不是把数据包发到所有的端口上,而是发到目的网卡所在的端口。这样嗅探起来会麻烦一些,嗅探程序一般利用“ARP欺骗“的方法,通过改变MAC地址等手段,欺骗交换机将数据包发给自己,嗅探分析完毕再转发出去。

#include <stdio.h>
#include <winsock2.h>
#include <ws2tcpip.h>#pragma comment (lib,"ws2_32.lib")#define SIO_RCVALL _WSAIOW(IOC_VENDOR,1)struct IPHEAD
{unsigned char h_len:4;//4位首部长度+4位IP版本号unsigned char ver:4;unsigned char tos;//8位服务类型TOSunsigned short total_len;//16位总长度(字节)unsigned short ident;//16位标识unsigned short frag_and_flags;//3位标志位unsigned char ttl;//8位生存时间 TTLunsigned char proto;//8位协议 (TCP, UDP 或其他)unsigned short checksum;//16位IP首部校验和unsigned int sourceip;//32位源IP地址unsigned int destip;//32位目的IP地址
};struct TCPHEAD //定义TCP首部
{
USHORT th_sport; //16位源端口
USHORT th_dport; //16位目的端口
unsigned int th_seq; //32位序列号
unsigned int th_ack; //32位确认号
unsigned char th_lenres; //4位首部长度/6位保留字
unsigned char th_flag; //6位标志位
USHORT th_win; //16位窗口大小
USHORT th_sum; //16位校验和
USHORT th_urp; //16位紧急数据偏移量
};char *phostlist[10];//列举主机网卡的数组DWORD _stdcall listen(void *p)
{SOCKET s;struct sockaddr_in addr;int itimeout=1000;int ret;char cbuf[1500];//接收数据缓冲区struct IPHEAD *piphd;//定义IP头结构struct TCPHEAD *ptcphd;//定义TCP头结构s=socket(AF_INET,SOCK_RAW,IPPROTO_RAW); //创建一个原始套接字setsockopt(s,SOL_SOCKET,SO_RCVTIMEO,(char*)&itimeout,sizeof(itimeout));memset(&addr,0,sizeof(addr));addr.sin_family=AF_INET;addr.sin_addr.S_un.S_addr=inet_addr((char *)p);addr.sin_port=htons(6000);//设置本地端口号bind(s,(struct sockaddr *)&addr,sizeof(addr));//绑定端口//设置sock_raw为sio_rcvall,以便接收所有IP包DWORD dwin=1;DWORD dwout[10];DWORD dwret;WSAIoctl(s,SIO_RCVALL,&dwin,sizeof(dwin),&dwout,sizeof(dwout),&dwret,NULL,NULL);for(;;){ret=recv(s,cbuf,sizeof(cbuf),0);//接收数据if(ret==SOCKET_ERROR){if(WSAGetLastError()==WSAETIMEDOUT)continue;closesocket(s);return 0;}piphd=(struct IPHEAD *)cbuf;//取得IP头数据的地址int iIphLen = sizeof(unsigned long) * (piphd->h_len  & 0xf);ptcphd=(struct TCPHEAD *)(cbuf+iIphLen);//取得TCP头数据的地址printf("From : %s \t port %d\t",inet_ntoa(*(struct in_addr*)&piphd->sourceip),ntohs(ptcphd->th_sport) );printf("To : %s \t port %d  ",inet_ntoa(*(struct in_addr*)&piphd->destip),ntohs(ptcphd->th_dport));switch(piphd->proto)//根据IP头的协议判断数据包协议类型{case 1:printf("ICMP\n");break;case 2:printf("IGMP\n");break;case 6:printf("TCP\n");break;case 17:printf("UDP\n");break;default:printf("unknow:%d\n",piphd->proto);}}return 1;
}void main()
{//初始化sockWSADATA wsa;int i=0;DWORD dwtid;char chname[128];hostent *host;WSAStartup(MAKEWORD(2,1),&wsa);gethostname(chname,sizeof(chname));host=gethostbyname(chname);while(host->h_addr_list[i]!=NULL)//取所有网卡序号,为每个网卡开启一个监听线程{phostlist[i]=(char *)malloc(16);sprintf(phostlist[i],"%s",inet_ntoa(*(struct in_addr *)host->h_addr_list[i]));printf("Bind to %s\n",phostlist[i]);CreateThread(NULL,0,listen,phostlist[i],0,&dwtid);i++;}for(;;)//为每个网卡创建监听线程后要用一个循环防止主线程退出{Sleep(10);}
} 

转载于:https://www.cnblogs.com/new0801/archive/2013/02/01/6177617.html

VC++实现数据包嗅探相关推荐

  1. 数据包嗅探 Packet Sniffing

    实验前言 数据包嗅探(packet sniffing)和数据包欺骗(packet spoofing) 在网络安全中两个非常重要的部分.他们是网络通讯中两个主要的威胁.了解这两个威胁对于了解网络安全理论 ...

  2. 使用原始套接字Raw Socket实现数据包嗅探

    背景 网络上随时都流通了大量的数据包,我们要想实现抓包并分析,实现思路思路大概是:在合适的时候捕获数据包,保存到缓冲区,作为备用:然后,按照一定的结构和格式去读取缓冲区的内容.由于各种公开的网络协议是 ...

  3. Linux下C/C++数据包嗅探(Sniffer)

    我们知道当任何数据必须通过计算机网络传输时,它在发送方节点被分解成更小的单元,称为数据包.在接收方节点以原始格式重新组装.它是计算机网络上最小的通信单元.它也被称为块.段.数据报或单元.通过计算机网络 ...

  4. VC++分析数据包实现Telnet协议分析

    Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式.它为用户提供了在本地计算机上完成远程主机工作的能力.在终端使用者的电脑上使用telnet程序,用它连接 ...

  5. Scapy 伪造网络数据包

    实验说明 这里说明的数据包伪造只是伪造数据包发送的源地址.网络上有一些有人说可以对数据包内容的伪造(修改)和转发,不过目前还没找到这一点是如何完成的,甚至是在官方提供的文档上也没有看到这一类操作的说明 ...

  6. 《Wireshark数据包分析实战(第2版)》目录—导读

    版权声明 Wireshark数据包分析实战(第2版) Copyright © 2011 by Chris Sanders. Title of English-language original:Pra ...

  7. 第四章 玩转捕获数据包

    1,分析数据包 Wireshark允许你对符合一定条件的数据包进行标记,或者打印数据包以供参考. 1.1,保存和导出捕获文件 如果想找到符合特定条件的数据包,可以使用Ctrl+F快捷键打开Wiresh ...

  8. 数据包分析技术与网络基础

    1,数据包分析与数据包嗅探器 数据包分析,通常也被称为数据包嗅探或协议分析,指的是捕获和解析网络上在线传输数据的过程. 数据包分析过程通常由数据包嗅探器来执行,而数据包嗅探器则是一种用来在网络媒介上捕 ...

  9. 无线攻击 --aircrack-ng套件之一:Airodump-NG(无线数据包捕获工具)

    文章目录 一.用法概述 二.命令格式 三.用法示例 3.1 扫描信号 / 数据包嗅探 / 监控网络 3.2 监听指定目标频道 一.用法概述   airodump-ng是aircrack-ng的套件之一 ...

最新文章

  1. C语言strcpy,strncpy和strlcpy讲解
  2. mysql 线上加索引_MySQL加索引都经历了什么?
  3. 10个节省时间和改善工作流的Git技巧
  4. 通过Dapr实现一个简单的基于.net的微服务电商系统(八)——一步一步教你如何撸Dapr之链路追踪
  5. 那么温暖http合约,入门。
  6. Oracle10gR5GridControl InstallOnLinux
  7. 5G 已来,是否意味着 4G 淘汰?
  8. 新型APT组织正在攻击全球的政府实体
  9. linux查看绑定ipv6的端口号,[原创]如何在windows和linux绑定IPV6
  10. php拍照虚线上传图片,照片怎么添加白色虚线 给照片上的人物周围添加虚线描边效果|照片处理工具...
  11. 5W 功耗!Intel 宣布首款 7nm 芯片 EyeQ5:用于无人车
  12. 使用VC 编程改变字体 注意点--需要设置GB2312—CHARSET
  13. java 读取文件 效率_JAVA读写文本文件的效率
  14. SpringBoot --- 整合Elasticsearch
  15. 达梦数据库导出表格形式(Excel)方式
  16. 智能管家---1.项目搭建
  17. 秀米推文添加附件的方法
  18. Linux C 函数参考(日期时间)
  19. 为什么寄存器比RAM快
  20. android 发qq,腾讯发布QQ轻聊版 for Android V3.4.3版

热门文章

  1. 光电自动避障小车_AGV机器人:基于视觉避障的理论基础
  2. JDK1.8网盘链接
  3. Java中Date日期以及日期格式化
  4. NYOJ-子串和(dp)
  5. python与机器学习(六)——支持向量机(SVM) 多层感知机(MLP)
  6. Python-OpenCV基本操作
  7. 机器学习 集成学习理论基础 随机森林+adaboost
  8. 微服务部署:蓝绿部署、滚动部署、灰度发布
  9. 移动国家号(MCC)
  10. Logstash+elasticsearch+elastic+nignx