2015-11-16 4 views
1

Я пытаюсь записать файл pcap, как только я отфильтрую весь трафик NBNS. Это дает мне синтаксическую ошибку.Запись в pcap с scapy

from scapy.all import * 

Capture = raw_input("Enter file path of pcap file: ") 
pcap = rdpcap(Capture) 

ports=137 

filtered = (pkt for pkt in Capture if 
    (UDP in pkt and 
    (pkt[UDP].sport in str(ports))) 

wrpcap("filtered.pcap",filtered) 

Я нашел ответ на ошибку синтаксиса был просто отсутствует скобка в конце ...str(ports)))), но теперь у меня есть другая ошибка.

File "receiver2.py", line 18, in <module> 
    wrpcap("filtered.pcap",filtered) 
    File "/usr/lib/python2.7/dist-packages/scapy/utils.py", 
    line 470, in wrpcap 
    PcapWriter(filename, *args, **kargs).write(pkt) 
    File "/usr/lib/python2.7/dist-packages/scapy/utils.py", line 652, in write 
    for p in pkt: 
    File "receiver2.py", line 13, in <genexpr> 
    (UDP in pkt and 
    TypeError: 'in <string>' requires string as left operand, not Packet_metaclass 

ответ

-1

pkt[UDP].sport Обычно должно быть целым числом, а не строкой. str(ports) должен быть заменен только ports.

Я использую scapy v3.x. Если у вас все еще есть проблемы, попробуйте сделать это с помощью scapy 3.x (pip install scapy-python3), и я смогу пройти через вас. Единственное требуемое изменение от python2 до python3, которое я вижу в этом примере кода, заменяет raw_input на вход.

2

Я пробовал свой сценарий, но не мог понять, как это было написано. Я немного изменил его, и я думаю, что он делает то, что вам нужно. Надеюсь это поможет.

from scapy.all import * 

capture = raw_input("Enter file path of pcap file: ") 
pcap = rdpcap(capture) 

ports=137 

def write(pkt): 
    wrpcap('filtered.pcap', pkt, append=True) #appends packet to output file 

for pkt in pcap: 
    if pkt.haslayer(UDP) and pkt.getlayer(UDP).sport == ports: #checks for UDP layer and sport 137 
     write(pkt) #sends the packet to be written if it meets criteria 
    else: 
     pass 
+0

Спасибо! Это помогло мне написать пользовательские пакеты в pcap, как это: 'packet = Ether()/IP (src = src, dst = dst)/TCP (sport = sport, dport = dport, flags = 'A')/payload' (newline) 'wrpcap (out_fname, пакет, append = True)' – Luc