网络数据包捕获及分析Word文档格式.docx
《网络数据包捕获及分析Word文档格式.docx》由会员分享,可在线阅读,更多相关《网络数据包捕获及分析Word文档格式.docx(7页珍藏版)》请在冰豆网上搜索。
![网络数据包捕获及分析Word文档格式.docx](https://file1.bdocx.com/fileroot1/2023-1/14/b88b44b9-f7b9-43d3-adfb-8fd30e98ad78/b88b44b9-f7b9-43d3-adfb-8fd30e98ad781.gif)
正常情况下,一个网络接口应该只响应两种数据帧:
①与自己硬件地址相匹配的数据帧;
②向所有计算机的广播数据帧。
在实际系统中由网卡来完成数据的收发。
网卡接收到传来的数据,网卡内的程序接收数据帧的目的MAC地址,然后根据网卡驱动程序设置的接收模式判断:
认为应该接收,就在接收后产生中断信号通知CPU;
认为不该接收就丢掉不管。
CPU得到中断信号产生中断,操作系统就根据网卡驱动程序设置的网卡中断程序地址调用驱动程序接收数据。
驱动程序接收数据后,放入信号堆栈让操作系统处理。
对于网卡来说一般有4种接收模式:
①广播方式:
该模式下的网卡能够接收网络中的广播信息。
②组播方式:
该模式下的网卡能够接收组播数据。
③直接方式:
该模式下只有目的网卡才能接收数据。
④混杂模式:
该模式下的网卡能够接收一切通过它的数据。
所以要想实现对网络的数据进行获取分析,首先应该把网卡设置成混杂模式。
1.2 数据获取
数据获取主要有两种方法:
通过数据链路层获取和通过
网络层获取。
(1通过链路层获取
在TCP/IP的体系结构中,数据链路层和物理层共同构成网络接口层,作为TCP/IP的第一层。
在这一层传输的数据格式是以太帧。
获取以太帧目前可以通过LibPcap和WinPcap两种捕包工具。
LibPcap是一种与系统无关,采用分组捕获机制的分组捕获函数库。
使用LibPcap 编写的程序可自由的跨平台使用。
而WinPcap是LibPcap 的Windows版本,集成于Windows95,98,ME,NT,2000和XP操作系统的设备驱动程序,可以从网卡捕获或者发送原始数据,同时能够过滤并且存储数据包。
(2通过网络层获取
通过网络层获取数据主要借助原始套接字。
套接字是网络应用编程接口。
套接字有三类:
流式套接字、数据报套接字和原始套接字。
前两种套接字只能访问到传输层。
而原始套接字则可以获取ICMP、TCP、UDP等数据包。
在Windows环境下可用Winsock来实现。
2 相关协议介绍2.1 IP协议
IP的基本功能:
寻址、路由选择和数据包的分割和组装。
它不提供可靠的传输服务。
依据IP报文格式在程序中声明IP首部:
typedef struct _IPHEADER {
unsigned char header_len:
4;
unsigned char version:
unsigned char tos;
unsigned short total_len;
unsigned short ident;
unsigned short flags;
unsigned char ttl;
作者简介:
卢建华(1982-,女,西安电子科技大学2006级硕士研究生,研究方向:
计算机应用。
蒋明(1958-,男,
西安电子科技大学高工,硕士生导师。
陈淑芳(1970-,女,山西省朔州市平鲁区职业中学讲师。
unsigned char proto;
unsigned short checksum;
unsigned int sourceIP;
unsigned int destIP;
}IPHEADER;
2.2 TCP协议
TCP提供全双工和可靠交付的服务。
该协议主要用于在主机间建立一个虚拟连接,以实现高可靠性的数据包交换。
依据TCP报文格式在程序中声明TCP报头:
struct TCPPacketHead {WORD SourPort;
WORD DestPort;
DWORD SeqNo;
DWORD AckNo;
BYTE HLen;
BYTE Flag;
WORD WndSize;
WORD ChkSum;
WORD UrgPtr;
};
2.3 UDP协议
UDP是一个无连接协议,传输数据之前源端和终端不建立连接,也不使用拥塞控制、不保证可靠交付。
依据UDP报文格式在程序中声明UDP报头:
struct UDPPacketHead {WORD SourPort;
WORD Len;
2.4 ICMP协议
ICMP是TCP/IP协议集中的一个子协议,属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。
依据ICMP报文格式在程序中声明ICMP报头:
struct ICMPPacketHead {BYTE Type;
BYTE Code;
WORD Id;
// 增加了标识变量
WORD Seq;
// 增加了序号变量
3 具体实现
系统的开发环境是VC++6.0,利用RAW SOCKET套接字来实现包捕获功能。
3.1 包捕获模块的实现
(1m_s = socket( AF_INET ,SOCK_RAW ,IPPROTO_IP ;
// 创建原始套接字
(2setsockopt(m_s,SOL_SOCKET,SO_RCVTIMEO,(constchar*&
rcvtimeo ,sizeof(rcvtimeo
;
// 设置IP头操作选项,超时接收选择(3SOCKADDR_IN sa;
sa.sin_family = AF_INET;
sa.sin_port = htons(6000;
// 设置端口号sa.sin_addr.s_addr= m_iphostsource;
// 设置IP地址
bind(m_s,(PSOCKADDR&
sa,sizeof(sa ;
// 将原始套接字绑定到本地网卡
(4设置套接字接收模式,并启动新的接收线程thread-Func
If( SOCKET_ERROR !
=WSAIoctl( m_s,SIO_RCVALL ,&
dwBufferInLen,sizeof(dwBufferInLen,&
dwBufferLen,sizeof(dwBufferLen,&
dwBytesReturned,NULL,NULL
其中threadFunc方法的实现是:
UINT threadFunc ( LPVOID pParam {
PeekMessage(&
msg, NULL, WM_USER, WM_USER,
PM_NOREMOVE;
pDlg->
m_threadID=GetCurrentThreadId( ;
// 取得线
程的ID号
While(TRUE // 循环接收消息
{if( PeekMessage( &
msg , 0 ,WM_CLOSE,WM_CLOSE,
PM_NOREMOVE
{ closesocket( pDlg->
m_s ;
// 检测
WM_CLOSE消息
………… break ;
}
memset( buf , 0 , sizeof(buf ;
int iRet = recv( pDlg->
m_s , buf , sizeof( buf , 0 ;
// 从
套接字接收数据
// 分析模块…}}
3.2 包分析模块的实现
首先根据先前定义各协议的报头,解析IP报头内容,进而确定协议类型,TCP、UDP或ICMP,之后再分别进行相应的报头解析。
部分程序为:
定义一个IP头指针pIpHeader,利用指针的移动来实现包的解析。
然后依据IP数据包结构,分别读取IP数据包的各项信息。
根据proto字段进一步确定其为TCP数据包、UDP数据包还是ICMP数据包。
[下转27页]
Router(config#ip access-list extended internal_ACLRouter(config-ext-nacl#permit tcp any host 192.1.2.1 eq smtpRouter(config-ext-nacl#permit tcp any host 192.1.2.1 eq popRouter(config-ext-nacl#deny tcp any any ep popRouter(config-ext-nacl#deny tcp any any eq smtpRouter(config-ext-nacl#permit ip any anyRouter(config-ext-nacl#exit
Router(config#ip inspect name internal_CBAC ftpRouter(config#ip inspect name internal_CBAC httpRouter(config#ip inspect name internal_CBAC tcpRouter(config#ip inspect name internal_CBAC udpRouter(config#ip inspect name internal_CBAC icmpRouter(config#interface ethernet0
Router(config-if#ip access-group internal_ACL inRouter(config-if#ip inspect internal_CBAC in
(2在全局模式下,分别设置TCP的建立时间为15秒,TCP的空闲超时为60秒,UDP的空闲超时为20秒,半开连接阀值为400,1分钟连接尝试次数为400,主机最大半开连接数为250。
Router(config#ip inspect tcp synwait-time 15Router(config#ip inspect tcp idle-time 60Router(config#ip inspect udp idle-time 20
Router(config#ip inspect max-incomplete high 400Router(config#ip inspect max-incomplete low 300Router(config#ip inspect one-minute high 400Router(config#ip inspect one-minute low 300
Router(config#ip inspect tcp max-incomplete host 250 block-time 0
4 结束语
充分应用CBAC的访问控制特性,能够使我们在一定程度上较好的防御特定的DoS风暴攻击。
但应该注意,在修改超时值和连接阀值时,要考虑网络规模与具体应用,监控CBAC及网络活动日志,确保没有因为参数设置影响正常的网络应用。
另外,我们还可以结合CISCO IOS的ACL、入侵检测系统、日志和审查功能以及应用层过滤技术等,检测和防御更多类型的网络攻击,做好网络安全工作。
应用CBAC也存在一些局限性,如流量审查会增加路由器的负荷,不能审查加密的数据包,以及有限的应用层审查等。
参考文献
[1]李德全.拒绝服务攻击[M].北京:
电子工业出版社.2007.[2]W.Rchard Stevens.TCP/IP Illustrated Volume 1:
The Protocols[M].范建华等译.北京:
机械工业出版社.2000.
[3]Richard A. Deal.陈克忠译.Cisco Router Firewall Security[M].北京:
人民邮电出版社.2000.
HdrLen =( pIpHeader->
header_len * 4;
m=pIpHeader->
proto;
switch(m {
case IPPROTO_TCP:
pTCPHead=(struct TCPPacketHead *
(buf+HdrLen;
…………break;
case IPPROTO_UDP:
pUDPHead=(struct UDPPacketHead *
case IPPROTO_ICMP:
pICMPHead=(struct ICMPPacketHead *
default:
break;
根据不同的选择执行不同的程序,并把最后结果显示在
对话框中。
4 总结
本文主要实现的功能是对网络上的数据包进行捕获及分析。
即首先通过捕包模块把经过主机网卡的数据包截获,并存储在缓冲存储器中,然后通过分析模块对它进行分析,从而得到网络层和传输层协议的报头内容。
当然这个系统也有不完善的地方,如由于捕获到的数据包头不包含有帧信息,因此不能接收到与IP同属网络层的其它数据包,如ARP数据包、RARP数据包等。
[1]谢希仁.计算机网络[M].北京:
清华大学出版社.2001.[2]韩新宇,章惠君.Windows下实现网络数据包捕获[J].维普资讯网.
[3]Jenny J. He,Dimitra Simeonidou. Flow Routing and its Perfor-mance Analysis in Optical IP Networks.Photonic NetworkCommunications.2001.
[上接17页]