简单网络嗅探c++实现

您所在的位置:网站首页 网络嗅探器的设计与实现源代码是什么 简单网络嗅探c++实现

简单网络嗅探c++实现

2024-02-06 05:47| 来源: 网络整理| 查看: 265

一、原理

    用一些比喻,集线器网络中所有主机都连接在一条网线上,也就是说每台主机发送的数据都将经过其他主机的门前(网卡),只是说一般网卡一看数据包报头,这不是发给自己的,就不理这个包了,而我们现在要做的,就是敞开大门,不管这个包是发给谁的,都将其纳入囊中。那么如何做呢?只需将网卡设置为混杂模式。

    要用到C语言网络编程中的Socket,一般的Socket只能获取到传输数据包,所以我们要用的是Raw SOCKET(原始Socket),它可以工作在链路层或者IP层(取决于创建时的参数设置)。

二、实现

    原始套接字的创建方法跟TCP/IP创建方法几乎一模一样:

    int sockfd;

    sockfd = socket(AF_INET,SOCK_RAW,IPPROTO_ICMP);

     这两句程序你就可以创建一个原始套接字。这种类型套接字的功能与TCP或者UDP类型套接字的功能有很大的

  不同:TCP/UDP类型的套接字只能够访问传输层以及传输层以上的数据,因为当IP层把数据传递给传输层时,下的

  数据包头已经被丢掉了。而原始套接字却可以访问传输层以下的数据,所以使用raw套接字你可以实现上至应用层

  的数据操作,也可以实现下至链路层的数据操作。

 

三、代码

#include #include #include #include #include #pragma comment(lib,"WS2_32.lib") #define BUFFER_MAX 2048 #define IP_HDRINCL 2 #define SIO_RCVALL _WSAIOW(IOC_VENDOR,1) using namespace std; int main(){ SOCKET sock; int n_read,proto; int flag = 1; char buffer[BUFFER_MAX]; char LocalName[256]; char *ethhead,*iphead,*tcphead,*udphead,*icmphead,*p; WSADATA WSAData; if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0) { printf("WSAStartup ERROR.\\n"); //如果初始化WSADATA结构得到错误码,则显示出错信息 return -1; } // if(sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3