簡體   English   中英

防御來自TCP SYN Flood的Python套接字

[英]Defend Python socket from TCP SYN flood

我有一個服務器示例,該服務器獲取命令並在python中返回答案:

import socket
import time
import random

CommandDict = {"TIME" : time.strftime("%d-%m-%Y"),"NAME": "Ori","RANDOM": str(random.randint(0,10))}
server_socket = socket.socket()
server_socket.bind(('127.0.0.1',8820))
server_socket.listen(5)

while True:
    print "Waiting for commands"
    (client_socket, client_address) = server_socket.accept()
    client_data = client_socket.recv(1024)
    print "GOT COMMAND FROM " + client_address[0] + " : " + client_data
    try:
        client_socket.send(CommandDict[client_data])
    except Exception:
        client_socket.send("ERROR!")

    client_socket.close()

server_socket.close()

我對它進行了一次Syn Flood攻擊,然后崩潰了。 我想防御同步洪水攻擊,我該怎么辦? 我是套接字編程的新手,所以我很樂意獲得一些建議^ _ ^

首先,您需要一台更好的服務器。 正如@Nikolai N Fetlissov指出的那樣,由於從未關閉客戶端連接,因此您正在泄漏文件描述符。

看這個例子,看看如何避免這種泄漏:

http://ilab.cs.byu.edu/python/socket/echoserver.html

特別是,請注意在哪里進行了client.close()調用以及其縮進級別。

接下來,您的代碼僅處理來自客戶端的一個命令。 在這里看看:

http://code.activestate.com/recipes/578247-basic-threaded-python-tcp-server/

討論編寫一個線程服務器,該服務器可以處理多個連接以及每個連接的多個命令。

最后,基於用戶空間的基於套接字的程序(更是如此,是用解釋語言編寫的)太慢了,無法以任何方式處理真正的SYN泛濫。 標准方法是為此使用防火牆軟件(在一定范圍內使用硬件 )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM