我试图通过NodeJS的node_api在电子中使用pcap(Linux中的libpcap库)。下面是c++中的关键代码块
static napi_value RunCallback(napi_env env, const napi_callback_info info)
{
char errBuf[PCAP_ERRBUF_SIZE];
//network device name
char *devName = "wlo1";
pcap_t *device = pcap_open_live(devName, 65535, 1, 0, errBuf);
.......
}
binding.gyp:
{
"targets":[
{
"target_name":"net",
"sources": [ "./code/net.cpp" ],
"libraries": [
"-lpcap"
],
}
]
}
日志在这里:
> my-electron-app@1.0.0 start
> electron .
Error: wlo1: You don't have permission to capture on that device (socket: 不允许的操作)
我尝试使用sudo -E npm start,但这对我不起作用。然而,我可以简单地运行代码,如pcap_open_live()在g++编译的单个文件中,如sudo ./test. 所以我想知道我是否应该在Electron或Node.JS中做一些设置,比如绑定。吉普还是js文件?这可能帮助:
sudo setcap cap_net_raw,cap_net_admin=eip /path/to/your-app
此命令授予您的电子应用程序CAP_NET_RAW和CAP_NET_ADMIN功能,允许它捕获网络数据包。