【发布时间】:2014-01-24 09:33:15
【问题描述】:
背景 我正在使用 scapy 编写 Windows 操作系统检测脚本。虽然我可以使用 p0f、nmap 和 SMB 脚本等其他工具,但这部分功能只是整体的一小部分,所以我致力于 scapy 路线。
问题 作为 scapy 的新手,我在找出使用 SMB 解码器的最佳实践时遇到了一些麻烦。到目前为止,我有:
def disp(pkt):
print(pkt.getlayer(IP).src)
if pkt.haslayer(Raw):
print(SMBSession_Setup_AndX_Request(pkt.getlayer(Raw).load).NativeOS)
foo=sniff(prn=disp,filter="port 445",count=10)
如您所见,我只是通过 SMBSession_Setup_AndX_Request() 类填充“原始”层,希望它会使用“原始”有效负载做正确的事情。
这似乎是功能性的,但返回“Windows 4.0”的 NativeOS 属性的“默认”类设置(嗯,它在我的 scapy 的 smb.py 版本上),有时会将我视为堆栈跟踪,取决于Mac是否在网络上,做CIFS。我盲目地假设我可以抓住 NativeOS 并完成它,这肯定是错误的。
问题 如果我的方法完全错误,那么使用 scapy 的 sniff() 方法进行自定义协议解码的正确方法是什么?
非常感谢您的建议,
sc.
【问题讨论】: