2016-10-03 106 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)