基于C++的ICMP网络嗅探器协议编程

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于C++的ICMP网络嗅探器协议编程

摘要:随着Internet网络的普及与发展,各大专院校、集团公司和企事业单位等都已组建自己的内联网(Intranet)。内联网的路由器和交换机设备的正常工作是保证其网络通信正常的基础。因此,如何在最短的的时间内得知网络所有设备的工作状态是极其关键的。本文提出了利用ICMP协议技术的方法。以最快的方式批次的监测整个网络设备,极大的提高了网络管理效率。

关键词: ICMP协议网络检测

ICMP protocol network sniffer-based programming in C++

Abstract: with the popularization and development of the Internet network, the various tertiary institutions, group companies and enterprises have already set up their own intranet (Intranet). Intranet routers and switches the device to work properly is the basis for securing their network traffic to normal. Therefore, how to learn in the shortest possible time all network devices work are extremely Qiang Bullock. This paper presents method of using ICMP protocol technology. Monitoring is the fastest way to batches of the whole network equipment, greatly improving the efficiency of network management.

Keywords: ICMP protocol Network detection

1 引言

1.1应用背景

网络嗅探器无论是在网络安全还是在黑客攻击方面均扮演了很重要的角色。通过使用网络嗅探器可以把网卡设置于混杂模式,并可实现对网络上传输的数据包的捕获与分析。此分析结果可供网络安全分析之用,但如为黑客所利用也可以为其发动进一步的攻击提供有价值的信息。可见,嗅探器实际是一把双刃剑。虽然网络嗅探器技术被黑客利用后会对网络安全构成一定的威胁,但嗅探器本身的危害并不是很大,主要是用来为其他黑客软件提供网络情报,真正的攻击主要是由其他黑软来完成的。而在网络安全方面,网络嗅探手段可以有效地

探测在网络上传输的数据包信息,通过对这些信息的分析利用是有助于网络安全维护的。权衡利弊,有必要对网络嗅探器的实现原理进行深入的了解。

1.2设备简介

数据在网络上是以很小的称为帧(Frame)的单位传输的,帧由几部分组成,不同的部分执行不同的功能。帧通过特定的称为网络驱动程序的软件进行成型,然后通过网卡发送到网线上,通过网线到达它们的目的机器,在目的机器的一端执行相反的过程。接收端机器的以太网卡捕获到这些帧,并告诉操作系统帧已到达,然后对其进行存储。就是在这个传输和接收的过程中,存在安全方面的问题。

每一个在局域网(LAN)上的工作站都有其硬件地址,这些地址惟一地表示了网络上的机器(这一点与Internet地址系统比较相似)。当用户发送一个数据包时,这些数据包就会发送到LAN上所有可用的机器。

在一般情况下,网络上所有的机器都可以“听”到通过的流量,但对不属于自己的数据包则不予响应(换句话说,工作站A不会捕获属于工作站B的数据,而是简单地忽略这些数据)。如果某个工作站的网络接口处于混杂模式,那么它就可以捕获网络上所有的数据包和帧。其工作原理如图1所示。原理介绍:首先要创建一个套接字,然后把网卡设置为混杂模式(网卡设为混杂模式,就可以接收所有的网络数据包,无论其目的地址是否等于自已的地址,都一并接收),接着就可以接收数据包了,收到数据包后,就可以根据数据包的类型而判定它是哪种包,最后再做分析,如果没有收到数据包的话,就直接结束了。

图1

1.3攻击描述

“诱骗端口扫描”即Intemet上变化很大的源地址对于同一系列端口的扫描。在这种变化很大的源地址中,有真正的攻击者的地址,也有无辜的被冒用的地址。UDP是无连接的、不可靠的传输层协议,与面向连接的、可靠的TCP不同,被扫描主机上打开的端口对扫描探测并不回应一个确认。然而,在攻击者A向一被攻击主机B上的未打开的UDP端口发送一个数据包时,被攻击主机B会向攻击者A返回一个ICMP-PORT-UNREACH错误(type=3,code=3的ICMP报文)。于是,攻击者A就能利用此发现哪个端口是关闭的。如果许多无辜者在短时间内收到大量来自同一地址的不同端口的ICMP-PoRBIINREAcH错误包;同时,攻击者也隐秘地在短时间内收到大量来自同一地址的不同端口的ICMP-PORT-UNREACH错误包,这样便实现了“诱骗端口扫描”。对网卡处监听到的这类数据包进行分析可知,以太网帧中封装了数据报,数据报中封装了ICMP报文,ICMP报文中又封装了UDP数据报。TCP/IP协议规定,传输层的端口标识上层的服务类型,由16位(两个字节)组成,因此端口的范围是0~65 535。UDP数据包格式如图2所示。

图2

2协议内容

2.1协议简介

ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP 协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。ICMP与我们息息相关。在网络体系结构的各层次中,都需要控制,而不同的层次有不同的分工和控制内容,IP层的控制功能是最复杂的,主要负责差错控制、拥塞控制等,任何控制都是建立在信息的基础之上的,在基于IP数据报的网络体系中,网关必须自己处理数据报的传输工作,而IP协议自身没有内在机制来获取差错信息并处理。为了处理这些错误,TCP/IP设计了ICMP协议,当某个网关发现传输错误时,立即向信源主机发送ICMP报文,报告出错信息,让信源主机采取相应处理措施,它是一种差错和控制报文协议,不仅用于传输差错报文,还传输控制报文。

我们在网络中经常会使用到ICMP协议。比如我们经常使用的用于检查网络通不通的Ping命令,这个“Ping”的过程实际上就是ICMP协议工作的过程。还有其他的网络命令如跟踪路由的Tracert命令也是基于ICMP协议的。

2.2协议主要内容

ICMP消息内容主要包括:

a)目的不可达消息用来报告子网或路由器没法找到目的地。

b)超时消息用来报告分组由于TTL为0而丢弃。

c)参数问题消息表明头部字段不正确,可能是发送主机或者路由器软件有问题。

d)源抑制消息希望主机能够降低发送的速度。

e)重定向消息在路由器发现可能出现路由错误时发送。

f)回声请求和应答消息测试目的地是否可达且正常运作。

g)时间戳请求和应答与回声请求消息类似,只是要记录消息到达和发出的时间,用于测试网络性能。

相关文档
最新文档