文档库 最新最全的文档下载
当前位置:文档库 › ICMP的小木马

ICMP的小木马

ICMP的小木马
ICMP的小木马

貌似写了个ICMP的小木马,这里就贴出来大家娱乐娱乐了~~

1. 什么是ICMP协议

ICMP是“Internet Control Message Protocol”(Internet控制消息协议)的缩写。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

ICMP协议在网络上有很多用处,比如ICMP扫描,拒绝服务(DOS)攻击,隧道攻击,以及我们最常用到的PING程序。而我们就是利用ICMP协议来为我们传送(TCP/UDP)数据。大家知道一般的防火墙都是过滤了来自外部主机的回送请求(echo Request)报文,但为了是自己能够探测外部主机的当前状态,防火墙都不会过滤掉回送应答(echo Reply)数据报,而且ICMP报文可以在广域网上传送,这样我们就可以利用它来突破网关的种种限制。

2. 为什么选择ICMP协议设计木马

ICMP协议对于网络安全具有极其重要的意义。ICMP协议本身的特点决定了它非常容易被用于攻击网络上的路由器和主机。比如,可以利用操作系统规定的ICMP数据包最大尺寸不超过64KB这一规定,向主机发起“Ping of Death”(死亡之Ping)攻击。“Ping of Death”攻击的原理是:如果ICMP数据包的尺寸超过64KB上限时,主机就会出现内存分配错误,导致TCP/IP堆栈崩溃,致使主机死机。此外,向目标主机长时间、连续、大量地发送ICMP 数据包,也会最终使系统瘫痪。大量的ICMP数据包会形成“ICMP风暴”,使得目标主机耗费大量的CPU资源处理,疲于奔命。

3. ICMP协议木马设计方案

木马的设计需要两个程序,一个是作为木马服务端,一个是木马客户端,一个不权威的划分将历史上的木马分为5代,结果图如下:

传统EXE木马是最简单和常见的木马形式,不过这种木马由于广泛应用,所有各大杀毒软件都会把它kill掉,不过,后来有黑客发展出ICMP木马或反弹端口木马来逃过查杀,我这次设计的木马就是基于ICMP报文的木马,效果非常不错。

传统DLL/VxD木马是一类不会自己运行的木马,它是通过系统进程来加载的,所以一般的任务管理器是看不出来有没有莫名的EXE程序在运行的,不过这类木马一般当执行时需要开启一个系统端口,而对于1024以上的端口一般的杀毒软件是一直在监控的,所以这类木马当执行木马任务时会轻而易举的被杀毒软件发现,我也就没有采取这类木马设计。

替换挂钩式DLL木马是一类非常高级的木马,它还是DLL木马,不过这种DLL木马会将系统中的正常DLL文件改个名字,然后自己改为这个正常DLL文件的名字,当系统需要调用正常DLL文件中的接口时,这个木马DLL就会对系统DLL文件提供的函数进行挂钩,任务就交给正常的DLL执行,当接收到木马客户端传过来的任务时就执行木马任务。这种木马的出现曾经盛极一时,不过后来微软公司非常重视这个木马问题,在win2000内核之后的windows版本后系统自动以数码认证方式来查看各系统DLL文件是不是原来的文件,如果不是就从系统的备份处将原始DLL文件复制过来,而且考虑到备份可能被破坏,windows系统将会存在多份备份,在如此严格的保护下,这种木马就失去了生存的空间。

注入式DLL木马,这种技术才是木马界的神技,利用注入技术将DLL木马寄生到某个系统文件中,当该系统文件运行时木马也一并运行,如此不仅在任务管理器之类的工具中看不到任何异常,而且使用端口监测的软件也看不出任务问题,不过在WinXP SP2、WinVista

和后续的windows版本中加入了数据执行保护(DEP)的功能后,这类木马会被杀毒软件查看内存时被kill,所以后来也没有什么作为。

最新的木马永远是存在那些最优秀的程序员脑中的木马,随着程序员技能的提高,各种系统平台的开源、虚拟化、网络化,只要你肯去学习,就一定能编写出世界上独一无二的木马,杀毒软件当然也检查不到,因为系统是人写的,人写的就一定会有漏洞,没有哪个系统是没有漏洞的,如果没有漏洞,我们也不需要天天去更新系统补丁了。

客户端编写:

我编写的ICMP木马原始工作流程如下:

对于实现这个服务端我就遇到很大的困难,比如,如何从如大海般的报文中接收正确的客户端的ICMP报文,后来我想到了ICMP报文头中有个序列号可以自己设置,于是我便把这个序列号设置为5678,当服务端程序只有收到序列号为5678的ICMP报文时才移交给服务线程去执行。接下来我就需要考虑ICMP报文的网络传递路径问题了,我上网查了很多资料,这期间微软公司的MSDN网站帮助我很大,在MSDN中有这样一段对ICMP报文的描述:“什么是ICMP呢?ICMP全称是Internet Control Message Protocol(互联网控制报文协议)它是IP协议的附属协议,用来传递差错报文以及其他需要注意的消息报文,这个协议常常为TCP或UDP协议服务,但是也可以单独使用,例如著名的工具Ping,就是通过发送接收ICMP_ECHO和ICMP_ECHOREPLY报文来进行网络诊断的。实际上,ICMP木马的出现正是

得到了Ping程序的启发,由于ICMP报文是由系统内核或进程直接处理而不是通过端口,这就给木马一个摆脱端口的绝好机会,木马将自己伪装成一个Ping的进程,系统就会将ICMP_ECHOREPLY(Ping的回包)的监听、处理权交给木马进程,一旦事先约定好的

