icmp协议范文

时间:2023-11-11 23:41:09

icmp协议

icmp协议篇1

要知道这其中的奥秘,我们有必要来看看ping命令的工作过程到底是怎么样的。

假定主机a的ip地址是192.168.1.1,主机b的ip地址是192.168.1.2,都在同一子网内,则当你在主机a上运行“ping 192.168.1.2”后,都发生了些什么呢?

首先,ping命令会构建一个固定格式的icmp请求数据包,然后由icmp协议将这个数据包连同地址“192.168.1.2”一起交给ip层协议(和icmp一样,实际上是一组后台运行的进程),ip层协议将以地址“192.168.1.2”作为目的地址,本机ip地址作为源地址,加上一些其他的控制信息,构建一个ip数据包,并在一个映射表中查找出ip地址192.168.1.2所对应的物理地址(也叫mac地址,熟悉网卡配置的朋友不会陌生,这是数据链路层协议构建数据链路层的传输单元??帧所必需的),一并交给数据链路层。后者构建一个数据帧,目的地址是ip层传过来的物理地址,源地址则是本机的物理地址,还要附加上一些控制信息,依据以太网的介质访问规则,将它们传送出去。

主机b收到这个数据帧后,先检查它的目的地址,并和本机的物理地址对比,如符合,则接收;否则丢弃。接收后检查该数据帧,将ip数据包从帧中提取出来,交给本机的ip层协议。同样,ip层检查后,将有用的信息提取后交给icmp协议,后者处理后,马上构建一个icmp应答包,发送给主机a,其过程和主机a发送icmp请求包到主机b一模一样。

从ping的工作过程,我们可以知道,主机a收到了主机b的一个应答包,说明两台主机之间的去、回通路均正常。也就是说,无论从主机a到主机b,还是从主机b到主机a,都是正常的。那么,是什么原因引起只能单方向ping通的呢?

一、安装了个人防火墙

在共享上网的机器中,出于安全考虑,大部分作为服务器的主机都安装了个人防火墙软件,而其他作为客户机的机器则一般不安装。几乎所有的个人防火墙软件,默认情况下是不允许其他机器ping本机的。一般的做法是将来自外部的icmp请求报文滤掉,但它却对本机出去的icmp请求报文,以及来自外部的icmp应答报文不加任何限制。这样,从本机ping其他机器时,如果网络正常,就没有问题。但如果从其他机器ping这台机器,即使网络一切正常,也会出现“超时无应答”的错误。

大部分的单方向ping通现象源于此。解决的办法也很简单,根据你自己所用的不同类型的防火墙,调整相应的设置即可。

二、错误设置ip地址

正常情况下,一台主机应该有一个网卡,一个ip地址,或多个网卡,多个ip地址(这些地址一定要处于不同的ip子网)。但对于在公共场所使用的电脑,特别是网吧,人多手杂,其中不泛有“探索者”。曾有一次两台电脑也出现了这种单方向ping通的情况,经过仔细检查,发现其中一台电脑的“拨号网络适配器”(相当于一块软网卡)的tcp/ip设置中,设置了一个与网卡ip地址处于同一子网的ip地址,这样,在ip层协议看来,这台主机就有两个不同的接口处于同一网段内。当从这台主机ping其他的机器时,会存在这样的问题:

(1)主机不知道将数据包发到哪个网络接口,因为有两个网络接口都连接在同一网段;

icmp协议篇2

关键词:黑客攻击;网络协议;ICMPIP

一、黑客基础知识

不难想象,本文可选择的攻击类型范围很广。我之所以选取本文所讨论的几种特定攻击,是因为它们不需要太多关于所涉及协议的知识,但仍然能有效地说明了攻击是如何执行的、攻击实际上是多么简单(一旦您知道了详细信息)以及攻击者所需的资源(计算和网络)是多么有限。尽管不可能在本文中涵盖关于黑客攻击的整个主题,但我已尽可能简化基本原理,而仍然尽量多地提供必要信息,以便您理解所描述的攻击。

二、攻击的种类。拒绝服务攻击:通常,黑客瞄准特定系统,闯入系统以便将其用于特定用途。那些系统的主机安全性经常会阻止攻击者获得对主机的控制权。但进行拒绝服务攻击时,攻击者不必获得对系统的控制权。其目标只是使系统或网络过载,这样它们就无法继续提供服务了。拒绝服务攻击可以有不同的目标,包括带宽消耗(bandwidth consumption)和资源缺乏(resource starvation)。

三、分析选定的网络攻击

(一)协议

本段讨论了针对网际控制报文协议(ICMP)和传输控制协议(TCP)上的攻击,这两个协议都属于网际协议(IP)系列。在深入研究关于这些协议的详细信息之前,我打算先在适合于这些协议的环境中讨论它们。

网际控制报文协议(ICMP)是IP的组成部分,但它使用某些IP服务。ICMP提供服务,使主机能够彼此交流控制信息。ICMP由IP和一些更高级别的协议使用,如传输控制协议(TCP)。

传输控制协议(TCP)是本文中讨论的第三个重要协议。TCP的功能比IP更进一步,并提供两个重要特性:连接和服务质量。这意味着您可以在两台主机之间开一个虚拟通道,通过这个通道,使得所发送的包的顺序及其实际传递都得到保障。

接下来更高的一级是应用层协议,如Telnet和SMTP。它们都使用由TCP提供的服务。例如,当您用Telnet连接到主机时,打开一个连接,并且您希望所有输入这个Telnet会话的数据都以正确的顺序发送到接收主机。

(二)理解IP

因为IP提供的是无连接、不可靠、最高效的(best-effort)数据报传递服务,所以IP的使用范围多少受到了限制。但是,它提供两个基本功能:寻址和分段。地址(在IP数据报头中封装为源和目的地地址)用来将数据报传输到其目的地,这个过程称为路由。有两种基本情况:

接收主机和发送主机位于同一子网,这种情况下数据报将被直接从发送方发送到接收方。

接收主机位于不同的子网,这种情况下发送主机将把数据报转发到网关(连接两个子网的IP主机),然后,如果目的地主机在一个与网关相连的子网中,则网关会尝试将数据报传递到目的地主机。如果目的地主机不在与网关相连的子网中,网关将会把数据报转发到另一个网关。这个过程将反复进行,直到能够将数据报传递到其目的地主机为止。

