我可以使用操作系统. 它正在将pcap文件写入文本。你知道吗
os.system("tshark -z 'proto,colinfo,tcp.srcport,tcp.srcport' -r filename.pcap > testfile")
但是,当我尝试从termimal提供输入文件时,出现以下错误: tshark:-z无效参数
host = raw_input("Enter file name: ")
test = subprocess.Popen(["tshark","-z","'proto,colinfo,tcp.srcport,tcp.srcport'","-r",host,">","testfile"], stdout=subprocess.PIPE)
output = test.communicate()[0]
有人能找出我犯的错误吗?你知道吗
要模拟
os.system
命令,请使用shell=True
参数subprocess.Popen
并提供相同的命令字符串(不是字符串数组):您需要一个shell来解释命令行,因为您正在使用文件的输出重定向(“>;testfile”)。你知道吗
在您的示例中,您将字符串列表的每个元素传递给execve()系统调用,并将其作为参数传递给
tshark
命令(该命令将'proto,colinfo,tcp.srcport,tcp.srcport'
作为-z
选项的参数,而不是proto,colinfo,tcp.srcport,tcp.srcport
,并且它不知道如何处理>
和testfile
参数)。你知道吗正如wnnmaw在他的评论中指出的,使用
os.system
或subprocess.Popen
和shell=True
以及从用户输入构建的命令行(在您的例子中是host
变量)允许用户向shell传递任意数据。这可用于在系统上执行(可能是讨厌的)命令。你知道吗例如,将示例中的
host
设置为; /bin/rm -rf /
将删除UNIX系统上的每个文件(假设运行进程的用户有足够的权限)。你知道吗因此,在将用户输入添加到命令字符串之前验证它是非常重要的。你知道吗
相关问题 更多 >
编程相关推荐