ICMP_ECHOREPLY包出现(可以判断包大小、ICMP_SEQ等特征),木马就会接受、分析并从报文中解码出命令和数据。ICMP_ECHOREPLY包还有对于防火墙和网关的穿透能力。对于防火墙来说,ICMP报文是被列为危险的一类:从Ping of Death到ICMP风暴到ICMP碎片攻击,构造ICMP报文一向是攻击主机的最好方法之一,因此一般的防火墙都会对ICMP报文进行过滤;但是ICMP_ECHOREPLY报文却往往不会在过滤策略中出现,这是因为一旦不允许ICMP_ECHOREPLY报文通过就意味着主机没有办法对外进行Ping的操作,这样对于用户是极其不友好的。如果设置正确,ICMP_ECHOREPLY报文也能穿过网关,进入局域网。”

看来前辈对ICMP报文攻击研究的已经很透彻了,不然MSDN上也不会有这样一段描述,不过即使这样,也不妨碍我设计我的木马,因为只要木马技术会随着时间更新就永远走在安全之前。

我又查了一些传统的网络连接图,我把它简单的绘制如下:

这里面有几项必须要说明,比如Winsock技术,在计算机网络课程设计中我已经学会如何使用了,所以在木马的设计中不是拦路虎了,其他的连接过程我确实还是一片空白,这个

时候图书馆就发挥了无比巨大的作用,我在图书馆里借到了微软公司出版社2000年出版的《Windows网络编程技术》这本书,刚好这本书里有Ping命令的大致实现过程,其中也谈到了ICMP的设计,我根据自己的理解绘制如下图:

然后我又从MSDN网站上学习了winsock中关于ICMP协议的相关知识,于是就设计出了一个简单的服务端模型,我又加上了sock建立的过程函数和ICMP报文构造的过程,现在我的服务端基本完成了,下面就需要设计它能执行的木马命令了。

“pslist”和“pskill”命令设计:

我首先想到必须完成的功能就是能够关闭系统中的进程,因为作为一个好的木马必须具备这样的能力,否则那还那算的上是控制了系统呢。所以我从图书馆借了同样是微软出版社2000年出版的《Windows核心编程》(貌似微软那年出版了这么一整套介绍windowsAPI的书),在学习了系统对象之后,我了解了可以通过CreateToolhelp32Snapshot()函数得到系统的进程表,然后我了解了可以用TerminateProcess()接口关闭进程,不过我在实验中一直没能执行成功,没办法只得再上MSDN去查,一查才知道要执行这个接口必须具备系统管理员的权限,而我的线程没有这个权限,无法在操作系统课上老师讲的核心态执行代码,于是我又在图书馆借了本人民邮电出版社2002年出版的《Windows系统编程》,里面有谈到可以用LookupPrivilegeValue()函数提高权限,于是我又写了个提高权限的函数,这样我的第一个功能就能够成功执行了,首先由客户端发送“pslist”命令过去,服务端返回

系统进程表,我又从那本书中知道每个进程都有一个进程的PID号,当执行结束进程函数时只需要传递这个PID号就能找到对应的进程,然后我设计服务端接收到客户端发送“pskill 进程PID”号就可以结束该进程,这样我的第一个命令就算是完成了。

Windows系统命令设计:

然后我想到的是需要实现能够执行windows系统自带的系统功能命令,比如cd、dir等命令,我以前设计过这样的程序,我知道这只需要创建一个匿名管道用于取得cmd的命令输出就可以了,这个实现可以使用CreatePipe()函数,然后为每一条命令创建一个执行进程就可以了,由于是执行系统自带的程序,所以杀毒软件不会认为是木马,可以放心大胆的执行,使用CreateProcess()函数创建进程就可以了。

下载功能设计:

本来功能设计到此为止了的,不过当我和另一个同学沟通时他问我设计了下载功能没,他说看到的网上黑客都是先搞个木马到目标电脑中,然后通过这个木马下载很多病毒文件到目标电脑中去执行,我想也是啊,于是我就又想设计一个下载功能,即从客户端电脑中下载程序到服务端所在电脑中,然后可以直接调用系统cmd.exe程序执行这个下载的程序,下载是基于http协议的,关于这个协议使用的是最多的,但对于编程实现方面我了解的确实不多,我查了书后也只发现有URLDownloadToFile()这么个从目标URL下载文件的接口,于是我就先写在了程序里,虽然在实验中有时能下载成功有时却下载失败,但我不知道问题在哪,想来这http协议的水很深,不是我一时半会能搞明白的,于是我也就只写了个模型在服务端里,是否能成功下载还是个未知数,这个功能就留作加强提高吧。

客户端设计:

当完成服务端设计后才发现原来客户端比起服务端来简单的多了,最重要的就是设计能把输入的字符串发送到服务端去,这里就需要知道对方机器的IP地址,我试过很多办法也没办法把对方的IP地址正确的发送过来,虽然能够在服务端程序中加入代码得到对方的IP

地址发送到客户端,不过在客户端解析时总会出错,后来我才在MSDN中的网络教程中发现我遇到的可能是IP地址发送的大端小端问题,即发送出去的IP地址按小端编码,接收方得到的IP地址是反序的二进制代码,所以自然会出错,我本来想重新写这个功能的,不过由于时间的关系就没添加这个过程了,因为我觉得这个和实现木马的功能没有太大的关系,于是我就假设已经得到了服务端主机的IP地址,在做测试时在客户端我会直接输入服务端的IP地址就行了,毕竟只是一个测试程序嘛,总不能做的真的在网上传开了。然后我又添加了一些帮助程序的代码,显示如何使用这个木马程序。一个客户端模型就完成了。至此我的木马设计也基本告一段落了。

测试结果:

我的测试环境是客户端机器使用WinXP SP3系统,把系统防火墙关闭,并将其他的防火墙禁掉的ICMP报文功能打开:

