2016-10-03 48 views
0

我是使用子進程調用的新手。請幫助我找出以下腳本中的問題..文件名使用subprocess.call讀取pcap文件時出現太長錯誤

我正在嘗試編寫一個新的PCAP文件(filter1.pcap),該文件只包含來自大組數據包中特定IP地址(ipadd)的數據包從包含在一個更大的PCAP文件(superset.pcap)各個IP地址

的錯誤是:OSERROR:[錯誤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]) 

順便說一句在Linux下面的命令工作得很好:

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

任何幫助將是偉大的!

謝謝 中正

+0

嘗試改變pcapfile = rdpcap(「superset.pcap」),以PCAP =「superset.pcap」看起來你和Scapy的第一個打開的文件,然後送入輸出tcpdump的,這將失敗。 –

+0

謝謝傑夫。是的,這是問題! – CKS3976

回答

0

這解決了。還有這裏是一個邏輯上的錯誤。我正在使用rdpcap讀取完整的PCAP文件並將值傳遞給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)