리눅스 libpcap 을 이용하여 패킷잡기를 구현중인데요.
조히
질문 제목 :
리눅스 libpcap 을 이용하여 패킷잡기를 구현중인데요.
libpcap 라이브러리를 이용하니, 필터룰을 적용 할 때에만 패킷이 잡히더라구요.
질문 내용 :
아래처럼 라이브러리를 이용하여 패킷을 잡게했습니다.
그런데 filter_rule이 있을 때 예를 들어, ./test3 port 80 처럼 조건?이 붙을 때에만 실행이 됩니다.
그냥 ./test3하면 현재들어오는 모든 패킷을 잡을 방법은 없나요??
structbpf_program fp;
char ebuf[pcap_errbuf_size];
int packetcnt;
int a;
bpf_u_int32 localnet, netmask;
filter_rule = argv[1];// ex) src host xxx.xxx.xxx.xxx and tcp port 80
device = pcap_lookupdev(ebuf);
if(device == null)
{
perror(ebuf);
exit(-1);
}pd = pcap_open_live(device, bufsiz, promiscuous, 1000, ebuf);
if(pd == null) { //snaplen : 캡쳐할 크기. tcp header 캡처할 경우 : ethernetheader + ip header + tcp header
perror(ebuf);
exit(-1);
}
else
fprintf(stdout, packet capture open successful!!\n);
if(pcap_lookupnet(device, &localnet, &netmask, ebuf) 0) {
perror(ebuf);
exit(-1);
}
setuid(getuid());
if(pcap_compile(pd, &fp, filter_rule, 0, netmask) 0) {
perror(ebuf);
exit(-1);
}
if(pcap_setfilter(pd, &fp) 0) {
perror(ebuf);
exit(-1);
}
__fpurge(stderr);pcap_loop(pd, packetcnt, callback, null);
pcap_close(pd);
return 0;