然后使用Vmware虚拟机软件装载了一个win7系统,关闭掉了win7系统的防火墙,将服务端程序拷贝到win7系统中,在cmd窗口中执行该程序,我设计的服务端不会自动运行,需要手动安装,在安装过程中会出现我编写的调试代码,我开启的系统服务会随着系统的启动而一起启动,而且服务端程序也会当作系统程序开机加载,在任务管理器中可以查看到。这些都是为了方便调试,隐藏进程就当作提高吧。

把icmpsrv.exe程序拷贝到win7系统下执行如下:

可以在win7的系统服务中看到我创建的服务:

在任务管理器中也可以查看到创建的系统程序:

任务管理器中的系统服务项也能查看到该服务:

在客户端执行客户端程序如下:

pslist命令测试:

与win7中任务管理器显示的系统进程一模一样:

pskill命令测试:

win7中开启了QQ程序如图:

在上述进程表中找到QQ进程和它对应的PID号,客户端输入“pskill 3756”:

Win7系统中QQ立刻被结束掉了:

显示如下信息,当发送的ICMP报文头中序列号不是5678时会提示“Other ICMP Packets!”:

执行系统自带程序功能,这里拿ipconfig举例:

至此,这个木马的设计就算告一段落了,我在后面附上我写的源码。有不轨理由的童鞋可以参考参考,出现任何后果我概不负责哦~~还有,一般来说你编译我写的代码时杀毒软件是会报毒的,如果不报的话,我还是劝你赶快把杀毒软件换了吧~~

如何防止ICMP协议木马

虽然ICMP木马可以实现很大的木马功能,不过要避免它也很简单,只需要配置防火墙屏蔽一切ICMP报文就可以了,这也是ICMP木马的局限性。

如何提高木马的能力

那是否因为防止ICMP木马很简单,这个木马就完全没有用武之地呢?当然不是了,我想过了,这个木马还有很强的扩展性,比如可以对ICMP报文进行加密,让防火墙无法过滤,还可以让服务端关闭防火墙,或者设置信任程序等等手段绕开防火墙。还有我上面提到过的获取服务端机器IP地址的功能,也可以设计为让服务端程序主动想客户端要命令,这样就更加强大和主动,而且这些实现也不是那么困难的事,如果你有兴趣,可以和我探讨一下,我们共同想着木马的终极奥义迈进哦~~

IP协议和ICMP协议

这是主机B发出的ip数据报 这是E接受到的IP数据报 观察:TTL 128 TTL127 结论: 变化的字段有:“生存时间”和“首部校验和”。原因:主机B为路由器,数据包每经过一路由器“生存时间”字段的值就会减1,并重新计算校验和。

现象:主机E捕获不到 经过路由器“生存时间”字段的值就会减1,当“生存时间”字段的值减至为0时,路由器将该报文丢弃不进行转发。 设置好,并在过滤器面板启用 PC-C、PC-D、Router-A Router-A 直接广播地址包含一个有效的网络号和一个全“1”的主机号,一个直接广播的单一拷贝被发送到一个指定网段的网络,它被广播到该网络中的所有终端. 路由器会阻断不同分组中直接广播(路由器没有开启定向广播功能)

PC-C、PC-D、Router-A PC-E,PC-F 受限的广播地址为255.255.255.255.可以用在计算机不知道自己IP地址的时候,比如向DHCP服务器索要地址时、PPPOE拨号时等。在任何情况下,路由器都不转发目的地址为受限地址的数据报。这样的数据报仅出现在本地的网络中。 127.0.0.1称为环回地址,常用于本机上软件测试和本机上网络应用程序之间的通信地址,分组永远不离开这个机器。

此次传输的ip数据报共分为两片,第一个数据报片的信息如下 第二个数据报片如下 分片数情况记录表 0xd 0xd 0x1 0x0 0x0 0x5c8

1500 1040 不同的分片拥有相同的ID标识字段的可以重新还原为原来的数据报 MF=1,表示后面还有分片 片偏移:0x0表示该分片是整个包的起始位置,0x5c8是第二个分片的起始位置原始数据报的首部被复制到个数据报片的首部,会相应更改有关字段的值 是 否 分析:主机B:172.16.1.2 主机C:172.16.1.3 主机D:172.16.1.100 主机B的子网掩码255.255.255.0 网络号为172.16.1 主机C与D子网掩码255.255.255.224 即255.255.255.11100000 那么C的网络号为172.16.1 那么D的网络号为172.16.1.96 过程: (1 )当主机B ping 主机C,B 一开始是不知道C的掩码(C的掩码对B来说是透明的),B就拿自己的掩码255.255.255.0去与C的IP,得到的网络号为172.16.1,主观认为C和自己是同一个网段,那么B直接发送ARP请求,ARP请求的目的IP是172.16.1.3,C接受到ARP请求,查看了用自己的掩码与了一下源IP,也就是B的IP,得到的网络号是172.16.1,和自己同处一个网段,就接受了这个arp请求,向主机B返回自己的Mac地址。那么B,C就可以互通了 (2 )当主机B ping 主机D,B 一开始是不知道D的掩码(D的掩码对B来说是透明的),B想当然的认为D和自己同处一个网段,直接发送arp广播,arp广播的目的ip是D,D接受到arp请求,将自己的掩码与了一下来源ip和自己的ip 发现,不对劲!网段不一致,就拒收,arp解析失败。那么B与D就不可以互通 ※拓展一下:

ICMP和IP协议分析

江西师范大学计算机信息工程学院 网络工程系 计算机网络实验报告 实验名称:IP和ICMP协议分析 一、实验目的 1.通过使用协议分析软件掌握ICMP(因特网控制报文协议)的工作过程; 2.用抓包软件wireshark抓取ICMP的包,对ICMO协议进行分析。 二、实验原理

