从TCP SYN flood防御Python套接字

2024-09-29 07:35:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个服务器的例子,它用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攻击,结果它崩溃了。 我想保护它免受syn flood攻击,我该怎么做呢? 我是套接字编程新手,所以我很乐意得到一些建议


Tags: import服务器clientsendclosedataservertime
1条回答
网友
1楼 · 发布于 2024-09-29 07:35:45

首先你需要一个更好的服务器。正如@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 flow。标准的方法是使用防火墙软件(在一定的裕度之后,硬件)。在

相关问题 更多 >