实用网络sniffer的设计与实现

时间:2022-07-28 10:06:49

实用网络sniffer的设计与实现

摘要:本文在分析网络嗅探器的基本原理基础上,阐述在Windows Xp环境下实现一个网络嗅探器的具体方法和过程并在Visual C++ 6.0开发平台下编程实现。对运行结果进行分析,表明该网络嗅探器具备数据捕获以及对数据包的分析等基本功能,具有较好的应用价值。

关键词:网络嗅探器;混杂模式;数据包捕获;原始套接字

中图分类号:TP311.52文献标识码:A文章编号:1007-9599 (2011) 16-0000-02

The Design and Implementation of Network Sniffer

Liu Lei

(Department of Information Engineering,Jilin Business and Technology College,Changchun130061,China)

Abstract:The paper analyzed the basic principles of network sniffer,illustrated a concrete developing process for network sniffer program with Visual C++6.0 in Windows XP.The results which were analyzed showed it could capture and analyze packet data.So it has good application value.

Keywords:Network sniffer;Promiscuous mode;Packet capturing;Raw socket

一、前言

网络嗅探器,英文名称为Sniffer,是利用计算机的网络接口截获在网络中传输的数据信息的一种工具。与主动扫描相比,工作方式非常隐蔽,也容易操作。大多数的嗅探器能分析的协议有:标准以太网、TCP/IP、IPX、DECNET、FDDI、Token等。Sniffer技术用途非常广泛:网络故障诊断、协议分析、应用性能分析、网络安全保障和截获账号密码等。

二、网络Sniffer的工作原理

第一,以太网中数据以广播方式传送。

数据的收发是由网卡来完成的,网卡内的单片程序接收数据帧的目的MAC地址,根据计算机上的网卡驱动程序设置的接收模式判断是否接收,若接收,则产生中断信号通知CPU――>CPU产生中断――>操作系统(OS)调用驱动程序接收数据――>放入堆栈――>OS进行处理;若不接收,数据就被网卡截断,不通知CPU。

第二,网卡接收模式置为混杂模式。

网卡一般有四种接收模式:广播、组播、直接方式、混杂模式。其中混杂模式下网卡能够接收通过它的一切数据,不论是不是传给它的。这是编写网络嗅探器的关键。

三、网络Sniffer的具体实现

捕获的整个过程是连续的,如加载Winsock信息,建立套接字,设置网卡的混杂模式,捕获、分析数据包等。因此将这些功能的实现集中到一起,直观显示截获的数据信息。操作界面上采用控件列表框List Box显示数据,下压按钮Button触发或停止工作。应用Class Wizard添加函数来处理按钮单击事件。在编辑规则上,用户可选择对特定目标捕捉,即套接字的三个元素:协议,IP地址,端口号。采用控件radio button进行选择操作,最后将截获的数据保存到记事本文件中。功能模块有:网络截包、数据包显示、分解数据包和规则编辑。

其中主要功能代码实现如下:

//在线程冲中不断接收IP包

UINT RecvIpPro(LPVOID lpParam)

//处理已经接收到的IP包

EnterCriticalSection(&pDlg->m_ls);

pDlg->SplitIpPack(recvBuf,recvLen);//分解IP包

pDlg->ShowIpInfo(recvBuf,recvLen);//显示数据

//加载SOCK

BOOL CListenDlg::InitSock()

//建立原始套接字

int CListenDlg::CreateSock()

//设置套节字选项

setsockopt(m_RawSock,SOL_SOCKET,SO_REUSEADDR,(char*)&bOptval,sizeof(bOptval));

//把网卡置于混杂模式,获取IO操作信息

DWORD dwBufferLen[10];

DWORD dwBufferInLen=1;

DWORD dwBytesReturned=0;

err=WSAIoctl(m_RawSock, SIO_RCVALL);

//设置SOCK_RAW为SIO_RCVALL接收IP包

(&dwBufferInLen,

sizeof(dwBufferInLen),

&dwBufferLen,

sizeof(dwBufferLen),

&dwBytesReturned,

NULL, NULL );//最后两参数设置非阻塞

//分解IP包

void CListenDlg::SplitIpPack(char *pData, int len)

int iProtocol;

iProtocol=pIpHead->proto; //得到包中协议

strncpy(m_szProtocol,CheckProtocol(iProtocol),MAX_PROTO_TEXT_LEN);

saSource.sin_addr.s_addr=pIpHead->sourceIP;

strncpy(m_szSourceIP,inet_ntoa(saSource.sin_addr),MAX_ADDR_LEN); //得到源IP

四、结束语

本程序界面简洁,功能简单好用,系统资源占用也很少,是一种切实可行的实现方案。Sniffer技术就像一把双刃剑,既可以进行络维护和管理,也可以被黑客利用,与其他技术手段结合跨越交换机、路由器等抓包,进行网络攻击。总之,在网络安全问题日益突出的今天,我们要更深入研究和正当使用网络嗅探技术,加强防范意识。

参考文献:

[1]陈千,马剑锋,焦政,许华虎.Sniffer技术在网络管理中的应用和研究[J].计算机工程与设计,2004,25(4):536-539

[2]龚伟.网络嗅探器的检测及安全对策[J].微计算机信息,2006,22(15):72-74

[3]宋方方.基于桥接技术的网络嗅探器设计与实现[D].武汉:华中科技大学,2007

[4]熊宗武,钱朝阳.基于Windows的网络嗅探器的实现[J].安徽建筑工业学院学报:自然科学版,2008,16(6):94-96

上一篇:数字电视广播播出系统的构成和关键技术 下一篇:主机安全评估系统研究现状分析及加快研究的必...