侦听器可能会收到恶意数据包。如何防止IP访问我的端口?

时间:2019-02-16 18:24:08

标签: python self-hosting

我正在开发套接字级别的服务器-客户端服务。我的服务器被随机数据包淹没。我需要一种区分好IP和坏IP的方法,但是我不知道所有好的IP,因此白名单/黑名单不起作用。

服务器管理所有客户端的列表,并将当前客户端队列通知所有客户端。当第一个客户端采取行动后,它将向服务器发送肯定答复,并且服务器将前进队列。可以扫描传入数据包数据的过滤器可以工作,但是我不确定是否可以捕获所有攻击(仅使用常规字母,“,”,“。”和数字,因为可能是有效的客户)。

今天我得到了这个控制台输出(对不起格式设置,并削减了异常,这个非常不错的网站认为以下是代码,希望我使用一些我无法解决的任意缩进,所以我只是删除了一些东西,直到它不再认为它是代码了

收听:4444

连接地址('198.108.67.48',53556)

我是:\ r \ n

收听:4444

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

我是:GET / HTTP / 1.1 \ r \ nHost

听4444

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

ValueError:以10为底的int()无效文字:'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']]

1 个答案:

答案 0 :(得分:1)

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

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()