既然我已经介绍了基础知识,现在可以讨论个别协议了。在以下几节中,您将找到关于ICMP和TCP的更详细的信息以及一些使用这些协议的有趣的攻击。

(三)使用ICMP

超时消息:每个IP数据报头中都包含一个字段―称为“生存时间字段”―它指出数据报在被丢弃之前还能在因特网上保持多久。数据报在因特网上保持的时间以跳跃点(hop)衡量,其中一个跳跃点表示数据报通向目的地节点路径上的一个网关。当数据报经过网关转发时,它就将生存时间字段中的值减一。如果处理数据报的网关测定该数据报IP头中的生存时间字段为0,则丢弃该数据报并用超时消息通知源主机。

回应请求和回应应答消息:如果主机A想知道主机B是否是活动的,则主机A会向主机B发送一条ICMP回应请求消息。主机B将用ICMP回应应答消息来应答,以表明自己是活动的。这条消息就是众所周知的ping包。

以上这些并不是ICMP所使用的全部消息类型,但它们能使您大致了解ICMP的用途。接下来我将向您介绍两种ICMP攻击。

目的地不可到达攻击

类别:拒绝服务攻击

描述:如上所述,ICMP目的地不可到达消息向尝试转发消息的网关提供了一种工具,用来通知发送方:因为在数据报目的地地址中指定的主机不可到达,所以无法传递该消息。

如果入侵者获得了网络10.1.0.0中一台主机的访问权,那么,他可以广播一条“目的地不可到达消息”,声明网关G对于他所在网络的所有主机是不可到达的。这将使网关G和网络10.2.0.0暂时变得不可用,因而不可能从网络10.1.0.0向网络10.2.0.0传输任何消息。

这种攻击背后的动机只是使网络或服务暂时瘫痪。因为攻击者不需要功能强大的机器或高速的网络连接来执行这种攻击,所以它特别危险。

(四)Smurf攻击

类别:拒绝服务攻击

描述:Smurf攻击是拒绝服务攻击的一种非常可怕的形式,因为它具有放大效应。Smurf攻击利用ICMP回应消息。如上所述,主机A每次向主机B发送回应请求消息时,主机B都会返回回应应答消息以表明自己是活动的。名称“Smurf攻击”源自一个名为smurf的利用程序,攻击者用该程序来执行这种攻击。

(五)传输控制协议(TCP)

在继续讨论攻击之前,我将更详细地讨论TCP的某些方面,这些知识对于下面讨论的攻击是必需的。尤其是TCP包(称为段)的结构、如何在主机之间建立TCP连接和如何关闭连接。

(六)TCP包的结构

与IP数据报类似,TCP段包含头部分、可选(选项)部分和数据部分。现在,让我们更仔细地研究一下TCP头的某些重要字段:

源端口:分配给启动连接的主机上虚连接的端口号。

目的地端口:目的地端口号。这也由启动连接的主机分配,因为只有该主机知道自己“想”连接到哪里。例如,如果您打开到特定主机的Telnet连接,则目的地端口将被设置为23。

序列号和确认号:发送方和接收方使用两个序列号来确保包没有丢失、没有重复以及可以在目的地节点以正确顺序重新组装。

标志:这个字段包含六个控制位:

URG:向接收方表明一接收完数据就进行紧急处理。

ACK:表明确认号字段是有意义的。

PSH:表明必须迅速地将数据传递到接收方。

RST:表明要立即复位连接。

SYN:在需要同步序列号的情况下设置。

FIN:表明不会再有来自发送方的数据了(也就是说,连接将要关闭)。

以上是TCP头中的重要字段,下面关于TCP连接的建立和关闭的几节将使您更好地理解这些字段的用途。

建立和关闭TCP连接。

icmp协议篇3

关键词 远程OS探测 协议栈指纹 TCP/IP协议

1 引言

探测和识别一个计算机系统在运行什么OS是黑客入侵的重要步骤。如果不知道目标系统在运行什么OS,就很难在目标系统上执行操作,也无法判断是否存在安全漏洞,更谈不上攻击。

从管理和防范的角度来说,如果能减少被探测时泄漏的信息,就减少了黑客入侵行为的信息来源,使其入侵行为变得相当困难。因此,研究这方面的技术,对于提高系统的安全性和抵抗入侵的能力具有重要的意义。

2 简单的OS探测技术

在早期,黑客经常采用一些简单的探测方法来获取目标系统的信息。如通过telnet标题,ftp的标题和STAT命令,通过HTTP服务程序,DNS ,SNMP等都可以得到很多有用信息。

但是,在长期的入侵和防入侵的斗争中,通过简单的手段即可获得的信息越来越少了。管理员努力地减少通过网络泄漏的信息,有时还修改OS的代码,给出虚假的信息。在这种情况下,简单的方法已经很难奏效了,因此出现了通过网络协议栈指纹来识别OS的技术。

3 网络协议栈指纹原理

常用的网络协议是标准的,因而从理论上讲各个操作系统的协议栈应该是相同的。但是,在实践中,各种操作系统的协议栈的实现存在细微的差异。这些差异称作网络协议栈的“指纹”。

对TCP协议族来说,这些差异通常表现在数据包头的标志字段中。如window size、ACK序号、TTL等的不同取值。通过对这些差别进行归纳和总结,可以比较准确地识别出远程系统的OS类型。

由于Internet广泛使用TCP/IP协议族,因此下面的讨论主要围绕TCP/IP来进行。

4 网络协议栈指纹构成

下面列出了不同OS的网络协议栈的差异,这些差异可作为协议栈指纹识别的依据。

1) TTL

TTL:Time To Live,即数据包的“存活时间”,表示一个数据包在被丢弃之前可以通过多少跃点(Hop)。不同操作系统的缺省TTL值往往是不同的。

常见操作系统的TTL值:

Windows 9x/NT/2000 Intel 128

Digital Unix 4.0 Alpha 60

Linux 2.2.x Intel 64

Netware 4.11 Intel 128

AIX 4.3.x IBM/RS6000 60

Cisco 12.0 2514 255

Solaris 8 Intel/Sparc 64

2) DF位

DF(不分段)位识别:不同OS对DF位有不同的处理方式,有些OS设置DF位,有些不设置DF位;还有一些OS在特定场合设置DF位,在其它场合不设置DF位。

3) Window Size

Window Size:TCP接收(发送)窗口大小。它决定了接收信息的机器在收到多少数据包后发送ACK包。

特定操作系统的缺省Window Size基本是常数,例如,AIX 用0x3F25,Windows、OpenBSD 、FreeBSD用0x402E。

