ฉันพยายามทำให้แอปพลิเคชันทำงานได้อย่างถูกต้อง แต่ดูเหมือนว่าไม่พบอินเทอร์เฟซเครือข่ายใด ๆ มันถูกออกแบบมาให้ทำงานโดยไม่มีสิทธิ์ของผู้ดูแลระบบดังนั้นจึงต้องใช้ความสามารถของไฟล์ที่เฉพาะเจาะจง อย่างไรก็ตามมันยังคงไม่สามารถค้นหาอินเทอร์เฟซเครือข่ายผ่าน 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 ทั่วไป)
มีการเปลี่ยนแปลงใด ๆ กับเคอร์เนลที่มีผลต่อความสามารถของไฟล์หรือไม่? สิ่งที่เกี่ยวข้องที่ฉันพบทางออนไลน์มีอายุหลายปีและอ้างอิงถึงเคอร์เนลที่ล้าสมัย ขอบคุณ!