2016-10-03 1 views
0

Я новичок в использовании вызовов подпроцесса. Пожалуйста, помогите мне в выяснении проблемы в следующем сценарии.Имя файла Слишком длинная ошибка при чтении файла pcap с использованием subprocess.call

Я пытаюсь написать новый файл PCAP (filter1.pcap), который будет содержать только пакеты с определенного IP-адреса (ipadd) из большого набора пакетов из различных IP-адресов, содержащихся в файле больше PCAP (superset.pcap)

ошибка: OSError: [Errno 36] имя файла слишком длинное

код выглядит следующим образом:

from subprocess import * 
pcapfile = rdpcap("superset.pcap") 
ipadd = "192.168.1.1"    
fileout = "filter1.pcap"   
command = "sudo tcpdump -w %s -r %s src %s" %(fileout,pcapfile,ipadd) 
subprocess.call([command]) 

BTW команда ниже в Linux работает отлично:

sudo tcpdump -w filter1.pcap -r superset.pcap src 192.168.1.1 

Любая помощь будет большой!

Спасибо, CKS

+0

Попробуйте изменить pcapfile = rdpcap («superset.pcap») в PCAP = «superset.pcap» Похоже, вы открываете файл с scapy первым, а затем подачу выходного сигнала к ТСРйитр, который подведет , –

+0

Спасибо, Джефф. Да, это была проблема! – CKS3976

ответ

0

Это решается .. Был логическая ошибка здесь. Я читал полный файл PCAP с помощью rdpcap и передавал значение tcpdump. Таким образом, tcpdump читал полный файл в качестве имени файла.

Я изменил код, как показано ниже, и теперь он работает!

import os.path 
pcapfile = "superset.pcap" 
ipadd = "192.168.1.1"   
fileout = "filter1.pcap"   
command = "sudo tcpdump -w %s -r %s src %s" %(fileout,pcapfile,ipadd) 
os.system(command) 
Смежные вопросы