一般地,UNIX的Window Size较大。MSWindows,路由器,交换机等的较小。

4) ACK 序号

不同的OS处理ACK序号时是不同的。如果发送一个FIN|PSH|URG的数据包到一个关闭的TCP 端口,大多数OS会把回应ACK包的序号设置为发送的包的初始序号,而Windows 和一些打印机则会发送序号为初始序号加1的ACK包。

5) ICMP地址屏蔽请求

对于ICMP地址屏蔽请求,有些OS会产生相应的应答,有些则不会。会产生应答的系统有OpenVMS, MSWindows, SUN Solaris等。在这些产生应答的系统中,对分片ICMP地址屏蔽请求的应答又存在差别,可以做进一步的区分。

6) 对FIN包的响应

发送一个只有FIN标志位的TCP数据包给一个打开的端口,Linux等系统不响应;有些系统,例如 MS Windows, CISCO, HP/UX等,发回一个RESET。

7) 虚假标记的SYN包

在SYN包的TCP头里设置一个未定义的TCP 标记,目标系统在响应时,有的会保持这个标记,有的不保持。还有一些系统在收到这样的包的时候会复位连接。

8) ISN (初始化序列号)

不同的OS在选择TCP ISN时采用不同的方法。一些UNIX系统采用传统的64K递增方法,较新的Solaris,IRIX,FreeBSD,Digital Unix,Cray等系统采用随机增量的方法;Linux 2.0,OpenVMS, AIX等系统采用真随机方法。Windows系统采用一种时间相关的模型。还有一些系统使用常数。如,3Com集线器使用0x803,Apple LaserWriter打印机使用0xC7001。

9) ICMP 错误信息

在发送ICMP错误信息时,不同的OS有不同的行为。RFC 1812建议限制各种错误信息的发送率。有的OS做了限制,而有的没做。

10) ICMP 消息引用

RFC 规定ICMP错误消息可以引用一部分引起错误的源消息。

在处理端口不可达消息时,大多数OS送回IP请求头外加8 字节。Solaris 送回的稍多,Linux 更多。

有些OS会把引起错误消息的头做一些改动再发回来。例如,FreeBSD,OpenBSD,ULTRIX,VAXen等会改变头的ID 。

这种方法功能很强,甚至可以在目标主机没有打开任何监听端口的情况下就识别出Linux和Solaris 。

11) TOS(服务类型)

对于ICMP端口不可达消息,送回包的服务类型(TOS)值也是有差别的。大多数OS是0,而Linux 是0xc0。

12) 分段重组处理

icmp协议篇4

【关键词】蜜罐;指纹匹配;相关函数

1 Honeyd软件介绍

Honeyd是由Niels Provos创建的一种具有开放源代码的轻型低交互级别的蜜罐,除了具有蜜罐的共性――引诱攻击者的攻击外,它自身的设计特点不但可以使Honeyd更有效的完成任务,还能开发出许多新的应用出来。它可以同时模仿400多种不同的操作系统和上千种不同的计算机。

Honeyd有如下特点:

第一,Honeyd可以同时模仿上百甚至上千个不同的计算机,大部分蜜罐在同一时间仅可以模仿一台计算机,而Honeyd可以同时呈现上千个不同的IP地址。

第二,可以通过简单的配置文件对服务进行任意配置,可以对虚拟的主机进行ping操作或者进行traceroute,Honeyd可以根据简单的配置文件对虚拟主机的任何服务进行任意的配置,它甚至可以作为其他主机的。

第三,可以在TCP/IP层模仿操作系统,这就意味着如果有人闯入用户的蜜罐时,服务和TCP/IP都会模拟操作系统做出各种响应。当前,还没有任何其他的蜜罐具有这种功能,可以完成的工作包括虚拟nmap和xprobe,调节分配重组策略以及调节FIN扫描策略。

第四,可以模拟任何路由拓扑结构,可以配置等待时间和丢包率。

第五,作为一种开放源代码的工具,Honeyd可以免费使用,同时也迅速成为了很多安全组织的开发源代码的一部分。

2 Honeyd逻辑结构

Honeyd结构由以下几个部件组成:配置数据库,中心数据包分配器,协议管理器,服务处理单元,特征引擎,可选的路由器部分。Honeyd的逻辑结构如图1所示:

图1 Honeyd的逻辑结构

各部分的功能分别为:

路由器:路由数据包到达某个虚拟蜜罐所在的地址,会产生三种情况:没有找到目的地址而丢弃数据包;没有找到目的地址,但是可以把数据包交付给下一个路由器;可以直接把数据包交付给目的地址。路由是一个可选择的逻辑部件。

数据包分配器:该逻辑部件核查IP数据包的长度,对IP数据包进行正确性检查,核实确认序列号。分配器只对协议管理器分配三种数据包:ICMP、UDP、TCP。其他协议的数据包会被丢弃并且不做任何记录。

协议管理器:它包括ICMP/UDP/TCP协议管理和服务处理单元。ICMP协议管理支持ICMP请求。默认的,所有的蜜罐配置都响应回射请求和处理目标主机不可达信息;TCP和UDP协议管理器和服务处理单元能够对外建立特定服务的连接。服务的行为完全依赖于外部应用。TCP协议管理器能够很好的支持三次握手的建立和FIN或RST的拆卸,但是还不能很好地支持窗口管理和拥塞控制。

特征引擎:将对发送的所有数据包进行指纹匹配,以便在指纹识别工具前能很好地隐蔽。

配置数据库:它当中包含了一切配置参数,例如虚拟蜜罐的IP地址、默认的ICMP响应,虚拟链路的网络属性,指纹数据等。

3 关键技术

Honeyd能够虚拟蜜罐,并且能够利用这些虚拟的蜜罐构建松散的虚拟蜜罐网络或有层次结构的虚拟蜜罐网络,这些虚拟的蜜罐网络中甚至可以包含真实的主机。然而Honeyd要构建虚拟的蜜罐网络需要面对这样一些问题:首先是攻击者利用指纹工具对连接的蜜罐进行识别时该怎么办;其次,虚拟出的蜜罐网络如果面对网络拓扑发现工具时怎么办。

Honeyd采用了两种关键的技术来欺骗攻击者,一种是指纹匹配技术,另一种是虚拟蜜罐网络技术。

4 指纹匹配

