2017-03-15 17 views
-1

golang과 gopacket 패키지를 사용하여 NTP를 감지하고 있습니다. wireshark에서 다운로드 한 pcap을 사용하고 있습니다. 나는 PCAPs을 열고 그들에게 처리하기 위해 다음과 같은 코드를 가지고 :golang을 사용한 NTP 감지, 페이로드가 비어 짐

func (d *DPI) readPCAP(pcapFile string) (*pcap.Handle, error) { 
    // Open file instead of device 
    handle, err := pcap.OpenOffline(pcapFile) 
    if err != nil { 
     return nil, err 
    } 
    return handle, nil 
} 

을 그리고 이것은 내가 응용 계층에서의 페이로드의 내용이오고 실제 감지

func TestNTP(t *testing.T) { 



    dpi := newDPI() 
    handle, _ := dpi.readPCAP("data/pcap/NTP_sync.pcap") 

    var filter = "udp and port 123" 
    dpi.setFilter(handle,filter) 
    ntpPackets := 0 

    for packet := range dpi.getPacketChan(handle) { 
     fmt.Println("stuff: ",packet.ApplicationLayer().Payload()) 
     if dpi.detectNTP(packet) == 1 { 
      ntpPackets++ 
     } else { 
      fmt.Println(" Output : ", dpi.detectNTP(packet)) 
     } 
    } 
    fmt.Println(" Total ntp packets ", ntpPackets) 


} 

을 수행하는 데 쓰고 있어요 코드입니다 빈 공간이 생겨서 왜 이런 일이 일어나는지 알 수 없습니다. https://i.gyazo.com/7f4abd449025f5d65160fdbecffa8181.png

은 내가 잘못 알아내는 도움을 사용할 수 있습니다 나는 페이로드를 인쇄 할 때

https://i.gyazo.com/6257f298a09e7403bbc0be5b8ac84ccc.png

예 스크린 샷 : 나는 응용 계층 자체를 인쇄

예 스크린 샷 . 감사합니다.

+0

ReadPCAP에서 반환 된 잠재적 오류를 무시하고 있습니다. 그 점을 다시 생각해보십시오. 사람들이 오류 반환을 처리한다면 많은 문제를 피할 수 있습니다. –

+0

@ ZanLynx 그래, 그럴 필요가있어. 이는 테스트 용이었습니다. 팁 고마워! –

+0

이미지 대신 텍스트로 텍스트 출력을 포함하십시오 (나는 downvote가있는 이유라고 생각합니다). –

답변

1

는 golang의 soure 코드를 통해 읽기,이 건너 온 :

// NTP packets do not carry any data payload, so the empty byte slice is retured. 
// In Go, a nil slice is functionally identical to an empty slice, so we 
// return nil to avoid a heap allocation. 
func (d *NTP) Payload() []byte { 
    return nil 
} 

은 그래서, 분명히 페이로드를 수행 할 예정 아닙니다. 나는 레이어를 사용하여 탐지를 수행 할 수 있었다.