精品风暴型DoS攻击.docx

上传人:b****7 文档编号:25706248 上传时间:2023-06-11 格式:DOCX 页数:24 大小:158.86KB
下载 相关 举报
精品风暴型DoS攻击.docx_第1页
第1页 / 共24页
精品风暴型DoS攻击.docx_第2页
第2页 / 共24页
精品风暴型DoS攻击.docx_第3页
第3页 / 共24页
精品风暴型DoS攻击.docx_第4页
第4页 / 共24页
精品风暴型DoS攻击.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

精品风暴型DoS攻击.docx

《精品风暴型DoS攻击.docx》由会员分享,可在线阅读,更多相关《精品风暴型DoS攻击.docx(24页珍藏版)》请在冰豆网上搜索。

精品风暴型DoS攻击.docx

精品风暴型DoS攻击

风暴型DoS攻击

风暴型DoS攻击是最为主要的、发生最多的一种拒绝服务攻击类型[DoS_trends],它又可进一步分为单纯风暴型和反射型两种.风暴型DoS攻击靠的不是畸形数据包,而是依靠数据包的总量来达到攻击的目的,因此,它也是一种强力攻击或者野蛮攻击(BruteForceAttack)。

虽然这种攻击通常会采用源地址伪造(假冒)的手段,但除了某些特定的攻击方式如反射攻击外,源地址伪造不一定是必需的,但却常常是对攻击者有利的。

风暴型攻击需要向目标发送大量的数据包,而单个攻击者(或用于攻击的机器,简称攻击主机)的力量是有限的,因此,如果集聚多个攻击者的力量,同时向一个受害者发动攻击,则效果会更明显,这就是所谓的分布式拒绝服务(DDoS)攻击。

对于风暴型拒绝服务攻击,可以由一个攻击者攻击一个受害者,也可以一个攻击者攻击多个受害者、多个攻击者攻击多个受害者、多个攻击者攻击一个受害者等。

但是,一个攻击者同时攻击多个受害者的情况比较少见,因为这样造成了力量分散,不易达到攻击者的目标。

需要注意的是,有一种称为瞬时拥塞(FlashCrowd)的现象看起来与风暴型拒绝服务攻击类似.站在目标终端(在拒绝服务的情况下是受害者,在瞬时拥塞的情况下是受访问的主机)的角度有时难以区分这两者,它们都会占用带宽和系统资源,造成网络的拥塞和/或服务器的过载。

不同的是前者是在短时间内众多的合法用户因为某种原因而访问系统所造成的,而后者则是恶意的、虚假的访问所造成的。

此外,二者之间还有其他的区别:

(1)由于瞬时拥塞是正常的应用导致的,当因为网络拥塞而收到流量控制信息时,这些正常的应用程序会对其访问作适当调整,如降低访问量,延长数据包发送的时间间隔等;但是拒绝服务攻击的攻击主机或其攻击引擎则不会收到流量控制信息(当数据包的源IP地址是伪造的时候)或者即使收到这种信息也不会降低数据包的发送量。

(2)瞬时拥塞多发生在对网站的访问中,如发生重大事件时,新闻网站可能在短时间内受到突发的大量的访问请求,而拒绝服务攻击则可能是任意的由攻击者选定的数据流类型。

(3)瞬时拥塞通常是来自于四面八方的,即数据流的量通常是巨大的,而拒绝服务攻击中数据流的量则视单个攻击点的攻击力度以及攻击点的数量而不同.

(4)瞬时拥塞通常是可以预见的,除了出现重大事件容易导致拥塞外,由于人们的上网习惯,不同时间段出现拥塞的可能性是不同的,例如工作日的早上刚上班以后,由于多数人会收发邮件,可能导致邮件服务器短时拥塞。

这与交通拥堵情况类似,上下班时间会出现城市交通的早高峰和晚高峰,周一早上上班时间和周五下午下班时间尤其如此。

表4。

2总结了瞬时拥塞和拒绝服务的异同。

表4.2 风暴型拒绝服务攻击与瞬时拥塞的区别

 

风暴型拒绝服务攻击

瞬时拥塞

对网络的影响

拥塞

拥塞

对服务器的影响

过载

过载

是否响应流量控制

流量类型

任意

多数为Web

数据流的数量

任意

大量

可预见性

不可预见

