2015-03-08 4 views
1

Я пишу программу, которая включает в себя scapy, и я пытаюсь обнюхать все пакеты и искать определенное ключевое слово в каждом пакете (например, «TCP»)Фильтрация информации scapy пакетов Python

Вот код, который обнюхивает все пакеты:

def pkt_callback(pkt): 
    pkt.show() 

sniff(iface = 'eth0', prn = lambda x : x.show()) 

а вот код пытается представить только TCP-пакеты

from scapy.all import * 
global my_raw 
my_raw = "tcp" 

def pkt_callback(pkt): 
    global my_raw 
    if my_raw in pkt: 
     pkt.show() 

sniff(iface='eth0', filter="", prn=lambda x: x.show()) 
print sniff 
+0

Вы хотите представить только пакеты, которые включают в себя TCP слой? Если да, то работает ли это, если вы используете верхний регистр «TCP» вместо строчного «tcp» и устанавливаете 'prn = pkt_callback'? – Yoel

ответ

0

Прежде всего создать переменную и врезке значение, которое вы хотите отфильтровать, , затем используйте опцию python x in y, чтобы проверить, содержит ли пакет то, что вы фильтруете.

from scapy.all import * 
global my_keyword 
my_keyword = TCP 


def pkt_callback(pkt): 
    global my_keyword 
    if my_keyword in pkt: 
     pkt.show() 
     print "recognized TCP packet" 

    else: 
     pkt.show() 
     print "This packet is not TCP" 

sniff(iface='eth0', filter="", prn=pkt_callback) 
0

Вы можете использовать метод haslayer()

def pkt_callback(pkt): 
    if pkt.haslayer(TCP): 
     pkt.show() 

sniff(iface = 'eth0', prn = lambda x : x.show()) 
Смежные вопросы