죄송합니다. 나는 tcpdump과 pcap을 처음 사용하고있다. 나는 pcap 정적 lib를 사용하여 개발하고 응용 프로그램은 특정 포트에서 TCP 데이터를 수신 대기합니다. 작은 프로토 타입이 구축되어 있고 포트 80 (HTTP의 기본값)을 통해 전송 된 tcp 패킷을 스니핑 할 때 잘 작동합니다. 그러나 포트 5984 (CouchDB가 사용하는 기본 포트)와의 HTTP 패킷을보고 싶습니다. 내 응용 프로그램은 어떤 이유로이 포트에서 패킷을 확인/스니핑/볼 수 없습니다. 내가 노련한 네트워크 개발자가 아니기 때문에 나는 근본적으로 뭔가 빠져있을 것입니다.Tcpdump - pcap - 포트 5984에서 패킷을 스니핑 할 수 없습니다.
전체 응용 프로그램을 여기에 붙여 넣지 않고 문제를 찾는 데 필요한 코드를 추가 할 수 있습니다. 제발 알려주세요.
char filter_exp[] = "tcp port 5984";/* The filter expression */
필터는 컴파일하고 문제없이 PCAP 세션에 설정됩니다
이는 내 PCAP 필터 표현이다. 세션은 무차별 모드로 실행되도록 설정됩니다.
//get a pcap session
//args device, # of packets to capture, promisc mode, timeout, err buff
handle = pcap_open_live(dev, BUFSIZ, 1, 1000, errbuf);
if (handle == NULL) {
fprintf(stderr, "Couldn't open device %s: %s\n", dev, errbuf);
return(2);
//compile our filter
if (pcap_compile(handle, &fp, filter_exp, 0, net) == -1) {
fprintf(stderr, "Couldn't parse filter %s: %s\n", filter_exp, pcap_geterr(handle));
return(2);
}
//set the filter
if (pcap_setfilter(handle, &fp) == -1) {
fprintf(stderr, "Couldn't install filter %s: %s\n", filter_exp, pcap_geterr(handle));
return(2);
}
//begin sniffing packets. cnt -1: keep sniffing until err occurs
//last arg is optional. It can be used to pass additonal information to callback
pcap_loop(handle, -1, got_packet, NULL);
'got_packet'은 콜백 기능입니다. $ curl http://localhost:5984/test
을 그냥 내가 루프백 사용하려고 한 그것의 지옥 : $ curl http://127.0.0.1:5984/test
대신에 포트 80과 같은 필터하지만를 사용하여 여러 번 호출
이 두 가지 모두 내 pcap 응용 프로그램에 의해 주목되지 않습니다. 그러나 포트 80에서 수신 대기하도록 필터를 변경하고 $ curl http://www.google.com
을 입력하면
나는 패킷을 확인할 수 있습니다. 나는 무엇을 간과하거나 이해하지 못합니까?
고맙습니다.
-Nick
어떤 OS가 실행되고 있습니까? 127.0.0.1에 대한 연결을 설정하는 데 'curl 'ing google과 다른 장치를 사용하고 있다는 사실을 알고 있습니까? – alk
프로그램이 관리 권한으로 실행되고 있습니까? – chacham15
프로그램이 루트 액세스 권한으로 실행되고 있지 않습니다. @ chacham 중대한 시점. 아픈 그것을 시도하십시오. – Nick