为了在被探测的时候表现得跟真实的系统一样,虚拟蜜罐要模拟给定操作系统的网络栈行为,这是虚拟蜜罐的一部分特征。不同的特征能被设计成不同的虚拟蜜罐。特征引擎通过改变协议数据包头部来匹配特定的操作系统,从而表现出相应的网络协议栈行为,这一过程成为指纹匹配。

Honeyd运用NMAP的指纹数据库作为TCP和UDP行为特征的的参考;用XPROBE指纹数据库作为ICMP行为的参考。

下面用NMAP提供的指纹信息来改变蜜罐网络栈的特征为例来进行说明:

Fingerprint IRIX 6.5.15m on SGI 02

Tseq(Class=TD%gcd=

T1(DF=N%W=EF2A%ACK=S++%Flags=AS%Ops=MNWNNTNNM)

T2(Resp=Y%DF=N%W=O%ACK=S%Flags=AR%Ops=)

T3(Resp=Y%DF=N%W=EF2A%ACK=O%Flags=A%Ops=NNT)

T4(DF=N%W=O%ACK=O%FlagsR%Ops=)

T5(DF=N%W=O%ACK=S++%Flags=AR%Ops=)

T6(DF=N%W=O%ACK=O%Flags=R%Ops=)

T7(DFN%W=O%ACK=S%Flags=R%Ops=)

PU(Resp=n)

T1测试设置了SYN和ECE TCP flags;T5测试仅设置了SYN TCP flags。后面7个测试决定了数据包到达开放的或关闭的端口的网络栈行为。最后一个分析ICMP对关闭的UDP端口的响应。

Honeyd保持每一个蜜罐的可靠性。包括产生ISN信息可靠性,蜜罐的初始化时间,当前IP数据包的确认号的可靠性。保持状态有利于我们在指纹修改后发送的数据包产生后续的ISN。

滑动窗口在不同的环境下表现出来的大小同样也会成为攻击者进行识别的一部分。当Honeyd为一个新建的连接发送一个数据包时,它会用NMAP指纹去检测内部窗口的大小,在一个连接建立好以后,Honeyd框架将根据缓冲区中数据的多少调整窗口的大小。

5 指纹匹配相关函数

Honeyd逻辑上的特征引擎是由相关的函数参考配置数据库中的参数,然后分别对各自的数据包进行指纹处理得到的。这些被处理的数据包主要由TCP数据包、UDP数据包和ICMP数据包。其中tcp _send(),tcp_personality()负责处理TCP数据包的指纹;udp_send()负责处理UDP数据包的指纹;icmp_send()数据包负责处理ICMP数据包的指纹。下面我们重点介绍处理TCP数据包的函数。

tcp_send()负责发送基于tcp协议的数据包,重要的是,它对即将发送的数据包进行改动,修改报头,使得看上去和对应的操作系统的特征准确地吻合,以达到欺骗的效果。因而此函数只是在通过查询特征库后,得到返回的id(ip报头的标识字段的值),调整其他参数,封装成ip包发送。

udp_send()函数负责发送基于udp协议的数据包,如同上面的一样,发送前,必须参考特征库,修改得当的报头。

icmp协议篇5

关键词:ICMP;TCP;UDP;路由追踪

中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)18-2pppp-0c

1 背景

网路故障的一般表现是网速变慢或者无法访问互联网或内网服务器,在现场进行网络故障诊断时,往往需要借助各种工具软件如Sniffer、ping、traceroute等进行逐步排查,最后经过分析,选择怀疑的网络节点,然后在局端或现场对怀疑的网络节点进行各种连通性、替代性测试,方法步骤繁杂,而且往往无法准确诊断。

经过分析,故障诊断的过程,可以使用专用的设备,并编写相应的诊断程序,自动完成网络故障节点的测试和判断。

2 算法和设计

当测试节点到达目的网络位置的链路存在问题时,一般可能是:物理链路断开(线缆或节点设备故障);目的地址的相应端口没有开放,或者中间链路经过的设备(交换机,路由器等)禁止了协议或端口;终端设备故障。故,处理流程首先是找到测试节点到达连接服务器节点的路径,确定经过的网络节点位置,然后对节点中的各个位置实施连通性测试,最后根据测试结果判断故障节点位置和原因。

2.1 网络路由的查询

该部分的功能类似于Linux系统中提供的命令traceroute,不同的是,该部分功能进行路由诊断依赖的协议不仅仅是ICMP。

ICMP的原理是链路上的节点设备都要在转发该 ICMP 回显请求报文之前将报文头部的 TTL 值减 1,当报文的 TTL 值减少到 0 时,节点设备向源发回 ICMP 超时信息。该诊断实用程序通过向目的地发送具有不同生存时间 (TTL) 的 ICMP报文,确定至目的地的路由。通过发送 TTL 为 1 的第一个回显报文并且在随后的发送中每次将 TTL 值加 1,直到目标响应或达到最大 TTL 值,可以确定链路经过的路由。通过检查链路中间节点设备发回的 ICMP 超时信息,可以确定故障节点。

如果使用ICMP协议无法完成测试,则改为使用UDP协议和TCP协议分别进行路由侦测。源发出UDP数据包,源端口使用随机的大于32768的高段端口号,目的端口从33434开始依此递增,直至33434+29,同时TTL从1开始依此递增,直至1+29=30。节点设备送回的 ICMP超时报文,使得源可以侦测到链路上每一个节点。

2.2 网络节点诊断

向节点发送TCP握手信号,如果该节点可以通过connect连接成功,表示节点可以正常连接,如果回应RST,表示该节点禁止了该端口的访问,如果该节点长时间不回复SYN,也可以认为该节点禁止端口。

因此,依据上述现象可以很容易判断当前故障节点――离测试者最近的故障点,可以被认定为当前网络故障点。

2.3 故障节点位置的判断策略

如果路由寻找完整,一般能够找到节点。在所有不回应SYN包或者回应RST包的

节点中,应该是离源最近跳数的节点设备将端口关闭。

如果路由寻找不完整,有可能找不到所找的故障点。如果在找到的n个节点中,只有非最远离源的一个节点不回应,或回应RST包,则不能确定故障节点;如果是包括最远离源在内的一个或多个节点不回应或回应RST包,则最右端节点可能为故障节点,但并不能确定在整个路由中的故障节点所在,因为路由不完整。

2.4 不能覆盖的异常情况