可预见

下面先讨论Internet的几个重要缺陷,它们是风暴型攻击得以成功的主要原因,然后讨论直接和间接两类风暴型攻击。

4.2.1 与风暴型攻击相关的Internet的缺陷

Internet有着几个重要的缺陷,它们使得在Internet中风暴型拒绝服务攻击可以很容易地得以实施[Peng04]。

1.连接性与资源共享

Internet的设计目的是提供一个信息资源共享的公共基础实施。

这导致了两个后果:

一是潜在的受害者,如Web服务器等,为了提供公开服务就必须与Internet连接并且对公众是可见的。

这种可见性是通过全球可路由的IP地址来实现的。

二是Internet是基于包交换的,这点与采用电路交换的公共电信网是不同的。

对于电路交换,每个服务(如一次通话)都会分到一个独立的信道直至服务结束。

给用户的服务不会因其他用户的行为而受到影响。

然而,在包交换网络中,所有用户共享所有资源,给予一个用户的服务会受到其他用户的影响。

风暴型拒绝服务攻击可以利用这两点:

攻击数据包在被判断为是否恶意之前就会被转发到受害者.通过占用大部分共享资源,风暴型攻击力图影响提供给其他用户的服务。

2.认证与追踪性

Internet没有认证机制,这导致一个严重的问题就是IP欺骗。

IP欺骗指的是构造包含有伪造的IP地址的数据包。

源IP地址欺骗则是伪造的数据包中的“源IP地址"域中的内容不是分配给该计算机的地址。

由于没有对每个IP数据包的真实性检查机制,攻击者可以伪造数据包中任何区域的内容然后发送数据包到Internet中。

此外,通常情况下,路由器是不具备数据包追踪功能的,如保存连接记录。

实际上,由于需要保存的数据流量太大,保存这种记录是不可能的。

因此,没有现实的方法验证一个数据包是否来自于其所声称的地方。

通过IP欺骗隐藏来源,攻击者就可以发起攻击而无须担心对由此造成的损失负责。

3.对全球网络基础设施的依赖

当攻击者可以消耗完受害者的资源时,拒绝服务攻击就发生了。

一般地,即使是资源很充足的目标也可能在仅由一个攻击源发出的数据流的攻击下瘫痪。

此外,全球网络基础设施不提供可靠性保证,这使得攻击者可以“放大”其攻击效力.首先,一些不恰当的协议设计导致一些(尤其是畸形的)数据包比其他数据包耗费更多的资源。

例如,TCP-SYN包比其他的TCP包占用的目标资源要多。

其次,Internet是一个“大集体”,其中有很多的不安全的系统。

更不幸的是,每年公布的漏洞都在不断地增加.因此,攻击者可以利用漏洞,控制大量的不安全的系统,然后利用这些系统实施分布式风暴型拒绝服务攻击,其攻击的力度大为增强。

4.2。

2 直接风暴型攻击

1.PING风暴攻击

这种攻击是单纯地向受害者发送大量的ICMP回应请求(ICMPEchoRequest,即Ping)消息,使受害者系统忙于处理这些消息而降低性能,严重者可能导致系统无法对其他的消息做出响应。

2.SYN风暴攻击

SYN风暴攻击[CA—1996—21][Schuba97]是最常见的一种攻击。

据统计[infer],有90%的拒绝服务攻击使用的是TCP协议,而SYN风暴又是其中最常用的一种攻击。

在TCP的连接建立过程中,需要连接双方完成3次握手,只有当3次握手都顺利完成,一个TCP连接才告建立。

当一个系统(称为客户端Client)希望与另一个提供服务的系统(称为服务器Server)建立一个TCP连接时,其首先向服务器发送一个SYN消息,如果服务器同意建立连接,则响应一个对SYN消息的回应(SYN—ACK),而客户端收到服务器的SYN-ACK以后,再向服务器发送一个ACK消息,当服务器收到此消息以后,一个TCP的连接就告完成。

连接的建立过程如图4。

5所示。

