【发布时间】:2019-11-25 13:26:50
【问题描述】:
我正在尝试从用 Visual Studio 编译的 c++ 程序调用 tshark。有些电话有效,但有些电话无效。我能够启动捕获到文件:
STARTUPINFO startupInfo={sizeof(startupInfo)};
PROCESS_INFORMATION processInfo;
const char * args = " -i \"Ethernet 9\" -w C:\\Users\\raymond\\Documents\\Debug\\Ethernet_9.cap -b duration:90 -b files:2\"";
CreateProcess("C:\\Program Files\\Wireshark\\tshark.exe", const_cast<char *>(ss.str().c_str()), NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &startupInfo, &processInfo);
但我无法将捕获文件转换为文本:
STARTUPINFO startupInfo={sizeof(startupInfo)};
PROCESS_INFORMATION processInfo;
const char * args = " -i - < \"C:\\Users\\raymond\\Documents\\Ethernet_9.cap\" > \"C:\\Users\\raymond\\Documents\\Ethernet_9.txt";
CreateProcess("C:\\Program Files\\Wireshark\\tshark.exe", const_cast<char *>(ss.str().c_str()), NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &startupInfo, &processInfo);
所有打印的都是“Capturing on 'Standard input'”,但与在命令行上运行命令相反,没有输出任何内容,并且从不打印处理的数据包数。
用 system() 尝试类似的东西在同一个 tshark 调用上也会有奇怪的行为。
如果我在程序仍在运行时尝试关闭新寡妇,则会打印以下内容: (tshark.exe:8628): CaptureChild-WARNING **: sync_pipe_stop: 强制孩子退出
【问题讨论】:
-
你可以使用boost process 还是你需要原始的windows API 没有任何顶部的包装?您实际上需要管道“子进程”输出,打开文件流并将结果写入文件。
标签: c++ windows visual-studio wireshark tshark