如果使用ICMP和UDP都无法寻找到完整路由,则有可能找不到故障节点,但这种情况非常少,因为根据UDP的测试原理,除非中间节点将大于32768的端口全部封掉,否则都可以得到完整的路由路径。

3 代码片段和程序流程

3.1 整体框架代码

int f_procon_scan_showerr(char *re_info)

{char err_node[16];

inet_ntoa_b(info_scan.node[info_scan.err_num],err_node);

if(err_tcpscan == ERR_PORTSCAN_ROUTE_HALF){

sprintf(re_info,"路由信息不完整,故障点可能是:%s",err_node);

}else if(err_tcpscan == ERR_PORTSCAN_ROUTE_NO){

sprintf(re_info,"未找到达到目的地址的路径,无法诊断故障");

}else{

sprintf(re_info,"路由信息完整,故障点是:%s",err_node);

}

return OK;

}

static int quitflag=0;

int f_procon_scan_tcp(void)

{char * re_info; /* 测试完后返回的信息 */

int re_find;

int i,rv;

char buf[512];

int numBytes,count;

int on,len;

int ctrlSock;

struct sockaddr_in ctrlAddr;

struct router_node bak_router_node;

sprintf(buf,"正在使用ICMP获取路由信息...");

server_virtual_display_output(buf,0);

bzero((char *)&info_scan,sizeof(info_scan));

re_find = find_node(0);/*使用ICMP协议*/

if(info_scan.number == 0){/* 没有正确找到到目的地址的路由信息,尝试使用udp协议查找*/

sprintf(buf,"正在使用UDP获取路由信息...");

server_virtual_display_output(buf,0);

bzero((char *)&info_scan,sizeof(info_scan));

re_find = find_node(1);/*使用UDP协议*/

if(info_scan.number == 0){

err_tcpscan = ERR_PORTSCAN_ROUTE_NO;

return OK;

}

}else if(re_find == ERROR){/*获取不完整路径,尝试用udp获取*/

sprintf(buf,"正在使用UDP获取路由信息...");

server_virtual_display_output(buf,0);

memcpy(&bak_router_node,&info_scan,sizeof(info_scan));

bzero((char *)&info_scan,sizeof(info_scan));

re_find = find_node(1);/*使用UDP协议*/

if(info_scan.number == 0){/*udp没有获取到路径,则恢复icmp的路径*/

memcpy(&info_scan,&bak_router_node,sizeof(bak_router_node));

re_find=ERROR;

}else if(re_find == ERROR){/*udp获取的也是不完整路径,则进行比较,选最多的*/

if(info_scan.number

memcpy(&info_scan,&bak_router_node,sizeof(bak_router_node));

}

}

}

if(re_find == ERROR){

err_tcpscan = ERR_PORTSCAN_ROUTE_HALF;

}else{

err_tcpscan = ERR_PORTSCAN_ROUTE_OK;

}

quitflag=1;

info_scan.node[info_scan.number].s_addr=self_ip;

for(i=info_scan.number-1;i>=0;i--){

/*创建socket*/

ctrlSock = socket (AF_INET, SOCK_STREAM, 0);

if (ctrlSock < 0){

sprintf(buf,"无法创建socket");

server_virtual_display_output(buf,0);

return (ERROR);

}

/*设置socket为非阻塞模式*/

on=TRUE;

if(ioctl(ctrlSock,FIONBIO,(int)&on)

printf("set socket to no block is error\n");

}

ctrlAddr.sin_family= AF_INET;

ctrlAddr.sin_addr.s_addr = info_scan.node[i].s_addr;

ctrlAddr.sin_port= htons(s_procon_info.port);

if(connect(ctrlSock,(struct sockaddr *)&ctrlAddr, sizeof (ctrlAddr))< 0){

if(!((errno==EINPROGRESS) || (errno==EALREADY))){

shutdown(ctrlSock,2);

close(ctrlSock);

continue;

}

}

rv=server_wait_for_write_timeout(ctrlSock,&quitflag);

if(rv!=0){

shutdown(ctrlSock,2);

close(ctrlSock);

break;

}

shutdown(ctrlSock,2);

close(ctrlSock);

}

if(i

i=0;

}else if(i!=info_scan.number-1){/*不是最后一个不同,则认为就是他了*/

i++;

}else if(err_tcpscan == ERR_PORTSCAN_ROUTE_OK){/*最后一个竟然也是通的,则认为是服务器本身了*/

i++;

}

info_scan.err_num=i;

return OK;

}

3.2 查找路由节点函数

static int find_node(int flag)

{int dst_ip, gateway;

int i,num;

int result = OK;

S_TRACERT_INTERFACES info_tracert;

S_TRACERT_INTERS *intrs;

struct in_addr ip_tra;

dst_ip = s_procon_info.ip_remote.s_addr; /* tracert ip is test ip */

switch(s_netcon_info.mode){

case D_NETCON_MODE_STATIC_IP:

gateway = s_netcon_info.sta_ip.ip_router.s_addr;

self_ip = s_netcon_info.sta_ip.ip_local.s_addr;

break;

case D_NETCON_MODE_DHCPC:

gateway = s_netcon_info.dhcpc.ip_router[0].s_addr;

self_ip = s_netcon_info.dhcpc.ip_local.s_addr;

break;

case D_NETCON_MODE_PPPOEH:

gateway = s_netcon_info.pppoeh.ip_remote.s_addr;

self_ip = s_netcon_info.pppoeh.ip_local.s_addr;

break;

}

f_tracert_routine(dst_ip,gateway,flag); /* exec tracert for find node */

/* 如果tracert未结束,查看是否出现超时找不到路由情况,如果是,终止测试 */

/* 如果tracert停止,看是否追踪到最终的路由 */

while(!v_tracert_end){

f_tracert_show((char *)&info_tracert); /* 取信息,判断 */

for(i=0;i

intrs=&info_tracert.tracert_info[i];

ip_tra.s_addr = intrs->ip;

if(intrs->ip == 0){

info_tracert.number -= 1;

f_tracert_end();

result = ERROR;

}

}

taskDelay(sysClkRateGet()/2);

}

f_tracert_show((char *)&info_tracert);

info_scan.number = info_tracert.number;

/* save the node infomation to my struct */

for(i=0;i

intrs=&info_tracert.tracert_info[i];

info_scan.node[i].s_addr = intrs->ip;

}

num = info_scan.number - 1;

if(info_scan.node[num].s_addr == 0){

info_scan.number -= 1;

}

return result;

}

3.3 涉及到的数据结构

