1
pcap 필터에 문제가 있습니다.필터가있는 pcap_loop이 패킷을 캡처하지 않습니다.
#include <pcap.h>
#include <stdio.h>
void pcap_fatal(const char *failed_in, const char *errbuf) {
printf("Fatal error in %s: %s\n", failed_in, errbuf);
exit(1);
}
int main() {
struct pcap_pkthdr header;
const u_char *packet;
char errbuf[PCAP_ERRBUF_SIZE];
char *device;
pcap_t *pcap_handle;
int i;
struct bpf_program filter;
char filter_str[1000];
pcap_dumper_t *pd;
device = pcap_lookupdev(errbuf);
if(device == NULL)
pcap_fatal("pcap_lookupdev", errbuf);
printf("Sniffing on device %s\n", device);
pcap_handle = pcap_open_live(device, 4096, 1, 0, errbuf);
if(pcap_handle == NULL)
pcap_fatal("pcap_open_live", errbuf);
// Set the packet filter
sprintf(filter_str, "port 80");
if(pcap_compile(pcap_handle, &filter, filter_str, 0, 0) == -1)
fatal("create filter");
if(pcap_setfilter(pcap_handle, &filter) == -1)
fatal("install filter");
for(i=0; i<3; i++) {
packet = pcap_next(pcap_handle, &header);
printf("Got a %d bytes packet\n", header.len);
dump(packet, header.len);
}
pd = pcap_dump_open(pd, "-");
pcap_loop(pcap_handle, -1, &pcap_dump, (char *)pd);
pcap_close(pcap_handle);
}
pcap_next()
잘 패킷을 포착하고 dump()
기능은 패킷의 데이터를 덤프하는 데 사용된다 : 다음의 코드의 일부분이다. 그러나 pcap_loop
은 어떤 패킷도 포착하지 못하며, for
루프의 패킷 포착 후에 막 막히게됩니다.
나는 "브리지"로 설정된 네트워크 어댑터로 가상 박스에서 실행중인 우분투에서 프로그래밍 중입니다. 문제가 될 수 있습니까? 아니면 코드에 문제가있는 것입니다.
감사합니다. 감사드립니다.
아이는 당황 : 당신은 아마 대신
pcap_handle
에 전달하는 의미잘못. 도움을 주셔서 감사합니다 – AuA
컴파일러 경고에주의를 기울여야합니다. 컴파일러가이 특별한 실수를 알려 줘야합니다. – jxh
제안 해 주셔서 감사합니다. – AuA