python - 侦听器被可能的恶意数据包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']]
解决方案
我为我找到了一个可行的解决方案:由于恶意数据包似乎都包含非字母数字字符,我可以对接收到的数据运行模式匹配来确定它是否是有效的客户端:
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()
推荐阅读
- ruby-on-rails - Rails 从逗号分隔的表单参数创建多个记录
- python-3.x - 无法将“Hello world”编译为 .exe 文件
- python - 为什么在更改其值时通过函数中的索引访问列表项有效,但迭代器变量方式却不行?
- c# - MSBuild.exe 给出有关 Nuget 包冲突的错误,这是什么意思?
- mongodb - 如何解决mongodb突然关闭的问题
- json - 使用 circe 在 Scala 中 JSON 将嵌套字段解码为 Map[String, String]
- python-3.x - 如何从以特定单词python3开头的文件中删除行
- python - 使用 discord.py 管理权限
- browser - 标题:无法访问此站点
- javascript - Angular/Typescript - 收到循环依赖的警告