保存状态的结构体。

static struct router_node{

int number; /* 到目的地址能找到的节点总数 如果为0,表示未找到路由*/

int err_num; /* 询查所有节点,最后一个对端口无回应的节点序号*/

struct in_addr node[31]; /* 用Tracert查到的路由节点地址 */

char f_send[30]; /* 向相应节点成功发送TCP SYN包标志 ,成功置 1*/

charf_recv[30]; /* 成功接收各节点回复包标志,接收到置 1 */

int send_seq[30]; /* 发送的各SYN包的SEQ号,用来判断接收包 */

unsigned char flag[30]; /* 如果接收返回包,保存返回包的TCP FLAG字段 */

}info_scan;

错误状态如下:

#define ERR_PORTSCAN_ROUTE_NO 0x01

#define ERR_PORTSCAN_ROUTE_OK 0x02

#define ERR_PORTSCAN_ROUTE_HALF 0x03

#define ERR_PORTSCAN_SEND_SYN 0x11 //向网络节点发送SYN同步包出错

4 应用案例

现有一计算机终端,无法登录其开通的网络多媒体点播服务系统,但可以登录其它网站,使用网络测试仪的网络故障诊断软件来诊断该案例。

首先,通过用户界面,填入多媒体点播系统的IP地址(如202.102.249.174)极其端口号(1026),然后点击测试,诊断软件首先查找从局域网络到达202.102.249.174的路由如下:

1

2 *** Request timed out.

3 2 ms 1 ms 1 mshn.kd.ny.adsl [125.42.110.1]

4

5

6

然后,软件将根据算法,从最后一个节点开始诊断,发现直到hn.kd.ny.adsl时,1026端口的连接测试不能通过,从而确定,问题是因为hn.kd.ny.adsl设备禁止了1026端口。向局端工程师确认,并修改多媒体登录系统的端口为其它端口(8080),可以登录,问题解决。

5 后记

使用该算法的网络测试仪产品已经研制成功,该产品同时具备了ping、sniffer等更多的网络功能,可以更好的替代网络维护人员随声携带的笔记本电脑和其它设备,简便地进行网络故障的诊断。

参考文献:

[1](美)科默(Comer,D.E.),林瑶,蒋慧,等,译.用TCP/IP进行网际互联(第1卷):原理、协议与结构.北京:电子工业出版社,2001,5.

[2](美)W.Richard Stevens,范建华,等,译.TCP/IP详解.北京:机械工业出版社,2000,4.

[3](美)DonnaL.Harrington,童小林,等,译.CCNP实战指南:故障排除.北京:人民邮电出版社,2003,12.

[4](美)史蒂文斯,(美)芬纳,(美)鲁道夫,杨继张,译. UNIX网络编程.北京:清华大学出版社,2006,1.

收稿日期:2008-03-10

icmp协议篇6

关键词:木马关键技术;动态嵌入技术;反向连接技术

中图分类号:TP393.08 文献标识码:A文章编号:1007-9599 (2011) 10-0000-01

The Implementation of Trojan Key Technology

Wang Delei

(BeiJin LuHang Institute,Beijing101123,China)

Abstract:With the development of internet technology and the popularization of the global information technology has become a major trend.However,in recent years,hackers,technology continues to mature,network information security face a great challenge.This paper describes the dynamics of Trojans embedded technology,connectivity and reverse ICMP Trojan communications technology.

Keywords:Trojan key technology;Dynamic embedding;Reverse connection technology

一、引言

随着计算机网络和程序设计技术的普及和发展,木马程序的编制技术也不断地普及和发展,目前,世界上有20多万个黑客网站在介绍一些攻击方法和攻击软件的使用以及系统的漏洞。

二、木马技术发展状况

按其在不同阶段使用的典型技术可分为以下几代木马:第一代,即简单的密码窃取、发送等,如“QQ密码大盗”。第二代木马在远程控制技术上有了很大的进步,“冰河”是当时国内木马的典型代表之一。第三代木马在数据传递技术上又做了不小的改进,出现了ICMP和反弹端口等类型的木马,利用畸形报文传递数据,增加了杀毒软件查杀木马的难度。比较典型的是“网络神偷”。第四代木马在进程隐藏方面,采用了内核插入式的嵌入方式,利用远程插入线程技术,嵌入DLL线程,或者挂接API,从而实现木马程序的隐藏。现在第五代木马正在发展中,具有远程DLL动态入侵、模块化升级、智能化通信等新特点。

三、木马关键技术的实现

(一)动态嵌入技术的实现。动态嵌入技术是指木马采用远程线程技术或HOOK技术注入其他进程的运行空间等方法导致杀毒软件无法发现木马的运行痕迹。(二)反向连接技术的实现。反向连接技术是指木马为了克服服务端在某一端口上侦听易被发现这一缺点,而采用服务端主动连接,客户端侦听的一种技术。这样用一般的port scanner或者fport就发现不了服务端。这种反弹端口型木马的典型例子是国产木马“网络神偷”。实现时主要的难点有两个:一个是客户端IP地址不能确定,服务端如何找到客户端。另一个是服务端主动连接客户端时防火墙也会报警。下面围绕这两点探讨解决方法。1.解决IP地址问题。一种解决方法是客户端通过一个有固定IP或者固定域名的第三方自己的IP,比如:事先约定好一个个人主页的空间,放置一个文本文件,木马固定多长时间去取一次这个文件,如果文件内容为空就什么都不做,如果有内容就按照文本文件中的数据计算出控制端的IP和端口,反弹一个TCP链接回去,这样每次控制者上线只需要上传一个文本文件就可以告诉木马自己的位置。另一种方法是使用RAW socket来收听ECHO REPLY类型的ICMP包且在ICMP数据包的数据中就包含了客户端IP。或者是截获其他进程收到的TCP数据或UDP包,然后分析截获的数据,从中确定是否客户端发来了一个报告其IP的数据片断。这种客户端通过某种方法主动告诉服务端自己的IP和端口的方法可以保证最大的可靠性,安全性和灵活性。2.解决防火墙报警问题。一种方法是上面提到的动态嵌入技术,服务端将自己注入到一个可以合法的与外界进行网络通讯的进程的地址空间中,然后就可以以一个新线程的形式运行。在新线程内去主动连接客户端,如果是寄生在IE内就连接客户端的80端口;如果是寄生在OICQ内,可以连接客户端的8000端口。另一种方法是木马服务端使用80端口,将传送的数据包含在HTTP的报文中,就算是能够分析报文、过滤TCP/UDP的防火墙,也不可能分辨出通过HTTP协议传送的究竟是网页还是控制命令和数据。

