NodeJS:无法使用 child_process.spawn 从 tcpdump 读取二进制数据

NodeJS: Can't read binary data from tcpdump using child_process.spawn

我无法在 NodeJS 中从 tcpdump -w - 读取二进制数据。

const {spawn} = require('child_process');
spawn('tcpdump', ['-w -']).stdout.on('data', (data) => console.log(data.toString()))

它适用于文本数据(没有 -w -)。

我尝试使用 -U 并验证了我机器上的 libpcap 导出 pcap_dump_flush。我可以看到 strace tcpdump 确实在输出数据。如果我用 -r 生成另一个 tcpdump 并将第一个的标准输出附加到它,数据将传递给第二个 tcpdump。但是 stdout 数据侦听器从未被调用并调用 stdout.read returns null.

注意: 我知道 pcap、pcap2 和 pcap-master,但它们似乎不再维护,也没有使用最新版本的 node 进行编译,无论如何我宁愿使用 tcpdump。

如果你像这样分开参数,它对我有用。

const {spawn} = require('child_process');
spawn('tcpdump', ['-w', '-']).stdout.on('data', (data) => console.log(data.toString()))