论文部分内容阅读
摘要:文章阐明网络数据包分析成为研究网络安全的重要方法,然后设计了基于TCP/IP协议的网络数据包分析器,实现了对网络数据的适时截取和分析,为使用者了解当前的网络数据包状况提供了很好的参考。
关键词:网络数据包; TCP/IP协议; 数据包分析
一、引言
随着近年来Internet的发展壮大,计算机网络在政治、军事、金融、商业、交通、电信、文教等方面的作用日益增强。网络上各种新业务,比如电子商务、电子现金、数字货币、网络银行、移动支付等业务的兴起,以及各种专网,比如金融网、公安网等的建设,使得在网络上传输的数据越来越敏感,也使得数据安全问题变得越来越重要。
网络性能分析工具是分析网络状态和研究网络安全的重要方法,通过对网络数据的截取和分析,可以了解当前网络的工作状态和是否有网络攻击行为,并据此决定是否启用网络防御措施。文章设计了一种基于TCP/IP网络数据包分析系统,实现了对IP和TCP数据报文的截获分析的功能①。
二、网络数据包截获及分析工具设计
该软件是运用Microsoft Visual C++开发的,它能够迅速地构建下一代应用程序,这些应用程序可以应用到任何互联网设备,并能与任何平台集成②。从总体上看,该软件主要由两大主要部分(功能)构成:
(1)数据包截获:用程序实现本地网卡状态为"混杂"模式,当网卡处于这种"混杂"方式时,该网卡具备"广播地址",它对遇到的每一个帧都产生一个硬件中断以便提醒操作系统处理流经该物理媒体上的每一个报文包③。
(2)数据包分析:通过对数据包帧的格式的分析,判断数据包所含协议的类型,源IP地址及目的IP地址,源端口和目的端口④。这样我们对数据包的安全性有所了解。
数据包捕获模块用于监视和验证网络流量情况,它可以截取或者阅读网络上OSI协议模型中各个协议层次上的数据包。它可以捕获通过原始套接口(Socket)的原始数据包(Raw Packet),当一个数据包到达网络接口时数据包捕获程序就直接从缓存区捕获的数据包,以供数据分析和处理时调用。在数据包捕获程序中,通过设置网卡工作于混杂状态,对网络链路进行监听并收集数据包,从而获得数据包头信息。
三、数据包截获及分析工具代码实现
(一)创建套接字。使用Socket()函数创建原始套接字Socketfd=Socket(AF INEF,SOCK RAW,0)⑤。第一个参数是地址类型,设为AFINET~I|是用于不同主机之间的通信;第二个参数即Socket的类型参数,这里使用SOCK RAW;第三个参数是协议参数,指定程序使用具体的协议。这里使用0,表示TCP/IP协议。
(二)将网卡设置为混杂模式。在程序中使用WSAIoct10函数是用来将网卡设置为混杂模的。IntWSAloctl(SOCKETS,DWORDdwloC-ontrolCode,LPVOID
IpvinBufer,DWORDcbinBuffer,LPVOID lpvoutBufer,DWORD cbout-Bufer,LPDWORD lpcbByteReturned,LPW SAOV?ELAPPED
lpOverlapped,LPWSAOVERLAPPED-COMPLETION-ROUTINE IpcompIetionRoutine)⑥。
(三)捕获数据包。网络接口设置为混杂模式以后,进人捕获数据包的模块。调用Recv(socket,bufer,sizeof(bufer),0)函数⑦。其中第一个参数是以连接套接字的描述符。第二个参数是接收数据的缓冲区地址。第三个参数是缓冲区大小。第四个参数是调用方式,O表示无特殊行为。
(四)数据包分析。本系统数据包分析模块的实现主要是通过对数据包进行解析然后通过判断iphdr->protocol来实现对数据包的分析的。下面是数据包分析模块实现的主要代码⑧:
iphdr=(ip_header*)buf;
TCP协议解析: if(iphdr->protocol==6)//判断此数据包为TCP协议
{tcphdr=(tcp_header*)(buf+(iphdr->ver_ihl&0x0f)*4);
sListLine.Format("ThisisaTCPpacket,bread=:%d,packetlen=%.",bread,(iphdr->ver_ihl&0x0f)*4);
strData.Format("sPort:%d,dPort:%d",ntohs(tcphdr->sPort),ntohs(tcphdr->dPort));
sListLine+=strData;
sip.S_un.S_addr=iphdr->sAddress;
sa=inet_ntoa(sip);
dip.S_un.S_addr=iphdr->dAddress;
da=inet_ntoa(dip);
四、结论
通过网络数据包截获及分析工具,我们基本上可以了解到网络数据包中所包含的一般信息,该程序提取出数据包中比较有代表性的信息:协议,源/目的地址,源/目的端口以及数据包长度。通过这些信息,我们就可以对网络状态有一个大体上的了解;通过源/目的地址可以知道在网络上有哪些活动的主机;通过数据包长度的累加可以了解到当前网络的流量。本文介绍的以原始套接字的方式对网络数据进行捕获的方法实现起来比较简单,尤其是不需要编写VxD虚拟设备驱动程序就可以实现抓包,使得其编写过程变的比较简便。但由于捕获到的数据包头不包含有帧信息,因此不能接收到与IP同属网络层的其它数据包,如ARP数据包、RARP数据包等。由于所学知识有限,没有对数据包做进一步的分析,而是仅仅给出了对一般信息的分析方法。通过本论文的介绍,可对原始套接字的使用方法以及TCP/IP协议结构原理等知识有一个基本的认识。
参考文献:
[1]狄博.TCP/IP协议分析及通信应用编程.计算机与现代化,2006(03):77-81.
[2]郎锐,孙方.Visual C++网络通信程序开发基础及实例解析第2版,机械工业出版社,2006.
[3]方敏.网络应用程序设计[M].西安:西安电子科技大学出版社.2005.
[4]汤小丹.计算机操作系统[M].西安:西安电子科技大学出版社.2001.
[5]AnthonyJones JimOhlund.Windows网络编程技术[M].北京:机械工业出版社,2001.
[6]黄海鹰.Visual C++6.0程序设计---基础与实例分析[M].北京:清华大学出版社,2004.
[7]张宏林.Visual C++6.0程序设计与开发技术大全[M].北京:人民邮电出版社,2006.
[8]Balasubramaniyan J.S.An architecture for intrusion detection using autonomous agents[J].IEEE Computer Society,1998:63-112.
作者简介:艾翔,男,西北政法大学信息网络中心助理工程师,研究方向:信息网络。
关键词:网络数据包; TCP/IP协议; 数据包分析
一、引言
随着近年来Internet的发展壮大,计算机网络在政治、军事、金融、商业、交通、电信、文教等方面的作用日益增强。网络上各种新业务,比如电子商务、电子现金、数字货币、网络银行、移动支付等业务的兴起,以及各种专网,比如金融网、公安网等的建设,使得在网络上传输的数据越来越敏感,也使得数据安全问题变得越来越重要。
网络性能分析工具是分析网络状态和研究网络安全的重要方法,通过对网络数据的截取和分析,可以了解当前网络的工作状态和是否有网络攻击行为,并据此决定是否启用网络防御措施。文章设计了一种基于TCP/IP网络数据包分析系统,实现了对IP和TCP数据报文的截获分析的功能①。
二、网络数据包截获及分析工具设计
该软件是运用Microsoft Visual C++开发的,它能够迅速地构建下一代应用程序,这些应用程序可以应用到任何互联网设备,并能与任何平台集成②。从总体上看,该软件主要由两大主要部分(功能)构成:
(1)数据包截获:用程序实现本地网卡状态为"混杂"模式,当网卡处于这种"混杂"方式时,该网卡具备"广播地址",它对遇到的每一个帧都产生一个硬件中断以便提醒操作系统处理流经该物理媒体上的每一个报文包③。
(2)数据包分析:通过对数据包帧的格式的分析,判断数据包所含协议的类型,源IP地址及目的IP地址,源端口和目的端口④。这样我们对数据包的安全性有所了解。
数据包捕获模块用于监视和验证网络流量情况,它可以截取或者阅读网络上OSI协议模型中各个协议层次上的数据包。它可以捕获通过原始套接口(Socket)的原始数据包(Raw Packet),当一个数据包到达网络接口时数据包捕获程序就直接从缓存区捕获的数据包,以供数据分析和处理时调用。在数据包捕获程序中,通过设置网卡工作于混杂状态,对网络链路进行监听并收集数据包,从而获得数据包头信息。
三、数据包截获及分析工具代码实现
(一)创建套接字。使用Socket()函数创建原始套接字Socketfd=Socket(AF INEF,SOCK RAW,0)⑤。第一个参数是地址类型,设为AFINET~I|是用于不同主机之间的通信;第二个参数即Socket的类型参数,这里使用SOCK RAW;第三个参数是协议参数,指定程序使用具体的协议。这里使用0,表示TCP/IP协议。
(二)将网卡设置为混杂模式。在程序中使用WSAIoct10函数是用来将网卡设置为混杂模的。IntWSAloctl(SOCKETS,DWORDdwloC-ontrolCode,LPVOID
IpvinBufer,DWORDcbinBuffer,LPVOID lpvoutBufer,DWORD cbout-Bufer,LPDWORD lpcbByteReturned,LPW SAOV?ELAPPED
lpOverlapped,LPWSAOVERLAPPED-COMPLETION-ROUTINE IpcompIetionRoutine)⑥。
(三)捕获数据包。网络接口设置为混杂模式以后,进人捕获数据包的模块。调用Recv(socket,bufer,sizeof(bufer),0)函数⑦。其中第一个参数是以连接套接字的描述符。第二个参数是接收数据的缓冲区地址。第三个参数是缓冲区大小。第四个参数是调用方式,O表示无特殊行为。
(四)数据包分析。本系统数据包分析模块的实现主要是通过对数据包进行解析然后通过判断iphdr->protocol来实现对数据包的分析的。下面是数据包分析模块实现的主要代码⑧:
iphdr=(ip_header*)buf;
TCP协议解析: if(iphdr->protocol==6)//判断此数据包为TCP协议
{tcphdr=(tcp_header*)(buf+(iphdr->ver_ihl&0x0f)*4);
sListLine.Format("ThisisaTCPpacket,bread=:%d,packetlen=%.",bread,(iphdr->ver_ihl&0x0f)*4);
strData.Format("sPort:%d,dPort:%d",ntohs(tcphdr->sPort),ntohs(tcphdr->dPort));
sListLine+=strData;
sip.S_un.S_addr=iphdr->sAddress;
sa=inet_ntoa(sip);
dip.S_un.S_addr=iphdr->dAddress;
da=inet_ntoa(dip);
四、结论
通过网络数据包截获及分析工具,我们基本上可以了解到网络数据包中所包含的一般信息,该程序提取出数据包中比较有代表性的信息:协议,源/目的地址,源/目的端口以及数据包长度。通过这些信息,我们就可以对网络状态有一个大体上的了解;通过源/目的地址可以知道在网络上有哪些活动的主机;通过数据包长度的累加可以了解到当前网络的流量。本文介绍的以原始套接字的方式对网络数据进行捕获的方法实现起来比较简单,尤其是不需要编写VxD虚拟设备驱动程序就可以实现抓包,使得其编写过程变的比较简便。但由于捕获到的数据包头不包含有帧信息,因此不能接收到与IP同属网络层的其它数据包,如ARP数据包、RARP数据包等。由于所学知识有限,没有对数据包做进一步的分析,而是仅仅给出了对一般信息的分析方法。通过本论文的介绍,可对原始套接字的使用方法以及TCP/IP协议结构原理等知识有一个基本的认识。
参考文献:
[1]狄博.TCP/IP协议分析及通信应用编程.计算机与现代化,2006(03):77-81.
[2]郎锐,孙方.Visual C++网络通信程序开发基础及实例解析第2版,机械工业出版社,2006.
[3]方敏.网络应用程序设计[M].西安:西安电子科技大学出版社.2005.
[4]汤小丹.计算机操作系统[M].西安:西安电子科技大学出版社.2001.
[5]AnthonyJones JimOhlund.Windows网络编程技术[M].北京:机械工业出版社,2001.
[6]黄海鹰.Visual C++6.0程序设计---基础与实例分析[M].北京:清华大学出版社,2004.
[7]张宏林.Visual C++6.0程序设计与开发技术大全[M].北京:人民邮电出版社,2006.
[8]Balasubramaniyan J.S.An architecture for intrusion detection using autonomous agents[J].IEEE Computer Society,1998:63-112.
作者简介:艾翔,男,西北政法大学信息网络中心助理工程师,研究方向:信息网络。