背景
昨天,在开发onvif蜜罐的过程中,发现针对3702端口的扫描行为,payload并不是十分规矩,蜜罐收到部分扫描的数据包后,会出现崩溃的情况。排查发现传入的扫描数据为:b'<\xaa>\x00'.decode()
,报错信息为:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xaa in position 1: invalid start byte
。
回忆之前做MQTT蜜罐时遇到的十六进制数据解码出错的问题,立刻想到了,网络中对蜜罐的扫描行为,不仅有ascii的编码方式,也存在十六进制的扫描方式。蜜罐需要做的是,尽量减少报错和崩溃,记录下尽可能多的信息。
TODO
其实,TCP和UDP类型的蜜罐在解码过程中,最好使用try
做好解码的错误控制,完全就可以避免这种问题产生。
try:
onvif_info_dict["data"] = data.decode("ascii")
except UnicodeDecodeError:
onvif_info_dict["data"] = ''.join(['%02X ' % b for b in data])