從TCP狀態機判斷DDOS攻擊html
TCP 協議是傳送層的核心協議,提供了可靠面向鏈接的協議,分爲三次握手和四次斷開,在這個過程當中TCP有個狀態機,記錄不一樣階段的狀態。java
這裏不着重介紹三次握手和四次斷開,只是附加一個圖解,這部分詳細內容你們自行腦補:參考連接:https://blog.csdn.net/qzcsu/article/details/72861891 web
2.1 握手協議: 服務器
2.2 斷開過程 網絡
在協議創建和斷開過程,tcp協議一直要維護一個狀態,咱們稱爲tcp的狀態機。具體狀況見下圖: tcp
3.1 握手過程狀態 .net
爲了方便理解,簡單舉個例子,某飯店8點以前是未開業,關門狀態(closed 狀態),八點以後開門營業,等待客人關顧(listen狀態),客戶進店點菜(SYS_SEND),老闆收到並確認(SYS_RCVD), 客戶說沒錯能夠上菜,而後雙方進入(Established)狀態。 htm
3.2 斷開過程狀態 blog
形象理解爲:客人吃飯要離開,喊老闆結帳(fin wait1), 老闆說你等一下我找你錢(closeing),客戶收到檢查是否正確(fin wait2),確認無誤而後彼此斷開(closed)排序
DDOS網絡攻擊的方式不少,有應用層ddos也有網絡層的,本文只討論網絡層造成的ddos攻擊類型,上文咱們講述狀態機,就很是好理解了,大量的半打開的連接,佔用了大量的網絡帶寬,從而達到了DOS的目的。
4.1 半打開
發生在TCP3次握手中。
若是A向B發起TCP請求,B也按照正常狀況進行響應了,可是A不進行第3次握手,這就是半鏈接
4.2半關閉
當一方關閉發送通道後,仍可接受另外一方發送過來的數據,這樣的狀況叫「半關閉」。(拆除TCP鏈接是:你關閉你的發送通道,我關閉個人發送通道)。
netstat -na
顯示全部鏈接到服務器的活躍的網絡鏈接
netstat -an | grep :80 | sort
只顯示鏈接到80段口的活躍的網絡鏈接,80是http端口,這對於web服務器很是有用,而且對結果排序.對於你從許多的鏈接中找出單個發動洪水攻擊IP很是有用
netstat -n -p|grep SYN_REC | wc -l
這個命令對於在服務器上找出活躍的SYNC_REC很是有用,數量應該很低,最好少於5.
在dos攻擊和郵件炸彈,這個數字可能很是高.然而值一般依賴於系統,因此高的值可能平分給另外的服務器.
netstat -n -p | grep SYN_REC | sort -u
列出全部包含的IP地址而不單單是計數.
netstat -n -p | grep SYN_REC | awk '{print $5}' | awk -F: '{print $1}'
列出全部不一樣的IP地址節點發送SYN_REC的鏈接狀態
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
使用netstat命令來計算每一個IP地址對服務器的鏈接數量
netstat -anp |grep 'tcp|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
列出使用tcp和udp鏈接到服務器的數目
netstat -ntu | grep ESTAB | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
檢查ESTABLISHED鏈接而不是全部鏈接,這能夠每一個ip的鏈接數
netstat -plan|grep :80|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1
顯示而且列出鏈接到80端口IP地址和鏈接數.80被用來做爲HTTP