首页 > 解决方案 > 侦听器被可能的恶意数据包ping通。如何防止 IP 访问我的端口?

问题描述

我正在开发套接字级别的服务器客户端服务。我的服务器收到随机数据包的垃圾邮件。我需要一种方法来区分好 IP 和坏 IP,但我不知道所有好的 IP,所以白名单/黑名单不起作用。

服务器管理所有客户端的列表,并通知所有客户端当前的客户端队列。当第一个客户端采取行动时,它会向服务器发送一个肯定的答复,并且服务器会推进队列。扫描传入数据包数据的过滤器可以工作,但我不确定是否有可能捕获所有攻击(普通字母,',','。'和数字必须被绕过,因为这可能是一个有效的客户)。

今天我得到了这个控制台输出(很抱歉格式化和剪切异常,这个非常好的网站认为以下是代码并希望我使用一些我无法解决的任意缩进,所以我只是删除了一些东西直到它没有'不要再认为它是代码了)

收听:4444

连接地址('198.108.67.48', 53556)

我是:\r\n

收听:4444

连接地址:('198.108.67.48', 62346)

我是:GET / HTTP/1.1\r\n主机

听 4444

activeDisps[['198.108.67.48', '\r\n'], ['198.108.67.48', 'GET / HTTP/1.1\r\nHost']]

ValueError: int() 以 10 为底的无效文字:'z\xc2\x00\x00 \xc0/\xc00\xc0+\xc0'

连接地址('198.108.67.48', 7204)

我是\x16\x03\x01\x00\x89\x01\x00\x00\x85\x03\x03\xcf\xef\x1f\xea\xe5\x11\x88\xba\x86

听 4444

activeDisps[['198.108.67.48', '\r\n'], ['198.108.67.48', 'GET / HTTP/1.1\r\nHost'], ['198.108.67.48', '\x16\x03\ x01\x00\x89\x01\x00\x00\x85\x03\x03\xcf\xef\x1f\xea\xe5\x11\x88\xba\x86']]

标签: pythonself-hosting

解决方案


我为我找到了一个可行的解决方案:由于恶意数据包似乎都包含非字母数字字符,我可以对接收到的数据运行模式匹配来确定它是否是有效的客户端:

import re

pattern = re.compile("^([0-9]\*\w+[0-9]\*)+$")

while True:

        clientName=''

        conn, addr = myPorts[0].accept()

        try:

            data = conn.recv(BUFFER_SIZE)

            dataStr=str(data)

            nameStr=dataStr.split("'")[1]

            clientName=nameStr.split(",")[0] #This is my own protocoll, might be different for you

        except:

            print("Connection failed")

        if pattern.match(clientName):

            listeningThread = threading.Thread(target=myListener, args=(conn, [addr[0], clientName]))

            listeningThread.daemon = True

            listeningThread.start()

        else:

            conn.close()

推荐阅读