Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python scapy.sprintf的输出是原始字符串吗?为什么长度错误?_Python_Scapy - Fatal编程技术网

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

Python scapy.sprintf的输出是原始字符串吗?为什么长度错误?,python,scapy,Python,Scapy,我想用scapy分析TCP数据包。我使用pkt.sprintf(“%Raw.load%”)来提取tcp数据。但是输出字符串的长度有问题。但是“\”被视为str而不是转义字符。因此“\x11”被视为4个不同的字符串而不是ASCII字符 这是我的密码: from scapy.all import * def findTCPdata(pkt): raw = pkt.sprintf("%Raw.load%") print raw print 'length of TCP data

我想用scapy分析TCP数据包。我使用pkt.sprintf(“%Raw.load%”)来提取tcp数据。但是输出字符串的长度有问题。但是“\”被视为str而不是转义字符。因此“\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()

每个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'

请帮我解决这个问题。谢谢

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

那么输出是正确的

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