论文部分内容阅读
摘要:本文在分析网络嗅探器的基本原理基础上,阐述在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
关键词:网络嗅探器;混杂模式;数据包捕获;原始套接字
中图分类号: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