(三)ICMP木马技术的实现。ICMP全称是Internet Control Message Protocol(互联网控制报文协议)它是IP协议的附属协议,用来传递差错报文以及其他的消息报文,例如工具Ping就是通过发送接收ICMP_ECHO和ICMP_ECHOREPLY报文来进行网络诊断的。ICMP木马技术的出现正是得到了Ping程序的启发,ICMP木马技术利用ICMP报文由系统内核或进程直接处理而不是通过端口的特点,将自己伪装成一个Ping的进程,系统就会将ICMP_ECHOREPLY(Ping的回包)的监听、处理权交给木马进程,木马进程通过判断包大小、ICMP_SEQ等特征,来确定是否是自己需要的数据,一旦事先约定好的ICMP_ECHOREPLY包出现,木马就会接受、分析并从报文中解码出命令和数据来执行。另外一种办法是修改ICMP头的构造,加入木马的控制字段。由于ICMP_ECHOREPLY包还有对于防火墙和网关的穿透能力,这种技术使得木马摆脱了端口的限制,突破了防火墙对目标主机的保护。

四、结束语

综上所述,随着internet技术的发展和使用的普及,木马技术也在不断的成熟和普及,本文仅从一个侧面加以讨论,希望通过这一探讨让我们对木马的关键技术有一个简单的认识,同时也为我们防范他人利用木马非法入侵提供参考。

参考文献:

[1]张友生,米安然.计算机病毒与木马程序的剖析[M].北京:科海电子出版社,2003

[2]周明全,吕林涛,李军怀.网络信息安全技术[M].西安:电子科技大学出版社,2003

[3]孙锋.网络安全与防黑技术[M].北京:机械工业出版社,2004

icmp协议篇7

【关键词】 漏桶 攻击 配置

一、引言

松原局s8016设备曾被病毒恶意攻击过,经过认真核实,访问列表等都已经设置了,但是CPU的占用率为100%,这显然是不正常的现象,为了有效遏制病毒攻击,我们及时与华为工程师沟通,采取了有效的措施及时地进行障碍诊断处理,对该设备的漏桶进行重新设置。因为通过漏桶上传的报文一般都是与网关有交互,需要到MPU处理的协议报文或者ping网关及telnet、FTP等报文,根据实际情况,考虑配置以下漏桶,对丢弃频繁的漏桶进行限流配置。

二、故障现象描述:

首先查看漏桶:

[8016]display system-bucket 1

****Token information****

#The slot number: 1 /*板号*/

#The token ID: 1 /*漏桶号*/

The time of the last packets arrive:36403113 /*上次报文到来的时间ms*/

The number of present tokens: 32716 /*当前剩余的令牌*/

The traffic rate of the token: 32K /*漏桶通道大小*/

The height of the token bucket:32768 /*漏桶深度*/

The number of the discarded packets: 0 /*丢弃报文数*/

三、障碍处理过程

根据网上设备运行经验:如果单板ARP数小于100个,则漏桶可以配置为2K;如果单板的ARP数小于500个,对于ARP攻击建议将漏桶配置成4K;如果大于500个,建议漏桶配置值为8K。通过上述的配置,在一般情况或者攻击很少的情况对正常业务影响不大。具体配置如下:

apply system-bucket 1 22 traffic-rate 4/*将1号板的22号漏桶ARP配置为4K*/每个漏桶的报文类型可以通过?命令查看“display system-bucket ?”

display system-bucket 7 ?

1 Default bucket,any packet not list here use this bucket

缺省类型,也就是表中没有列出的其他类型报文都公用这一个桶

2 ARP Miss message,use it to form ARP entry

ARP MISS 消息(请求下一跳的ARP)

3 FIB Miss Message,use it to form host route entry

FIB MISS消息(扫描网段时经常发生,上送触发ARP请求)

4 PPP protocol control frame

PPP控制报文

5 Packet MFIB Miss ,use it to form (S,G) route

组播路由MISS后导致的上送消息

6 ARP response packet

回应S8016的ARP应答报文

8 ISIS protocol packet

ISIS报文

9 IP multicast packet which destIP address is 224.0.0.2(used by IGMP, LDP

etc)

224.0.0.2:所有组播路由器,应用的协议:IGMP、LDP

10 IP multicast packet which destIP address is 224.0.0.5(used by OSPF) 224.0.0.5:OSPF路由器

11 IP multicast packet which destIP address is 224.0.0.6(used by OSPF) 224.0.0.6:OSPF指定路由器

12 IP multicast packet which destIP address is 224.0.0.9(used by RIP2) 224.0.0.9:RIP2路由器

14 IP multicast packet which destIP address is 224.0.0.13(used by PIM)

15 Other IP multicast packet which destIP address is in

224.0.0.0-224.0.0.255(excluded.2 .5 .6 .9 .10 .13 .18)

其他组播报文应用不多,本参数应该可以满足

16 HGMP protocol packet

HGMP报文上送

17 GVRP protocol packet

GVRP报文上送

19 BPDU protocol packet

BPDU报文上送

21 Packet length exceed MTU and DF flag is set,it is used by host to discover the MTU in the route

MTU超值且DF置位上送

22 ARP request packet send by all the host,use it to learning host route

ARP 请求报文,一般用户发出或者下级设备发出

23 DHCP protocol packet

DHCP报文

24 Arp request packet witch destIP is in NAT pool

NAT地址池的ARP请求报文,应用很少

25 Register packet used in PIM SIM protocol

组播注册报文

27 Packet which destIP is ip address of gateway, exclude ICMP and TCP

目的地址为网关的报文,不报括ICMP和TCP,通常为UDP报文等

28 ICMP request packet witch destIP is webswitch’s VIP

和CLPU板相关,应用很少

30 IP multicast packet which destIP address is 224.0.0.18(used by VRRP) VRRP组播报文,如果有VRRP配置时会有

31 ICMP packet which destIP is ip address of gateway, for example, ping packet

目的地址为网关的ICMP报文,典型的为ping

32 TCP packet which destIP is ip address of gateway, for example, FTP, BGP peer, LDP session

目的地址为网关的的TCP报文,如果没有BGP和LDP,注意此漏桶的攻击,默认带宽较大,有256K

33 RIP1 protocol packet

