小编dir*_*has的帖子

使用libpcap的原始捕获功能(CAP_NET_RAW,CAP_NET_ADMIN)无法在/ usr/bin和朋友之间进行数据包捕获程序

TL; DR:为什么cap_net_raw,cap_net_admin功能只能在/usr/bin(或/usr/sbin)中工作,而不能在其他地方工作?这可以在某个地方配置吗?

我在使用Ubuntu 14.04中的libpcap为我的C程序分配功能时遇到了问题.即使在使用setcap(8)和使用它来分配功能之后getcap(8),我仍然会收到权限错误.似乎功能仅适用于\usr\bin朋友中的可执行文件.

我的程序test.c如下:

#include <stdio.h>
#include <pcap.h>

int main(int argc, char **argv) {
    if (argc != 2) {
        printf("Specify interface \n");
        return -1;
    }
    char errbuf[PCAP_ERRBUF_SIZE];
    struct pcap* pcap = pcap_open_live(argv[1], BUFSIZ, 1, 0, errbuf);
    if (pcap == NULL) {
        printf("%s\n", errbuf);
        return -1;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

并编译

gcc test.c -lpcap
Run Code Online (Sandbox Code Playgroud)

生成a.out可执行文 我设置了功能:

sudo setcap cap_net_raw,cap_net_admin=eip ./a.out
Run Code Online (Sandbox Code Playgroud)

并检查它是否正确: …

linux ubuntu wireshark libpcap linux-capabilities

10
推荐指数
1
解决办法
7742
查看次数

标签 统计

libpcap ×1

linux ×1

linux-capabilities ×1

ubuntu ×1

wireshark ×1