使用ping命令来做ip实验。使用ping命令(Ping命令使用的ICMP协议中的回送请求和回送响应,所以可以使用协议分析软件通过使用ping命令来抓包,分析ICMP协议的工作过程),一台pc机ping另外一台pc机,过滤出ICMP的包,对其进行协议分析。 IP协议试验 三,试验步骤 1. ping –a [IP] 解析计算机的域名。 2.ping –n 指令可以指定返回数据包的个数比如ping –n 6 ,就表示通过ICMP返回的 数据包就有6个。

3. ping –l指令是表示每个ping的数据包中所能传输的数据数,后面接数字。 ICMP协议分析 三、实验步骤 四、打开抓包软件wireshark,过滤ICMP的包,之后点击start 五、用主机(192.168.1.2)去ping虚拟机(192.168.1.1)

3.打开wireshark过滤完了ICMP的报文包,如图,是我们抓到过滤完的ICMP 数据报。 第一帧:

这一帧类型为8是一个请求报文,数据位32个字节,校验和正确第二帧:

这是个类型为0是一个响应报文,响应时间为3.496ms ,数据位32个字节,校验和正确 四,实验总结 ICMP协议是一种面向连接的协议,用于传输出错报告控制信息。它是一个非常重要的协议,它对于网络安全具有极其重要的意义。[1] 它是TCP/IP协议族的一个子协议,属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。

icmp协议功能是什么

icmp协议功能是什么 ICMP协议ICMP(Internet Control Message Protocol)是介于网络层和传输层的协议。它的主要功能是传输网络诊断信息。 ICMP传输的信息可以分为两类,一类是错误信息,这一类信息可用来诊断网络故障。我们已经知道,IP协议的工作方式是best effort。如果IP包没有被传输到目的地,或者IP 包发生错误,IP协议本身不会做进一步的努力。但是上游发送IP包的主机和接力的路由器并不知道下游发生了错误和故障,它们可能继续发送IP包。通过ICMP包,下游的的路由器和主机可以将错误信息汇报给上游,从而让上游的路由器和主机进行调整,需要主要的是,ICMP只提供特定类型的错误汇报,它不能帮助IP协议成为可靠(reliable)的协议。另一类信息是咨询性质的,比如某台计算机询问路径上的每个路由器都是谁,然后各个路由器同样用ICMP包回答。 备注:ICMP基于IP协议,也就是说,一个ICMP包需要封装在IP包中,然后在互联网传送.ICMP是IP套装的必须部分,也就是说,任何一个支持IP协议的计算机,都要实现ICMP. ICMP包的结构: 有点复杂,但是那是注释,内容不复杂,下面看我给大家一一道来: ICMP包都会有Type,Code,Checksum三部分.Type标识ICMP包的大的类型,而Code 是一个Type之内细分小类型。针对不同的错误信息或者资讯信息,会有不同的Type和Code.从上面我们可以看出,ICMP支持的类型非常多,由多种多样的功能.Checksum 与IP 协议的header Checksum相类似,但与IP协议中checksum只校验头部不同,这里的Checksum所校验的是整个ICMP包(包括头部和数据) 余下的ICMP包格式根据不同的类型不同。另一方面,ICMP包通常是由某个IP包触发的。这个触发IP包的头部和一部分数据会被包含在ICMP包的数据部分。 ICMP协议是实现ping命令和traceroute命令的基础。这两个工具常用于网络排错。

ICMP协议分析

ICMP协议分析 1 ICMP协议协议概述 IP协议是一种不可靠的协议,无法进行差错控制。但IP协议可以借助其他协议来实现这一功能,如ICMP。 ICMP(Internet Control Messages Protocol, 网间控制报文协议)允许主机或路由器报告差错情况和提供有关异常情况的报告。 一般来说,ICMP报文提供针对网络层的错误诊断、拥塞控制、路径控制和查询服务四项大的功能。如,当一个分组无法到达目的站点或TTL超时后,路由器就会丢弃此分组,并向源站点返回一个目的站点不可到达的ICMP报文。 2 ICMP报文类型 2.1 ICMP报文类型 ICMP报文大体可以分为两种类型,即ICMP差错报文和ICMP询问报文。但细分又可分为很多类型,如表1所示。

表1 ICMP报文类型

2.2 ICMP回射请求和应答报文头部格式 ICMP报文被封装在IP数据报内部传输。如图1所示,是ICMP回射请求和应答报文头部格式。 图1 ICMP回射请求和应答报文头部格式 各种ICMP报文的前32bits都一样,它们是: 8bits类型和8bits代码字段:一起决定了ICMP报文的类型。常见的有: 类型8、代码0:回射请求。 类型0、代码0:回射应答。 类型11、代码0:超时。 16bits校验和字段:包括数据在内的整个ICMP数据包的校验和,其计算方法和IP头部校验和的计算方法是一样的。 对于ICMP回射请求和应答报文来说,接下来是16bits标识符字段:用于标识本ICMP进程。 最后是16bits序列号字段:用于判断回射应答数据报。 2.3 ICMP目标不可达报文 如图2所示,是ICMP目标不可达报文头部格式。 图2 ICMP目标不可达报文头部格式 其中代码字段的不同值又代表不同的含义,如0代表网络不可达、1代表主机不可达等,见表1。

ICMP协议原理分析

