我在处理原始数据时遇到了麻烦。我正在尝试更改我的 ISAKMP 标头中的 resp_cookie,当我对数据包进行嗅探时,它全部采用原始数据格式Raw Load='\x00\x43\x01........... '
,大约有 3 行这样的行。当我进行 Wireshark 捕获时,我看到了我想要更改的信息,但我似乎无法找到一种方法来转换和更改原始数据以查找和替换我正在寻找的信息。另外,当我执行 a 时,我可以看到我需要的信息hexdump()
,但我无法将其存储在变量中。当我键入时i = hexdump(pkt)
,它会吐出 hexdump 但不会将 hexdump 存储在i
.
问问题
8522 次
1 回答
0
所以这篇文章有点老了,但我已经遇到了十几次,试图找到我遇到的类似问题的答案。我怀疑 OP 不再需要答案了,但是如果其他人想做类似的事情……给你!
我在谷歌深处的某个地方找到了以下代码片段,它适用于我的情况。
Scapy的Hexdump()、show()等方法只是将数据包输出到终端/控制台;它们实际上并不返回字符串或任何其他类型的对象。因此,您需要一种方法来拦截它打算写入的数据并将其放入要操作的变量中。
注意:这是 Python 3.X 和 SCAPY 3K
import io
import scapy
#generic scapy sniff
sniff(iface=interface,prn=parsePacket, filter=filter)
使用上述嗅探方法,您将要执行以下操作。
def parsePacket(packet):
outputPacket = ''
#setup
qsave = sys.stdout
q = io.StringIO()
#CAPTURES OUTPUT
sys.stdout = q
#Text you're capturing
packet.show()
#restore original stdout
sys.stdout = qsave
#release output
sout = q.getvalue()
#Add to string (format if need be)
outputPacket += sout + '\n'
#Close IOStream
q.close()
#return your packet
return outputPacket
您返回的字符串 (outputPacket) 现在可以按照您的意愿进行操作。
将 .show() 替换为您认为合适的任何功能。
PS如果从Pythonic的角度来看这有点粗略,请原谅我......无论如何都不是python开发人员。
于 2017-06-09T18:11:43.823 回答