scapy.sprintf的输出是原始字符串吗?为什么长度错误?

时间:2017-02-21 14:45:45

标签: python scapy

我想通过scapy分析TCP数据包。我使用pkt.sprintf('%Raw.load%')来提取tcp数据。但是输出字符串的长度有问题。但'\'被认为是str而不是Escaped字符。所以'\ x11'被认为是4个不同的字符串而不是ASCII字符。

以下是我的代码:

from scapy.all import *
def findTCPdata(pkt):
    raw = pkt.sprintf("%Raw.load%")
    print raw
    print 'length of TCP data: '+ str(len(raw))
def main():
    pkts = rdpcap('XXX.pcap')
    for pkt in pkts:
        findTCPdata(pkt)
if __name__ == '__main__':
    main()

enter image description here

每个tcp数据的长度应为17而不是屏幕中的值(53,52,46,52)。 4个tcp数据是:

'U\x11\x04\x92\x02\x03\x1e\x03@\x03\xf8q=e\xcb\x15\r'
'U\x11\x04\x92\x02\x03.\x03@\x03\xf8q=e\xcb\xb8\x05'
'U\x11\x04\x92\x02\x03X\x03@\x03\xf8q=e\xcbiO'
'U\x11\x04\x92\x02\x03n\x03@\x03\xf8q=e\xcb\xdb\xe3'

请帮我解决问题。谢谢!

1 个答案:

答案 0 :(得分:0)

我明白了。我需要一个函数将rawstring转换为字符串。 所以我在第3行之后添加代码(raw = pkt.sprintf(“%Raw.load%”)),如:

raw = raw.replace('\'','')
string = raw.decode('string_escape')

然后输出正确