2017-02-21 7 views
0

Я хочу проанализировать TCP-пакеты с помощью scapy. И я использую pkt.sprintf ('% Raw.load%') для извлечения tcp-данных. Но выходная строка имеет что-то неправильное с длиной. но «\» считается str, а не Escaped character.so '\ x11' рассматривается как 4 разные строки вместо символа ASCII.Является ли вывод scapy.sprintf исходной строкой? Почему длина неправильная?

Вот мои коды:

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

Длина данных каждого ТСР должен быть 17 вместо значения в экране (53,52,46,52). 4 TCP данные:

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

Пожалуйста, помогите мне решить problem.Thank вас!

ответ

0

Я вижу. Мне нужна функция для преобразования rawstring в строку. поэтому я добавить коды после того, как линии 3 (сырой = pkt.sprintf ("% Raw.load%")), как:

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

то выход правильно