实验三ICMP协议原理分析 一、ICMP协议简介 ICMP全称Internet Control Message Protocol,中文名为因特网控制报文协议。它工作在OSI的网络层,向数据通讯中的源主机报告错误。ICMP可以实现故障隔离和故障恢复。 网络本身是不可靠的,在网络传输过程中,可能会发生许多突发事件并导致数据传输失败。网络层的IP 协议是一个无连接的协议,它不会处理网络层传输中的故障,而位于网络层的ICMP协议却恰好弥补了IP 的缺限,它使用IP协议进行信息传递,向数据包中的源端节点提供发生在网络层的错误信息反馈。 ICMP的报头长8字节,结构如图1所示。 比特0 7 8 15 16 比特31 (图1 ICMP报头结构) ●类型:标识生成的错误报文,它是ICMP报文中的第一个字段; ●代码:进一步地限定生成ICMP报文。该字段用来查找产生错误的原因; ●校验和:存储了ICMP所使用的校验和值。 ●未使用:保留字段,供将来使用,起值设为0 ●数据:包含了所有接受到的数据报的IP报头。还包含IP数据报中前8个字节的数据; ICMP协议提供的诊断报文类型如表1所示。 (表1 ICMP诊断报文类型) ICMP提供多种类型的消息为源端节点提供网络层的故障信息反馈,它的报文类型可以归纳为以下5个大类:

●诊断报文(类型8,代码0;类型0,代码0); ●目的不可达报文(类型3,代码0-15); ●重定向报文(类型5,代码0-4); ●超时报文(类型11,代码0-1); ●信息报文(类型12-18)。 二、详细解码 使用科来网络分析系统捕获数据包,我们得到ICMP回显报文的信息,如图1所示, (图1 科来网络分析系统抓取的ICMP回显报文) 我们详细介绍在图1中的解码信息, ●类型:8,表示是一个ICMP回显请求报文; ●代码:0,表示网络不可达; ●校验和:表示ICMP的0x425C;使用IP校验和的算法。 ●标识:0x0400 ●序列号:0x0700,每一个ICMP回显报文都有一个序列号且是递增的 ●数据:表示是一个32字节的数据 注:以上是一个ICMP回送报文,可以看出了和前面列出的ICMP报文有点不一样。因为ICMP有几种类型的报文(目标不可达报文,重定向报文,超时报文,回送请求和回送应答报文),每一种报文都相对都有一些区别。

实验:利用Wireshark分析ICMP协议

实验利用Wireshark分析ICMP协议 一、实验目的 分析ICMP协议 二、实验环境 与因特网连接的计算机,操作系统为Windows,安装有Wireshark、IE等软件。 三、协议简介 ICMP全称Internet Control Message Protocol,中文名为因特网控制报文协议。它工作在OSI的网络层,向数据通讯中的源主机报告错误。ICMP可以实现故障隔离和故障恢复。 网络本身是不可靠的,在网络传输过程中,可能会发生许多突发事件并导致数据传输失败。网络层的IP协议是一个无连接的协议,它不会处理网络层传输中的故障,而位于网络层的ICMP协议却恰好弥补了IP的缺限,它使用IP协议进行信息传递,向数据包中的源端节点提供发生在网络层的错误信息反馈。 ICMP的报头长8字节,结构如图1所示。 比特0 7 8 15 16 比特31 (图1 ICMP报头结构) ●类型:标识生成的错误报文,它是ICMP报文中的第一个字段; ●代码:进一步地限定生成ICMP报文。该字段用来查找产生错误的原因; ●校验和:存储了ICMP所使用的校验和值。 ●未使用:保留字段,供将来使用,起值设为0 ●数据:包含了所有接受到的数据报的IP报头。还包含IP数据报中前8个字节的数据; ICMP协议提供的诊断报文类型如表1所示。

(表1 ICMP诊断报文类型) ICMP提供多种类型的消息为源端节点提供网络层的故障信息反馈,它的报文类型可以归纳为以下5个大类: ●诊断报文(类型8,代码0;类型0,代码0); ●目的不可达报文(类型3,代码0-15); ●重定向报文(类型5,代码0-4); ●超时报文(类型11,代码0-1); ●信息报文(类型12-18)。 Ping 命令只有在安装了TCP/IP 协议之后才可以使用,其命令格式如下: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS] [-r count] [-s count] [[-j host-list] | [-k host-list]] [-w timeout] target_name 这里对实验中可能用到的参数解释如下: -t :用户所在主机不断向目标主机发送回送请求报文,直到用户中断; -n count:指定要Ping 多少次,具体次数由后面的count 来指定,缺省值为4; -l size:指定发送到目标主机的数据包的大小,默认为32 字节,最大值是65,527; -w timeout:指定超时间隔,单位为毫秒; target_name:指定要ping 的远程计算机。 Ping和traceroute命令都依赖于ICMP。ICMP可以看作是IP协议的伴随协议。ICMP 报文被封装在IP 数据报发送。 一些ICMP报文会请求信息。例如:在ping中,一个ICMP回应请求报文被发送给远程主机。如果对方主机存在,期望它们返回一个ICMP回应应答报文。 一些ICMP报文在网络层发生错误时发送。例如,有一种ICMP报文类型表示目的不可达。造成不可达的原因很多,ICMP报文试图确定这一问题。例如,可能是主机关及或整个网络连接断开。

利用Wireshark分析ICMP协议

计算机网络实验报告 年级:姓名:学号: 实验日期:2012年10月9号 实验名称:利用wireshark分析ICMP协议 一、实验目的 分析ICMP协议 二、实验环境 与因特网连接的计算机,操作系统为Windows,安装有Wireshark、IE等软件。 三、协议简介 ICMP全称Internet Control Message Protocol,中文名为因特网控制报文协议。它工作在OSI 的网络层,向数据通讯中的源主机报告错误。ICMP可以实现故障隔离和故障恢复。网络本身是不可靠的,在网络传输过程中,可能会发生许多突发事件并导致数据传输失败。网络层的IP协议是一个无连接的协议,它不会处理网络层传输中的故障,而位于网络层的ICMP协议却恰好弥补了IP的缺限,它使用IP协议进行信息传递,向数据包中的源端节点提供发生在网络层的错误信息反馈。 ICMP的报头长8字节,结构如图1所示。 比特0 7 8 15 16 比特31 (图1 ICMP报头结构) ●类型:标识生成的错误报文,它是ICMP报文中的第一个字段; ●代码:进一步地限定生成ICMP报文。该字段用来查找产生错误的原因; ●校验和:存储了ICMP所使用的校验和值。 ●未使用:保留字段,供将来使用,起值设为0 ●数据:包含了所有接受到的数据报的IP报头。还包含IP数据报中前8个字节的数据; ICMP协议提供的诊断报文类型如表1所示。

