Я пытался заставить приложение работать должным образом, но кажется, что он не может найти никаких сетевых интерфейсов. Он предназначен для работы без прав администратора и поэтому требует определенных файловых возможностей. Тем не менее, он все еще не может найти какие-либо сетевые интерфейсы через libpcap.
Я попробовал простой скрипт для репликации поведения, используя libpcap для вывода списка сетевых интерфейсов, чтобы проверить проблему:
#include <stdio.h>
#include <pcap.h>
int main(int argc, char *argv[]) {
char *dev, errbuf[PCAP_ERRBUF_SIZE];
dev = pcap_lookupdev(errbuf);
if(dev == NULL) {
printf("Error: %s\n", errbuf);
return(2);
}
printf("Device: %s\n", dev);
return(0);
}
Применение файловых возможностей и проверка их применения,
$ sudo setcap cap_net_raw,cap_net_admin=eip pcap_test
$ getcap pcap_test
pcap_test = cap_net_admin,cap_net_raw+eip
Он по-прежнему не может найти какие-либо сетевые интерфейсы, хотя утверждает, что имеет правильные разрешения. Запуск от имени суперпользователя работает без проблем, конечно.
$ ./pcap_test
Error: no suitable device found
$ sudo ./pcap_test
Device: eth0
Прохождение этой идентичной последовательности работает в соответствии с требованиями Ubuntu 14.04 (с общей версией ядра 3.13.0-35, а также с предыдущими версиями), но я не смог заставить ее работать под Mint 17 или 17.1 (с версией ядра). 3.13.0-24-родовой).
Есть ли какие-либо изменения в ядре, которые влияют на возможности файлов? Все, что я нашел в сети, уже несколько лет и относится к устаревшему ядру. Спасибо!