我有点像 Python 新手,但我已经开始了一个小型个人项目来自学更多知识。基本上,我正在使用套接字和 impacket 编写一个数据包嗅探器。但是,我遇到的一个特殊点是:将标头和数据包的输出组合到一个变量中(我在想一本字典,但它不喜欢那样...),这样我就可以简单地搜索一个特定的部分源 IP(即前两个八位字节)的 IP 标头。或者会有更有效的方法来处理这个问题吗?任何帮助表示赞赏。:-)
编辑:当我尝试字典时,我正在做
ip_dict = { header: packet }
但是,我得到的输出类似于:
{<impacket.ImpactPacket.IP instance at 0x02563440>: <impacket.ImpactPacket.Data instance at 0x02563530>}
与所述IP头和数据的实际输出相反。
HOST = socket.gethostbyname(socket.gethostname())
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
s.bind((HOST, 0))
while True:
# Include IP headers
s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
# receive all packages
s.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)
# receive a packet
packet = s.recvfrom(42028)[0]
# look at IP info
h_decode = ImpactDecoder.IPDecoder()
header = h_decode.decode(packet)
# disabled promiscuous mode
s.ioctl(socket.SIO_RCVALL, socket.RCVALL_OFF)
decoder = ImpactDecoder.DataDecoder()
packet = decoder.decode(packet)
print header
print packet
time.sleep(1)