(表1 ICMP诊断报文类型) ICMP提供多种类型的消息为源端节点提供网络层的故障信息反馈,它的报文类型可以归纳为以下5个大类: ●诊断报文(类型8,代码0;类型0,代码0); ●目的不可达报文(类型3,代码0-15); ●重定向报文(类型5,代码0-4); ●超时报文(类型11,代码0-1); ●信息报文(类型12-18)。 Ping 命令只有在安装了TCP/IP 协议之后才可以使用,其命令格式如下: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS] [-r count] [-s count] [[-j host-list] | [-k host-list]] [-w timeout] target_name 这里对实验中可能用到的参数解释如下: -t :用户所在主机不断向目标主机发送回送请求报文,直到用户中断; -n count:指定要Ping 多少次,具体次数由后面的count 来指定,缺省值为4; -l size:指定发送到目标主机的数据包的大小,默认为32 字节,最大值是65,527; -w timeout:指定超时间隔,单位为毫秒; target_name:指定要ping 的远程计算机。 Ping和traceroute命令都依赖于ICMP。ICMP可以看作是IP协议的伴随协议。ICMP报文被封装在IP 数据报发送。 一些ICMP报文会请求信息。例如:在ping中,一个ICMP回应请求报文被发送给远程主机。如果对方主机存在,期望它们返回一个ICMP回应应答报文。 一些ICMP报文在网络层发生错误时发送。例如,有一种ICMP报文类型表示目的不可达。造

ICMP协议ping

ICMP协议,ping和Traceroute 1.IMCP协议介绍前面讲到了,IP协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完成。其中一个重要的模块就是ICMP(网络控制报文)协议。 当传送IP数据包发生错误——比如主机不可达,路由不可达等等,ICMP协议将会把错误信息封包,然后传送回给主机。给主机一个处理错误的机会,这也就是为什么说建立在IP层以上的协议是可能做到安全的原因。ICMP数据包由8bit的错误类型和8bit的代码和16bit的校验和组成。而前 16bit就组成了ICMP所要传递的信息。书上的图6-3清楚的给出了错误类型和代码的组合代表的意思。 尽管在大多数情况下,错误的包传送应该给出ICMP报文,但是在特殊情况下,是不产生ICMP 错误报文的。如下ICMP差错报文不会产生ICMP差错报文(出IMCP查询报文)(防止IMCP的无限产生和传送) 目的地址是广播地址或多播地址的IP数据报。 作为链路层广播的数据报。 不是IP分片的第一片。 源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地址或多播地址。 虽然里面的一些规定现在还不是很明白,但是所有的这一切规定,都是为了防止产生ICMP报文的无限传播而定义的。 ICMP协议大致分为两类,一种是查询报文,一种是差错报文。其中查询报文有以下几种用途:ping查询(不要告诉我你不知道ping程序) 子网掩码查询(用于无盘工作站在初始化自身的时候初始化子网掩码) 时间戳查询(可以用来同步时间) 而差错报文则产生在数据传送发生错误的时候。就不赘述了。 2.ICMP的应用——ping ping可以说是ICMP的最著名的应用,当我们某一个网站上不去的时候。通常会ping一下这个网站。ping会回显出一些有用的信息。一般的信息如下:Reply from 10.4.24.1:bytes=32 time<1ms TTL=255 Ping statistics for 10.4.24.1:Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),Approximate round trip times in milli-seconds:Minimum = 0ms, Maximum = 0ms, Average = 0ms ping这个单词源自声纳定位,而这个程序的作用也确实如此,它利用ICMP协议包来侦测另一

ICMP协议报文分析

南京理工大学泰州科技学院实验报告书 课程名称:《TCP/IP与网络互联》 实验题目:实验四 ICMP协议报文分析 班级:09计算机(2) 学号:09090302 姓名: 指导教师:王巍 成绩: 批阅教师: 2012年月日

一、实验目的和要求 1.学会使用Ping的重要参数。 2.理解不同类型ICMP报文的具体意义。 3.通过使用协议分析软件掌握ICMP协议的工作过程。 二、实验原理 类型代码校验和 首部其他部分 数据 图1 ICMP报文格式 (1)IP协议是一种不可靠无连接的包传输,当数据包经过多个网络传输后,可能出现错误、目的主机不响应、包拥塞和包丢失等。为了处理这些问题,在IP层引入了一个子协议ICMP(Internet Control Message Protocol)。 (2)ICMP数据报有两种形式:差错数据报和查询数据报。ICMP数据报封装在IP数据报里传输。 ICMP 报文可以被IP协议层、传输层协议(TCP或UDP)和用户进程使用。ICMP与IP一样,都是不可靠传输,ICMP的信息也可能丢失。 (3)为了防止ICMP信息无限制的连续发送,对ICMP数据报传输中问题不能再使用ICMP传输。查询报文是成对出现的,它帮助主机或网络管理员从一个路由器或另一个主机得到特定的信息。 (4)ICMP主要用于在主机与路由器之间传递控制信息。Ping命令使用的ICMP协议中的回送请求和回送响应,所以可以使用协议分析软件通过使用ping命令来抓包,分析IP协议和ICMP协议的工作过程。 三、实验内容和步骤 (1)实验拓扑图 图2 实验拓扑图 (2)按实验拓扑图把各个实验设备连起来并把路由器和交换机配置好。然后用wireshark软件开始抓包。

实验3ICMP协议实践ping解析

计算机网络实验上机指导书 专业 班级 学号 姓名 沈阳工程学院信息工程系

实验2ICMP协议实践--ping解析 一.实验目的 掌握ICMP原理,利用其实现网络主机状态测试。 二.实验内容 利用ICMP协议原理编程实现PING命令,测试目标主机是否可到达。并了解Ping实现原理。三.实验前的准备 ●了解ICMP原理及相关概念。 ●掌握相关软件编程知识。 四.实验要求及实验软硬件环境 【基本要求】 ●设计程序完成PING命令。 ●完成此项实验,完成实验报告。 【实验组织方式】 ●个人实验 【实验条件】 ●局域网环境下微机两台,编程软件。 五.实验步骤 .了解ICMP原理以及网络编程 (1)源程序:Windows // // Ping.h // #pragma pack(1) #define ICMP_ECHOREPLY 0 #define ICMP_ECHOREQ 8 // IP Header -- RFC 791 typedef struct tagIPHDR { u_char VIHL; // Version and IHL u_char TOS; // Type Of Service short TotLen; // Total Length short ID; // Identification short FlagOff; // Flags and Fragment Offset u_char TTL; // Time To Live u_char Protocol; // Protocol u_short Checksum; // Checksum struct in_addr iaSrc; // Internet Address - Source struct in_addr iaDst; // Internet Address - Destination }IPHDR, *PIPHDR;

ICMP协议实例分析

发现:在承载ICMP的IP的报文中的协议字段的值是0x01 作为ping命令的原理,自己通过ping同一宿舍的电脑但是失败的报文的场景: ICMP询问报文中的回送请求或回答报文中的回送报文: 直接分析ICMP报文部分: 首部8字节:3C~3J, 1个字节,0x08:表示这个ICMP的回送请求报文

:不知道什么意思 ICMP报文的检验和 identifier BE和Identifier LE,依然不知道是什么意思 这个也要分开说明,分别是:sequence number BE 和sequence number LE依然不知道什么意思,不过应该和这是第几个ping包有关 下面的从3K~5J共32B的数据:却是: Abcdefghijklmnopqrstuvwabcdefghi 经自己查看发送的request和reply基本上都是这个ascii码序列,但是也有的不是这个序列 ICMP的询问报文中的回送请求或回答中的回答报文: 直接看ICMP报文部分: 3C~3J

0x00,表示这个是ICMP回送请求或回答报文中的回答报文 ,不知道什么意思 ICMP报文的检验和 identifier BE和Identifier LE,依然不知道是什么意思 sequence number BE 和sequence number LE依然不知道什么意思,不过应该和这是第几个ping包有关,用于标识这是回送的第几个请求包 下面的3K~5J的数据共32B,依然是:序列!abcdefg··· ICMP的差错报告报文中的终点不可达报文, 自己意外的捕获到了这种报文: 直接分析ICMP的报文, 0x03,标识这个是终点不可达报文

ICMP协议详解

ICMP协议详解 一. 什么是ICMP协议 ICMP全称Internet Control Message Protocol(网际控制信息协议) 提起ICMP,一些人可能会感到陌生,实际上,ICMP与我们息息相关。在网络体系结构的各层次中,都需要控制,而不同的层次有不同的分工和控制内容,IP层的控制功能是最复杂的,主要负责差错控制、拥塞控制等,任何控制都是建立在信息的基础之上的,在基于IP数据报的网络体系中,网关必须自己处理数据报的传输工作,而IP协议自身没有内在机制来获取差错信息并处理。为了处理这些错误,TCP/IP设计了ICMP协议,当某个网关发现传输错误时,立即向信源主机发送ICMP报文,报告出错信息,让信源主机采取相应处理措施,它是一种差错和控制报文协议,不仅用于传输差错报文,还传输控制报文。 二.ICMP报文格式 IC M P所有报文的前4个字节都是一样的,但是剩下的其他字节则互不相同。。 类型字段可以有1 5个不同的值,以描述特定类型的I C M P报文。某些I C M P报文还使用代码字段的值来进一步描述不同的条件。 表示ICMP头部的数据结构 typedef struct icmp_hdr { unsigned char icmp_type; //消息类型 unsigned char icmp_code; //代码 unsigned short icmp_checksum; //校验和 unsigned short icmp_id; //ID号 unsigned short icmp_sequence; //序列号 unsigned long icmp_timestamp; //时间戳 } ICMP_HDR,*PICMP_HDR; 三ICMP报文的类型

icmp,,tcp,udp,eigrp,ospf的协议号

竭诚为您提供优质文档/双击可除icmp,,tcp,udp,eigrp,ospf的协议号 篇一:路由器协议ospf,eigrp 云南工商学院信息工程学院eigRp与ospF重发布 实训项目实训报告表 篇二:icmp协议 icmp协议 背景知识: 在以太网中,数据帧大小最大为1518字节,最小为64字节(由以太网 csma/cd决定)以太网中数据帧的封装格式: 662 —4ip数据报格式: 其中,较常用“协议”的取值有: icmp数据包格式 icmp协议基于ip协议,icmp数据包封装在ip数据包内。icmp封装格式: 20字节 icmp数据包的结构:

icmp头部长度为8bytes。 icmp查询报文 icmp两种报文形式icmp差错报文 检测连通性icmp报文作用 提示错误信息 常见icmp类型、代码值及应用场景: 下面是几种常见的icmp报文:1).响应请求 我们日常使用最多的ping,就是响应请求(type=8)和应答(type=0),一台主机向一个节点发送一个type=8的icmp 报文,如果途中没有异常(例如被路由器丢弃、目标不回应icmp或传输失败),则目标返回type=0的icmp报文,说明这台主机存在,更详细的tracert通过计算icmp报文通过的节点来确定主机与目标之间的网络距离。ping程序的参数如下:c:\users\qich>ping 用 法:ping[-t][-a][-ncount][-lsize][-f][-ittl][-rcount ][-scount][-R][-ssrcaddr]target_name选项: -tping指定的主机,直到停止。 若要查看统计信息并继续操作-请键入control-break;若要停止-请键入control-c。 -a将地址解析成主机名。-ncount要发送的回显请求数。-lsize发送缓冲区大小。

