2012-02-25 1 views
0

네트워크 분석기를 작성 중이며 파일에 저장된 패킷을 필터링해야합니다. http 패킷을 필터링하는 코드를 작성했으나 사용하는 경우 작동하지 않을지 잘 모르겠습니다. PCAP 덤프에 내 코드는 결과는 5 개 패킷하지만 필터 와이어 샤크에서 쓰기 HTTP 나에게이 패킷을주고 내가 사용하는 경우 :pcap 덤프 파일의 패킷 필터링

tcpdump port http -r trace-1.pcap 

그것을 나에게 11 개 패킷을 제공합니다.

음, 3 가지 결과가 있습니다. 다소 혼란 스럽습니다.

필터 나 코드의 패킷 처리는 다음과 같습니다

... 
if (pcap_compile(handle, &fcode, "tcp port 80", 1, netmask) < 0) 
... 
while ((packet = pcap_next(handle,&header))) { 
    u_char *pkt_ptr = (u_char *)packet; 

    //parse the first (ethernet) header, grabbing the type field 
    int ether_type = ((int)(pkt_ptr[12]) << 8) | (int)pkt_ptr[13]; 
    int ether_offset = 0; 

    if (ether_type == ETHER_TYPE_IP) // ethernet II 
     ether_offset = 14; 
    else if (ether_type == ETHER_TYPE_8021Q) // 802 
     ether_offset = 18; 
    else 
     fprintf(stderr, "Unknown ethernet type, %04X, skipping...\n", ether_type); 

    //parse the IP header 
    pkt_ptr += ether_offset; //skip past the Ethernet II header 
    struct ip_header *ip_hdr = (struct ip_header *)pkt_ptr; 
    int packet_length = ntohs(ip_hdr->tlen); 

    printf("\n%d - packet length: %d, and the capture lenght: %d\n", cnt++,packet_length, header.caplen); 

} 

내 질문은 HTTP를 필터링 할 때 3 가지 결과가 왜? 그리고/또는 만약 내가 그것을 잘못 필터링하고 있다면 어떻게 할 수 있습니까? 또한 포트 번호가 아닌 다른 것을 사용하여 http (또는 ssh, ftp, telnet ...) 패킷을 필터링하는 방법이 있습니까?

감사합니다.

+0

차이점을 비교 했습니까? nce 또는 결과? 또는 pcap 파일 링크를 첨부 할 수 있습니까, 아니면 원인을 알기가 어렵습니다. –

답변

0

그래서 알아 냈습니다. 그것은 약간의 탐색과 이해를 필요로했지만 나는 그것을했다.

Wireshark 필터는 TCP 포트 80에서 http 필터 패킷을 설정하고 PSH, ACK로 설정된 플래그도 설정합니다. 이 사실을 알게 된 후 같은 수의 패킷을 생성하는 tcpdump 명령 매개 변수는 쓰기 쉽습니다.

그래서 이제 와이어 샤크와 tcpdump와 같은 결과

어떻게 내 코드에 대한

을 준다? 물론 나는 실제로 내 질문에 오류, 실제로 11 개 패킷 (상관없이 TCP 플래그가 무엇인지 80로 설정 SRC 및 DST 포트)

이제 원하는 필터링을 제공

if (pcap_compile(handle, &fcode, "tcp port 80", 1, netmask) < 0) 

필터 있다고 생각 패킷은 필터 구문 을 잘 이해하거나 포트 80 (21,22, ...) 만 필터링 한 다음 콜백 함수 또는 while 루프에서 tcp 헤더를 가져 와서 플래그를 얻고 마스크를 사용하도록 설정하는 문제입니다 올바른 패킷인지 (PSH, ACK, SYN ...) 플래그 번호는 예를 들어 here