text: 网络攻击器的原理是什么？是怎么向固定的ip地址发起进攻的？
  常见网络攻击原理 1.1 TCP SYN拒绝服务攻击  一般情况下，一个TCP连接的建立需要经过三次握手的过程，即：  1、 建立发起者向目标计算机发送一个TCP SYN报文；  2、 目标计算机收到这个SYN报文后，在内存中创建TCP连接控制块（TCB），然后向发起者回送一个TCP ACK报文，等待发起者的回应；  3、 发起者收到TCP ACK报文后，再回应一个ACK报文，这样TCP连接就建立起来了。   利用这个过程，一些恶意的攻击者可以进行所谓的TCP SYN拒绝服务攻击：  1、 攻击者向目标计算机发送一个TCP SYN报文；  2、 目标计算机收到这个报文后，建立TCP连接控制结构（TCB），并回应一个ACK，等待发起者的回应；  3、 而发起者则不向目标计算机回应ACK报文，这样导致目标计算机一致处于等待状态。   可以看出，目标计算机如果接收到大量的TCP SYN报文，而没有收到发起者的第三次ACK回应，会一直等待，处于这样尴尬状态的半连接如果很多，则会把目标计算机的资源（TCB控制结构，TCB，一般情况下是有限的）耗尽，而不能响应正常的TCP连接请求。   1.2 ICMP洪水   正常情况下，为了对网络进行诊断，一些诊断程序，比如PING等，会发出ICMP响应请求报文（ICMP ECHO），接收计算机接收到ICMP ECHO后，会回应一个ICMP ECHO Reply报文。而这个过程是需要CPU处理的，有的情况下还可能消耗掉大量的资源，比如处理分片的时候。这样如果攻击者向目标计算机发送大量的ICMP ECHO报文（产生ICMP洪水），则目标计算机会忙于处理这些ECHO报文，而无法继续处理其它的网络数据报文，这也是一种拒绝服务攻击（DOS）。   1.3 UDP洪水   原理与ICMP洪水类似，攻击者通过发送大量的UDP报文给目标计算机，导致目标计算机忙于处理这些UDP报文而无法继续处理正常的报文。 1.4 端口扫描   根据TCP协议规范，当一台计算机收到一个TCP连接建立请求报文（TCP SYN）的时候，做这样的处理：   1、 如果请求的TCP端口是开放的，则回应一个TCP ACK报文，并建立TCP连接控制结构（TCB）；   2、 如果请求的TCP端口没有开放，则回应一个TCP RST（TCP头部中的RST标志设为1）报文，告诉发起计算机，该端口没有开放。   相应地，如果IP协议栈收到一个UDP报文，做如下处理：   1、 如果该报文的目标端口开放，则把该UDP报文送上层协议（UDP）处理，不回应任何报文（上层协议根据处理结果而回应的报文例外）；   2、 如果该报文的目标端口没有开放，则向发起者回应一个ICMP不可达报文，告诉发起者计算机该UDP报文的端口不可达。   利用这个原理，攻击者计算机便可以通过发送合适的报文，判断目标计算机哪些TCP或UDP端口是开放的，过程如下：   1、 发出端口号从0开始依次递增的TCP SYN或UDP报文（端口号是一个16比特的数字，这样最大为65535，数量很有限）；   2、 如果收到了针对这个TCP报文的RST报文，或针对这个UDP报文的ICMP不可达报文，则说明这个端口没有开放；   3、 相反，如果收到了针对这个TCP SYN报文的ACK报文，或者没有接收到任何针对该UDP报文的ICMP报文，则说明该TCP端口是开放的，UDP端口可能开放（因为有的实现中可能不回应ICMP不可达报文，即使该UDP端口没有开放）。   这样继续下去，便可以很容易的判断出目标计算机开放了哪些TCP或UDP端口，然后针对端口的具体数字，进行下一步攻击，这就是所谓的端口扫描攻击。   1.5 分片IP报文攻击   为了传送一个大的IP报文，IP协议栈需要根据链路接口的MTU对该IP报文进行分片，通过填充适当的IP头中的分片指示字段，接收计算机可以很容易的把这些IP分片报文组装起来。   目标计算机在处理这些分片报文的时候，会把先到的分片报文缓存起来，然后一直等待后续的分片报文，这个过程会消耗掉一部分内存，以及一些IP协议栈的数据结构。如果攻击者给目标计算机只发送一片分片报文，而不发送所有的分片报文，这样攻击者计算机便会一直等待（直到一个内部计时器到时），如果攻击者发送了大量的分片报文，就会消耗掉目标计算机的资源，而导致不能相应正常的IP报文，这也是一种DOS攻击。 1.6 SYN比特和FIN比特同时设置   在TCP报文的报头中，有几个标志字段：   1、 SYN：连接建立标志，TCP SYN报文就是把这个标志设置为1，来请求建立连接；   2、 ACK：回应标志，在一个TCP连接中，除了第一个报文（TCP SYN）外，所有报文都设置该字段，作为对上一个报文的相应；   3、 FIN：结束标志，当一台计算机接收到一个设置了FIN标志的TCP报文后，会拆除这个TCP连接；   4、 RST：复位标志，当IP协议栈接收到一个目标端口不存在的TCP报文的时候，会回应一个RST标志设置的报文；   5、 PSH：通知协议栈尽快把TCP数据提交给上层程序处理。   正常情况下，SYN标志（连接请求标志）和FIN标志（连接拆除标志）是不能同时出现在一个TCP报文中的。而且RFC也没有规定IP协议栈如何处理这样的畸形报文，因此，各个操作系统的协议栈在收到这样的报文后的处理方式也不同，攻击者就可以利用这个特征，通过发送SYN和FIN同时设置的报文，来判断操作系统的类型，然后针对该操作系统，进行进一步的攻击。   1.7 没有设置任何标志的TCP报文攻击   正常情况下，任何TCP报文都会设置SYN，FIN，ACK，RST，PSH五个标志中的至少一个标志，第一个TCP报文（TCP连接请求报文）设置SYN标志，后续报文都设置ACK标志。有的协议栈基于这样的假设，没有针对不设置任何标志的TCP报文的处理过程，因此，这样的协议栈如果收到了这样的报文，可能会崩溃。攻击者利用了这个特点，对目标计算机进行攻击。   1.8 设置了FIN标志却没有设置ACK标志的TCP报文攻击   正常情况下，ACK标志在除了第一个报文（SYN报文）外，所有的报文都设置，包括TCP连接拆除报文（FIN标志设置的报文）。但有的攻击者却可能向目标计算机发送设置了FIN标志却没有设置ACK标志的TCP报文，这样可能导致目标计算机崩溃。   1.9 死亡之PING   TCP/IP规范要求IP报文的长度在一定范围内（比如，0－64K），但有的攻击计算机可能向目标计算机发出大于64K长度的PING报文，导致目标计算机IP协议栈崩溃。 1.10 地址猜测攻击   跟端口扫描攻击类似，攻击者通过发送目标地址变化的大量的ICMP ECHO报文，来判断目标计算机是否存在。如果收到了对应的ECMP ECHO REPLY报文，则说明目标计算机是存在的，便可以针对该计算机进行下一步的攻击。   1.11 泪滴攻击   对于一些大的IP包，需要对其进行分片传送，这是为了迎合链路层的MTU（最大传输单元）的要求。比如，一个4500字节的IP包，在MTU为1500的链路上传输的时候，就需要分成三个IP包。   在IP报头中有一个偏移字段和一个分片标志（MF），如果MF标志设置为1，则表面这个IP包是一个大IP包的片断，其中偏移字段指出了这个片断在整个IP包中的位置。例如，对一个4500字节的IP包进行分片（MTU为1500），则三个片断中偏移字段的值依次为：0，1500，3000。这样接收端就可以根据这些信息成功的组装该IP包。   如果一个攻击者打破这种正常情况，把偏移字段设置成不正确的值，即可能出现重合或断开的情况，就可能导致目标操作系统崩溃。比如，把上述偏移设置为0，1300，3000。这就是所谓的泪滴攻击。   1.12 带源路由选项的IP报文   为了实现一些附加功能，IP协议规范在IP报头中增加了选项字段，这个字段可以有选择的携带一些数据，以指明中间设备（路由器）或最终目标计算机对这些IP报文进行额外的处理。   源路由选项便是其中一个，从名字中就可以看出，源路由选项的目的，是指导中间设备（路由器）如何转发该数据报文的，即明确指明了报文的传输路径。比如，让一个IP报文明确的经过三台路由器R1，R2，R3，则可以在源路由选项中明确指明这三个路由器的接口地址，这样不论三台路由器上的路由表如何，这个IP报文就会依次经过R1，R2，R3。而且这些带源路由选项的IP报文在传输的过程中，其源地址不断改变，目标地址也不断改变，因此，通过合适的设置源路由选项，攻击者便可以伪造一些合法的IP地址，而蒙混进入网络。   1.13 带记录路由选项的IP报文   记录路由选项也是一个IP选项，携带了该选项的IP报文，每经过一台路由器，该路由器便把自己的接口地址填在选项字段里面。这样这些报文在到达目的地的时候，选项数据里面便记录了该报文经过的整个路径。   通过这样的报文可以很容易的判断该报文经过的路径，从而使攻击者可以很容易的寻找其中的攻击弱点。   1.14 未知协议字段的IP报文   在IP报文头中，有一个协议字段，这个字段指明了该IP报文承载了何种协议 ，比如，如果该字段值为1，则表明该IP报文承载了ICMP报文，如果为6，则是TCP，等等。目前情况下，已经分配的该字段的值都是小于100的，因此，一个带大于100的协议字段的IP报文，可能就是不合法的，这样的报文可能对一些计算机操作系统的协议栈进行破坏。 1.15 IP地址欺骗   一般情况下，路由器在转发报文的时候，只根据报文的目的地址查路由表，而不管报文的源地址是什么，因此，这样就 可能面临一种危险：如果一个攻击者向一台目标计算机发出一个报文，而把报文的源地址填写为第三方的一个IP地址，这样这个报文在到达目标计算机后，目标计算机便可能向毫无知觉的第三方计算机回应。这便是所谓的IP地址欺骗攻击。   比较著名的SQL Server蠕虫病毒，就是采用了这种原理。该病毒（可以理解为一个攻击者）向一台运行SQL Server解析服务的服务器发送一个解析服务的UDP报文，该报文的源地址填写为另外一台运行SQL Server解析程序（SQL Server 2000以后版本）的服务器，这样由于SQL Server 解析服务的一个漏洞，就可能使得该UDP报文在这两台服务器之间往复，最终导致服务器或网络瘫痪。   1.16 WinNuke攻击   NetBIOS作为一种基本的网络资源访问接口，广泛的应用于文件共享，打印共享，进程间通信（IPC），以及不同操作系统之间的数据交换。一般情况下，NetBIOS是运行在LLC2链路协议之上的，是一种基于组播的网络访问接口。为了在TCP/IP协议栈上实现NetBIOS，RFC规定了一系列交互标准，以及几个常用的TCP/UDP端口：   139：NetBIOS会话服务的TCP端口；   137：NetBIOS名字服务的UDP端口；   136：NetBIOS数据报服务的UDP端口。   WINDOWS操作系统的早期版本（WIN95/98/NT）的网络服务（文件共享等）都是建立在NetBIOS之上的，因此，这些操作系统都开放了139端口（最新版本的WINDOWS 2000/XP/2003等，为了兼容，也实现了NetBIOS over TCP/IP功能，开放了139端口）。   WinNuke攻击就是利用了WINDOWS操作系统的一个漏洞，向这个139端口发送一些携带TCP带外（OOB）数据报文，但这些攻击报文与正常携带OOB数据报文不同的是，其指针字段与数据的实际位置不符，即存在重合，这样WINDOWS操作系统在处理这些数据的时候，就会崩溃。   1.17 Land攻击   LAND攻击利用了TCP连接建立的三次握手过程，通过向一个目标计算机发送一个TCP SYN报文（连接建立请求报文）而完成对目标计算机的攻击。与正常的TCP SYN报文不同的是，LAND攻击报文的源IP地址和目的IP地址是相同的，都是目标计算机的IP地址。这样目标计算机接收到这个SYN报文后，就会向该报文的源地址发送一个ACK报文，并建立一个TCP连接控制结构（TCB），而该报文的源地址就是自己，因此，这个ACK报文就发给了自己。这样如果攻击者发送了足够多的SYN报文，则目标计算机的TCB可能会耗尽，最终不能正常服务。这也是一种DOS攻击。