ICMP协议

ICMP协议 背景知识: ●在以太网中,数据帧大小最大为1518字节,最小为64字节(由以太网 CSMA/CD决定) 以太网中数据帧的封装格式: 6 6 2 — 4 ●IP数据报格式: 其中,较常用“协议”的取值有: ICMP数据包格式 ICMP协议基于IP协议,ICMP数据包封装在IP数据包内。 ICMP封装格式:

20字节 ICMP数据包的结构: ICMP头部长度为8bytes。 ICMP查询报文ICMP两种报文形式 ICMP差错报文 检测连通性 ICMP报文作用 提示错误信息 常见ICMP类型、代码值及应用场景:

下面是几种常见的ICMP报文: 1).响应请求 我们日常使用最多的ping,就是响应请求(Type=8)和应答(Type=0),一台主机向一个节点发送一个Type=8的ICMP报文,如果途中没有异常(例如被路由器丢弃、目标不回应ICMP或传输失败),则目标返回Type=0的ICMP报文,说明这台主机存在,更详细的tracert通过计算ICMP报文通过的节点来确定主机与目标之间的网络距离。 Ping程序的参数如下: C:\Users\qich>ping 用法: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-r count] [-s count] [-R] [-S srcaddr] target_name 选项: -t Ping 指定的主机,直到停止。 若要查看统计信息并继续操作- 请键入Control-Break; 若要停止- 请键入Control-C。

-a 将地址解析成主机名。 -n count 要发送的回显请求数。 -l size 发送缓冲区大小。 -f 在数据包中设置“不分段”标志(仅适用于 IPv4)。 -i TTL 生存时间。 -r count 记录计数跃点的路由(仅适用于 IPv4)。 -s count 计数跃点的时间戳(仅适用于 IPv4)。 -S srcaddr 要使用的源地址。 使用Ping 程序时,如果指定了参数-f (不分片),则参数-l 后,可以指定的最大发送缓冲区大小为1472。 1500(IP MTU)-20(IP 头部大小)-8(ICMP 头部大小)=1472 2) 需要进行分片但设置了DF 标记位 在封装UDP 的IP 数据包中,一般支持分片。 以太网中IP 数据包的MTU 为1500,这与初期设备的接收缓存小有关。当发送数据包的大小大于MTU 时,需要对该数据包进行分片。 发生ICMP 不可达差错的另一种情况是,当路由器收到一份需要分片的数据报,而在IP 首部又设置了不分片(DF )的标志比特。如果某个程序需要判断到达目的端的路途中最小MTU 是多少—称作路径MTU 发现机制(PMTUD ),那么这个差错就可以被该程序使用。 这种情况下的ICMP 不可达差错报文格式如下图所示。在第2个32bit 字中,16~31bit 可以提供下一跳的MTU 。 ICMP 报文中的IP 首部和原始IP 数据报中数据的前8字节,也成为伪首部 类型(3) 代码(4) 检验和 8 字节 下一跳网络的MTU 未用(必须为0) IP 首部(包括选项)+原始IP 数据报中数据的前8字节 (

ICMP协议分析报告

实验名称:利用Wireshark软件进行ICMP抓包实验 实验目的:1.掌握Wireshark的基本使用方法。 2.通过对Wireshark抓取的ICMP协议数据包分析,掌握ICMP的帧格式及运行原 理。 3.熟悉IP首部各字段的含义及以太网封装格式。 实验环境:1.硬件环境 a)网卡信息 Description:Realtek RTL8139 Family Fast Ethernet Adapter @ Link speed:100MBits/s Media supported:(Ethernet) Media in use: (Ethernet) Maximum Packet Size 1514 其它详细信息见附图1. b)网络组成 实验电脑通过ADSL MODEM 接入互联网中联通ADSL服务器,ADSL MODEM 和ADSL服务器间通过PPP over Ethernet(PPPoE)协议转播以太网络中PPP 帧信息。电脑通过ADSL方式上网是通过以太网卡(Ethernet)与互联网相连 的。使用的还是普通的TCP/IP方式,并没有付加新的协议,对我们的抓包实 验是透明的。 2. 软件环境 a)¥ b)操作系统 Microsoft Windows XP Professional 版本2002 Service Pack 3 c)Wireshark 软件 通过系统命令systeminfo查看处理器类型为X86-based PC,为32位机,因此选 择32位的Wireshark软件(Version:Version 1.2.3 for win32)。 实验的主要步骤和内容: 1.理论基础 本实验的主要目的是通过软件进一步掌握ICMP协议,因此选用PING 命令来 产生ICMP包,通过对这些数据包的分析,达成实验目的。所以该部分必须 包括ICMP报文格式,PING命令运行机制等说明。 a)( b)ICMP简述 ICMP(Internet Control Message Protocal)在网络中的主要作用是主机探 测、路由维护、路由选择、流量控制。运行于OSI的第三层,是IP协议 的一个附属协议。其报文封装在IP数据报内部。如下图。

相关文档