RIP协议报文

A:想查看8016的CPU占用率,只需要在系统视图下输入display cpu命令。

四、故障总结

icmp协议篇8

摘要:该文介绍一个新的主动型的网络安全系统-蜜罐。首先给出了蜜罐的定义和分类,然后详细描述了一个网络层次上的模拟计算机系统的虚拟蜜罐框架Honeyd,讨论了Honeyd的原理、结构、特点、设计和实现,并对它的功能作了全面的测试评估。关键字:蜜罐,交互性,个性,路由拓扑,模板1蜜罐(Honeypot)的介绍今天网络安全问题正日益严重。黑客利用自动化的大规模的漏洞扫描工具,可以在发现漏洞后不久就使全球的计算机系统遭受破坏。可是经过数十年的研究和探索,我们仍然不能确保计算机系统的安全,甚至无法准确评估它们的安全性。现在我们介绍一种新的网络安全预警系统:蜜罐(Honeypot)。蜜罐是指受到严密监控的网络诱骗系统,它可以迷惑敌人,将攻击从网络中比较重要的机器上转移开,对新攻击发出预警,更重要的是可以引诱黑客攻击而并对其攻击的行为和过程进行深入的分析研究。将蜜罐和入侵检测系统、防火墙等结合使用,可以有效提高系统安全性。Honeypot分为两种类型:一种是低交互性蜜罐(Low-InteractionHoneypot),另一种是高交互性蜜罐(High-InteractionHoneypot)。低交互性蜜罐通常是运行于现有操作系统上的仿真服务,只允许少量的交互动作,黑客只能在仿真服务预设的范围内动作,它的优点是结构简单,部署容易,风险很低。高交互性蜜罐通常由真实的操作系统来构建,提供给黑客的是真实的系统和服务。采用这种方式可以获得大量的有用信息,包括我们完全不了解的新的网络攻击方式。同时,它也带来了更多的风险--黑客可能通过这个完全开放的真实系统去攻击和渗透网络中的其他机器。配置高交互性的物理的蜜罐成本很高,因为每个蜜罐是具有自已IP地址的真实机器,要有它自已的操作系统和相应硬件。而虚拟蜜罐是由一台机器去模拟构造一个拥有的多个虚拟主机和虚拟服务的网络。相对而言,虚拟蜜罐需要较少的计算机资源和维护费用。本文描述的Honeyd,就是一个在网络层次上模拟计算机系统的虚拟蜜罐框架。2Honeyd的设计和实施Honeyd是一个轻型的开放源代码的虚拟蜜罐的框架,可以模拟多个操作系统和网络服务,支持IP协议族,创建任意拓扑结构的虚拟网络。同时,为了模拟拓扑分散的网络地址空间和共享负荷,该结构也支持网络通道。图1Honeyd的数据接收图2Honeyd的结构2.1网络数据的接收要使Honeyd可以对目的IP地址属于虚拟蜜罐之一的网络数据包正常的接受和回应,有如下方法:对指向Honeyd主机的虚拟IP地址创建特定路由、使用ARP及使用网络通道。如图1所示,假设10.0.0.1为我们路由器的IP地址,10.0.0.2为Honeyd主机的IP地址。10.0.0.11-14是Honeyd虚拟的蜜罐的IP地址。最简单的情况是虚拟蜜罐的IP位于我们局域网内。当从互联网向蜜罐WindowsNT4.0发送一个包时,路由器首先查询它的路由表由找到10.0.0.13的转送地址,如果没有配置专用的路由,路由器通过ARP请求确定虚拟蜜罐的MAC地址,因为没有相应的物理机器ARP请求会不被响应,因此我们配置Honeyd主机用自己的MAC地址的对10.0.0.13的ARP请求做出反应,这样通过ARP路由器就把发送蜜罐WindowsNT4.0的包转到Honeyd主机的MAC地址。在复杂的情况下,我们也可以应用通用路由封装(GRE)通道协议在网络地址空间和hondyd主机间建立通道。2.2Honeyd结构Honeyd结构由几部分构成:一个配置数据库,一个中央包分配器,协议处理器,个性化引擎和随机的路由组件,见图2。Honeyd支持三种主要的互联网协议:ICMP,TCP和UDP。输入的包由中央包分配器处理,它首先检测IP包的长度并验证校验,然后查询配置数据库找到与目的IP地址相对应的蜜罐配置,如果不存在专用的配置,则应用缺省模板。确定了配置后,数据包被传送给相应的协议处理器。ICMP协议处理器支持大多数ICMP请求。缺省时,对ECHO请求做出反应并给出目的地址不可达的信息。对TCP和UDP来说,该结构能为任意的服务建立连接,服务是在STDIN上接受数据并把输出发送到STDOUT的外部应用。Honeyd包含一个简化的TCP状态机,完全支持三次握手(Three-wayHandshake)的建立连接和通过FIN或RST撤消连接,但是接受器和拥塞窗口管理没有完全实现。UDP数据报直接传到应用,当收到一个发往封闭端口的UDP包的时候,默认发出一个ICMP端口不可达的信息。Honeyd结构也支持连接的重定向,重定向可以是静态的或依赖于连接四元组(源地址,源端口,目的地址,目的端口)。重定向允许我们把虚拟蜜罐上的一个服务连接请求转递给一个在真正的服务器上运行的服务,例如,我们可以把DNS请求重指向一个域名服务器甚至可以把连接反传给敌人。2.3个性化引擎(PersonalityEngine)黑客通常会运用象Xprobe或Nmap的指纹识别工具来收集目标系统的信息,为了迷惑敌人,Honeyd可以模拟给定操作系统的网络堆栈行为,我们把这称为虚拟蜜罐的个性(Personality)。个性化引擎使蜜罐的网络堆栈按照个性设置来改变每个外出包的协议头,以便与被配置的操作系统的特征相符。Honeyd结构应用Nmap指纹库作为个性的TCP和UCP行为的参照,用Xprobe的指纹据库作为个性的ICMP行为的参照。下面介绍怎样应用Nmap提供的指纹信息来改变蜜罐的网络堆栈特性。FingerprintWindowsNT4.0SP6ahotfixesTSeq(Class=RI%gcd=<6%SI=<40132&>290%IPID=BI|RPI%TS=U)T1(DF=Y%W=2017琄=S%Flags=AS%Ops=M)T2(Resp=Y

上一篇:pop3协议范文 下一篇:培根随笔简介范文