2

当我用这个执行python脚本时:

tsharkCall = ["tshark", "-a", "duration:6", "-i", "2", "-w", "thsark.pcap"]
tsharkProc = subprocess.Popen(tsharkCall, bufsize=0, executable="C:\\Program Files\\Wireshark\\tshark.exe")

具有预期内容的 pcap 文件与脚本正式出现在同一文件夹中。

从 pcap 创建文本文件的第二个过程不起作用:

tsharkCall = ["tshark", "-i", "-", "<", "tshark.pcap", ">", "tshark.txt", "-V"]
tsharkProc = subprocess.Popen(tsharkCall, bufsize=0, executable="C:\\Program Files\\Wireshark\\tshark.exe")

我在 cmd 窗口中看到“Capturing on Standard input”,但没有“捕获 x 数据包”,并且文件夹中没有出现 tshark.txt 文件。

在同一位置的命令提示符下,这可以完成我希望从脚本中完成的工作:

>"C:\Program Files\Wireshark\tshark.exe" -i - < "tshark.pcap" > "tshark.txt" -V

一个电话有效而另一个电话无效,这似乎很奇怪。关于我缺少什么的任何想法?

4

2 回答 2

2

subprocess.Popen默认绕过CMD.EXE/ sh,因此命令行 I/O 重定向 ( <, >) 将不起作用。你可以得到类似这样的效果:

tsharkCall = ["tshark", "-i", "-", "-V"]
tsharkIn   = open("tshark.pcap", "rb")
tsharkOut  = open("tshark.txt", "wb")

tsharkProc = subprocess.Popen(tsharkCall,
                              stdin=tsharkIn,
                              stdout=tsharkOut, 
                              executable="C:\\Program Files\\Wireshark\\tshark.exe")
于 2013-06-27T18:56:54.393 回答
2

这也有效

tsharkCall = ["C:\\Program Files\\Wireshark\\tshark.exe", "-P", "-V", "-x", "-r", "C:\\Data\\PCAP_TEST_FILES\\test.pcap"]
tsharkOut  = open("tshark.txt", "wb")

tsharkProc = subprocess.call(tsharkCall, stdout=tsharkOut)  
于 2015-10-09T08:19:52.073 回答