在3次握手进行的过程中,服务器需要保持所有未完成的的握手信息(称为半开连接,即收到TCP—SYN并发送了SYN—ACK,但第3次握手信息(ACK未收到的状态)直到握手完成或超时(不同的系统超时长度的设置不同,一般情况下在75秒左右,如BSD类的系统的超时设置就是75秒[Stevens94],有的系统的超时设置甚至达到10余分钟[packetgram]。

)以后丢弃该信息.由于半开连接的数量是有限的,例如,很多操作系统设置半开连接数的默认值为1024,如果攻击者不停地向受害者发送连接请求,而又不按协议规定完成握手过程,则服务器的半开连接栈可能会用完,从而不再接受其他的连接请求.

图4.5 TCP连接的建立(3次握手协议)

在实际攻击中,攻击者常采用地址伪造的手段,一方面可以掩盖发出攻击的真实地点,从而逃避追踪;另一方面,如果攻击者不伪造地址,在未修改攻击主机TCP协议栈的情况下,其系统会自动对SYN-ACK做出响应,无论是其以ACK回应建立连接还是以RST(即重置,Reset)回应取消连接都会在服务器上释放对应的半开连接(一般情况下,由于没有应用程序要求建立连接,所以攻击者机器可能会返回一个RST信息),从而既影响攻击主机的性能,又由于攻击主机发出的响应使得受害者较早地释放对应的半开连接进而减少占用半开连接的时间,降低攻击效果;如果攻击者将攻击数据包的源IP地址伪造成那些主机不存在或主机没有运行的IP地址,则受害者必须等待超时才能释放相应的半开连接,从而对攻击者而言达到最佳效果。

如图4.6所示为遭受到SYN风暴攻击的机器状态。

注:

锁定一个TCP端口

要锁定一台服务器的某个TCP端口,攻击者不需要一个很快的主机或者网络。

一般标准的TCP的超时是在多次重传而收不到回应时发生,超时设置通常是542秒[Stevens94].假设一台机器的某特定端口允许1

024个半开连接,似乎只需每秒钟发送2个数据包给它就可以了.事实上,不是这样,因为当有新的SYN数据包到来时,现有的某些半开连接会被释放(具体情况根据实现算法的不同而异,例如有的是随机释放,即从现有的半开连接中随机选取进行释放,而有的则是优先释放占用时间最久的那个)以接受新的连接请求。

服务器从发送SYN—ACK到收到客户端的回应之间的这段时间一般称为往返时间(RoundTripTime,简称RTT)。

如果当ACK消息到达服务器时,服务器找不到相应的半开连接,则连接也不会建立。

攻击者可以通过迫使服务器在收到客户端的ACK消息之前释放对应的半开连接,导致用户无法与服务器建立任何连接(当然,在攻击之前已经建立的连接除外),从而彻底“锁死”服务器。

假设服务器是随机释放半开连接的,即以1/N的概率释放,如果攻击者要在平均的往返时间之前重新占用可能的半开连接,则攻击者必须以每秒N/RTT个的频率发送数据包。

对于1024的监听队列,如果往返时间是100毫秒,则需要每秒发送大约10000个数据包。

最小的TCP数据包是64字节,因此,只需要4Mbps的带宽就可以锁死一个上述的服务器。

图4。

6 SYN风暴攻击的原理图

3.TCP连接耗尽攻击

在TCP连接中,操作系统的内核会维持每一个TCP连接的信息。

但如有太多的连接,则需要占用很多的内存和CPU时间。

通过众多的连接耗尽受害者资源的攻击即为连接耗尽攻击。

有的也称之为空连接攻击,因为攻击者建立连接,但是不为发送数据。

一般来说,只要拥有足够的RAM、高速的处理器和适当的比较容易操作的OS,只需简单地使用Telnet之类的程序就可耗尽一个安全性不太强的系统的TCP连接。

不过,采用这种笨拙的方法也会耗费攻击者很多的资源,因此,如此简单的方法不会对受害者构成太大的威胁。

有的攻击程序利用网络API,如BerkeleySockets使得这种攻击更为有效,但这种采用网络API的方式由于在攻击主机上要建立连接,其仍不足以对受害者系统造成严重的危害。

如图4.7所示为连接耗尽攻击示意图。

图4.7 连接耗尽攻击

Naptha[razor][CA—2000—21]则能非常有效地利用TCP连接耗尽。

其有效在于其不是用传统的网络API建立TCP连接,与实际的TCP/IP栈不同,它不保持任何的连接状态信息。

它只根据收到的数据包中的Flag来回答。

当Naptha向受害者发起成千上万的连接后,其给攻击者系统带来较少的资源消耗,但却会耗尽受害者系统的所有资源!

通过这种方式,其可以暴露受害者系统的某些服务甚至TCP/IP栈本身的漏洞。

例如,打上补丁包SP1①的Novell'sNetware5。

0在端口524上建立起3000连接后就会死机.所有的64MBRAM耗尽,CPU使用率也达到100%。

系统在闲置12小时后其连接还没有超时,内存也没有恢复。

FreeBSD

4.0-REL在SSH端口建立495个连接后就无法使用了.每个连接都启用了一个Daemon,最后导致所有可能的文件句柄都用光。

系统报出“打开了太多的文件”的错误。

大约30分钟以后,连接才逐渐超时,系统逐渐恢复可用状态。

与SYN风暴攻击不同,连接耗尽攻击不需要不停地向受害者发起连接,只要连接数达到一定水平以后,攻击者就可以停止,而受害者系统仍不能使用,但在SYN风暴攻击中,一般情况下只要攻击一旦停止,受害者系统就可恢复并继续提供服务。

没有简单有效的方法可以防止Naptha攻击,不过采取适当的措施是有益的,如:

如果你认为你的某个系统尤其是一些公开系统可能遭受Naptha攻击,则限制系统上的服务数,把不必要的服务关闭;通过防火墙控制,使得非授权用户不能连接到开放的TCP端口;在网络边界处实施入口过滤;调节TCP的超时设置和连接保持的时间,使得其在满足实际应用的前提下,适当短些,这样攻击性连接占用资源的时间就可以短些,系统可以较快地从攻击中恢复过来。

如图4。

8所示为又一款名为Form的连接耗尽攻击软件,该软件适合于分布式攻击,即多个攻击者同时向一台服务器发起过多的恶意连接,导致其他的用户无法访问服务器.该软件一个显著的优点就是在发起连接时可以使用代理服务器来隐藏自己,这样,即使受害者发现了恶意攻击的存在,受害者也只能找到代理服务器,而不知道真正的攻击者究竟来自于何方,除非受害者能够访问代理服务器的日志信息或者得到代理服务器的管理员的协助。

但是,用于网络上存在大量的匿名代理服务器,攻击者可以容易地发起攻击而不用担心承担任何责任.同时,即使受害者关闭了来自代理服务器的请求(实际上是攻击者通过代理服务器发出的请求),即过滤代理服务器的访问,由于网络上的代理服务器太多,新的代理服务器也不断建立,受害者总是处于防不胜防的境地.对于单个的攻击点,Form允许最多300个连接.

图4。

8 连接耗尽攻击软件Form

4.UDP风暴攻击

UDP是一无连接的协议,在传输数据之前不需要如TCP那样建立连接。

当一个系统收到一个UDP包时,它会检查何种应用程序在监听该端口,如果有应用程序监听,则把数据交该应用程序处理,如果没有应用程序监听该端口,则回应一个ICMP包说明目标不可达.UDP风暴通常的主要目的是占用网络带宽,达到阻塞网络的目的,因此通常UDP风暴攻击的数据包会比较长.当然,UDP风暴也可以用来攻击终端节点,如果处于网络终端节点的受害者收到的UDP包足够多,则受害者系统可能崩溃。

由于很多的终端节点是不需要定期收到UDP数据包的,因此可以在高带宽的节点,如上游路由器处设置过滤某些UDP数据包以对付UDP风暴。

5.对邮件系统的拒绝服务攻击

(1)邮件炸弹

这种攻击是通过往一个邮件地址或邮件服务器发送大量的相同或不同的邮件,使得该地址或服务器的存储空间塞满而不能提供正常的服务。

(2)垃圾邮件

垃圾邮件是指不请自来的邮件.与通常的工作邮件、私人邮件不同,垃圾邮件一般都是接收者不希望收到的,垃圾通常是有关广告、政治主张等的宣传内容。

垃圾邮件的目的在于宣传,而不是攻击,但由于其不请自来的特征和数量巨大,也常常造成与拒绝服务攻击一样的后果。

6.HTTP风暴攻击

尽管SYN风暴仍是最主要的一种DDoS攻击类型,一些攻击者和攻击软件也开始选用HTTP风暴。

H

TTP风暴有点类似于连接耗尽(对象是Web服务器)攻击,它是用HTTP协议对网页进行的语义上合法的请求。

它与一般的连接耗尽攻击的区别在于,一般的连接耗尽仅是占用连接,不见得有太多的数据传输,而HTTP风暴则不停地从受害者处获取数据,占用连接的同时占用带宽.HTTP是一个提供网页的协议,其通常运行于TCP的80或8080等端口。

在HTTP风暴中,攻击者不停地请求一个网页,使得服务器忙于向攻击者提供网页而无法向其他合法用户提供服务。

进行连接耗尽攻击的一个有效的手段是不停地获取受害者网站上的大的文件,如大的图像文件等.因为大的文件所需要的传送时间长,从而使得一次请求占用系统更多的资源。

2003年10月14日左右,攻击者对W采取的分布式拒绝服务攻击就是HTTP风暴[Cyberslam04],攻击者不停地从W请求一些数据量大的图像文件。

第二天即15日,调查人员分析了W的网站日志,发现有个访问者多次在W网站上搜索大的图像文件并明显地是在进行侦查活动,这些图像文件都是W网站受到HTTP风暴攻击时被请求的文件,审计记录中显示了该访问者的IP地址,后来经调查证实该访问者即是此次攻击的攻击者之一(在历时数天的攻击中,共有数人参与攻击)。

由于HTTP也是基于TCP的,因此也以SYN包达成连接,那么HTTP风暴与SYN风暴又有什么区别呢?

SYN风暴从来不会完成TCP的3次握手连接,这使得SYN风暴相对比较容易检测到,也可以在ISP处进行过滤或者通过SYNCookie、SYNCache代理服务器等进行防御。

为了应对防御者的对策,一些攻击者就选用HTTP风暴,通过傀儡机向目标Web服务器发起合法①的HTTP请求.因此HTTP风暴要完成TCP的连接,然后请求获取目标上的网页文件,这样一来,HTTP风暴与正常的网页访问没有什么区别,受害者难以将其与正常访问区分,也难以对其进行过滤等处理。

要进行HTTP风暴攻击,傀儡机一般不能伪造源地址,虽然攻击者可以通过序列号预测的方法劫持(见2.6。

3

节)其他合法用户与受害者的连接,然后将这些连接用于攻击目的,但是将这种劫持方法用于大规模的攻击是不现实的,因此,HTTP风暴通常都使用的是真实的IP地址。

这使得受害者容易发现傀儡机的所在,导致傀儡机的暴露。

但是,有时候,攻击者也许更加在意于攻击的力度和攻击数据与正常数据的区分难度,从而给受害者造成更大的危害,而使得隐藏傀儡机成为次要的考虑。

4。

2。

3 反射攻击

虽然同为风暴型攻击,与直接风暴型攻击不同,反射攻击多了反射器的反射环节.在这种攻击中,攻击者或其控制下的傀儡机(攻击主机)不是直接向受害者发送攻击数据包,而是向作为第三方的反射器发送特定的数据包,再经由反射器向受害者发送攻击者所希望的回应数据包。

反射攻击利用了反射器根据一个消息生成另一个消息的能力,任何会对数据包作出回应的主机都可以成为反射器,如Web服务器、DNS服务器、路由器等。

1.一般意义的反射攻击

反射攻击的简单示意图如图4。

9所示.

图4.9 反射攻击的简单示意图

当攻击者向反射器发送SYN包时,反射器可能返回SYN—ACK或RST消息。

这时候,攻击者的目的多数是拥塞受害者的网络连接,而非其主机,因为这时候的反射包很容易被受害者区分为非法而丢弃的,因此其占用受害者主机资源相对较少.但是如果受害者的网络具有高带宽而终端系统性能不足时,这种攻击也能使终端系统失去响应.

2002年1月11日凌晨,www.grc。

com遭到的DDoS就是这种分布式反射攻击[Gibson]。

除了ICMPEcho消息外,很多的ICMP错误消息都可以被利用来进行反射攻击。

例如,指向非活动端口的数据包会激起接收主机发送ICMP端口不可达消息。

生存期(TimeTo

Live,简称TTL)很小的数据包由于还没有到达指定的目的地就会使得TTL减为0,从而会激起路由器发送ICMP超时消息。

有的数据包,如DNS递归查询会引起更大数据包如DNS回应包的反射,采用这种数据包来攻击受害者具有一种“放大”的作用.在DNS反射攻击中,攻击者向域名服务器DNS发送大量的基于UDP的域名查询请求,而将源IP地址伪造成受害者的地址,则域名服务器回应的大量的消息会发送到受害者[IN—2000-04]。

一般的反射攻击的网络图如图4。

10所示。

图4.10 一般的反射攻击的网络图

与普通的DDoS攻击相比,分布式反射攻击有如下特征:

(1)攻击者利用了反射器会响应一个消息的要求而自行产生一个回应消息的特征或能力。

(2)凡是支持“自动消息生成”的协议,包括TCP、UDP、各种ICMP消息、应用协议等,都可能被用于反射攻击。

(3)与其他的分布式拒绝服务攻击不同,分布式反射攻击不依赖于系统漏洞,任何系统都可能成为反射攻击的“帮凶”,同时,攻击者无须向其他的DDoS攻击那样,通过攻破、占领傀儡机,然后利用傀儡机进行攻击并以此隐藏自己,在分布式反射攻击中,反射器充分地“掩护”了攻击者的位置。

(4)SYN—ACK消息或者RST消息是攻击者常利用的消息类型,如果攻击者发送TCP—SYN消息给反射器,当反射器的对应端口处在监听状态时,其会反射SYN-ACK消息,否则会反射RST消息。

(5)当使用SYN-ACK进行攻击时,反射器就像SYN风暴攻击的受害者,因为在其上会有半开的TCP连接,只是反射器受到的影响一般不如在直接受到SYN风暴攻击时严重,因为攻击者一般会利用多个反射器,反射器收到的SYN包不会如遭到SYN风暴攻击时那样密集。

反射攻击不仅对受害者终端系统有害,还会拥塞反射器与受害者之间的网络连接,从而对反射器及中间网络带来危害.

2.放大式反射攻击

顾名思义,放大式反射攻击的特点是这里的反射器①不仅有反射功能,还有“放大"功能,每收到一个数据包,这种反射器会向受害者放大式地反射多个数据包(这时候的反射器可以称为反射网,ReflectingNetwork,因为它已经不只一台主机,而是由一个网络构成的)或者每收到一个数据包(可能是比较小的)后反射一个较大的数据包。

前者的典型例子有Smurf和Fraggle,后者的典型例子有基于UDP的DNS请求[IN-2000-04](有的也称为DNS反射)等。

(1)Smurf攻击

之所以称为Smurf攻击,是因为最早使用此类攻击的程序名为Smurf。

在Smurf[CA—1998-01]攻击中,攻击者向网络上的某个或一些IP广播地址发送大量的ICMP回应请求(即Ping)消息,而这些消息中的源IP地址被伪造成受害者的IP地址。

由于多数的网络主机都会监听该广播地址,这些主机每收到指向该地址的一个Ping包以后,就可能会向请求包的源IP地址回应一条ICMP应答消息。

这样一来,攻击者每发送一个数据包,受害者就会收到很多(数量为作出响应的主机数)的回应包,从而占用受害者的计算资源和从反射点(即广播地址指向的网络,也称放大器)到受害者之间的带宽.Smurf攻击如图4.11所示。

下面是由Tfreak编写的Smurf的C源代码(由中科院信息安全国家重点实验室陈恺博士调试通过,调试平台:

RedhatLinux7,内核版本2.4.7—10——笔者注):

#include

#include

h〉

#include〈stdlib.h>

#include〈sys/socket。

h〉

图4。

11 Smurf攻击

#include

#include〈netinet/in。

h>

#include

h>

#include〈netinet/ip_icmp.h〉

#include

#include

#include

#include〈unistd.h>

#include〈string.h>

voidbanner(void);

voidusage(char*);

voidsmurf(int,structsockaddr_in,u_long,int);

voidctrlc(int);

unsignedshortin_chksum(u_short*,int);

/*stamp*/

charid[]="$Idsmurf.c,v4。

01997/10/1113:

02:

42ESTtfreakExp$";

intmain(intargc,char*argv[])

{

  structsockaddr_insin;

  structhostent*he;

  FILE  *bcastfile;

  int   i,sock,bcast,delay,num,pktsize,cycle=0,x;

  char  buf[32],**

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 材料科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1