2013-09-09 3 views
3

У меня возникают проблемы с использованием необработанных данных. Я пытаюсь изменить вокругresp_cookie в моем заголовке ISAKMP, и когда я делаю sniff в пакете, все это в формате необработанных данных под Raw Load='\x00\x43\x01........... ' примерно с тремя строками. Когда я делаю захват Wireshark, я вижу информацию, которую хочу изменить, но я не могу найти способ конвертировать и изменять эти необработанные данные, чтобы найти и заменить информацию, которую я ищу. Кроме того, я могу видеть информацию, которая мне нужна, когда я делаю hexdump(), но я не могу сохранить это в переменной. когда я набираю i = hexdump(pkt), он выплескивает hexdump, но не сохраняет hexdump в i.Обработка необработанных данных Scapy

+0

Добро пожаловать в StackOverflow. Обязательно прочитайте [About] (http://stackoverflow.com/about) и получите свой первый значок! Вы также узнаете больше о задании твердых вопросов. – RyPeck

ответ

0

Так что этот пост немного старый, но я столкнулся с ним дюжину или около того, пытаясь найти ответ на аналогичную проблему, которую я испытываю. Я сомневаюсь, что у OP больше нет необходимости в ответе, но если кто-то еще хочет сделать что-то подобное ... здесь вы идете!

Я нашел следующий фрагмент кода где-то в глубоких, темных глубинах Google, и это сработало для моей ситуации.

Hexdump(), show() и другие методы Scapy просто выводят пакет на терминал/консоль; они фактически не возвращают строку или какой-либо другой вид объекта. Таким образом, вам нужен способ перехвата данных, которые он намеревается написать, и поместить их в переменную, которой нужно манипулировать.

ПРИМЕЧАНИЕ: ЭТО ПИТОН 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() с любой функцией, которую вы сочтете нужным.

P.S. Простите меня, если это немного грубо с точки зрения Pythonic ... не python dev на любом участке.

+0

Здравствуйте, если вы используете python 3, вы должны указать, что вы usnig scapy3k – Cukic0d

+0

Woops. Понятно, что это было бы для версии Scapy, которая работает с Python 3. – CanBeNull

Смежные вопросы