2017-03-15 2 views
-1

Ich arbeite auf die Erkennung von NTP mit Golang und das Gopacket-Paket. Ich benutze eine pcap, die ich von wireshark heruntergeladen habe. Ich habe den folgenden Code bekam PCAPs zum Öffnen und Umgang mit ihnen:NTP-Erkennung mit Golang, Nutzlast kommt leer

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 
} 

Und das ist der Code, den ich

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) 


} 

Der Payload-Gehalt in der ApplicationLayer die eigentliche Erkennung auszuführen ich schreibe kommt leer und ich kann nicht herausfinden, warum das passiert.

Beispiel-Screenshot, wenn ich die ApplicationLayer selbst ausdrucken:

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

Beispiel-Screenshot, wenn ich die Payload ausdrucken: https://i.gyazo.com/7f4abd449025f5d65160fdbecffa8181.png

könnte etwas Hilfe herauszufinden, verwenden, was ich falsch mache . Danke!

+0

Ich bemerke, dass Sie den von ReadPCAP zurückgegebenen möglichen Fehler ignorieren. Bitte überdenken Sie das. So viele Probleme könnten vermieden werden, wenn Menschen ihre Fehlerrückmeldungen behandeln würden. –

+0

@ZanLynx Ja, ich muss das tun. Dies war nur zu Testzwecken. Danke für den Tipp! –

+0

Bitte geben Sie die Textausgabe als Text anstelle eines Bildes an (ich nehme an, dass Sie deshalb einen Downvote erhalten haben). –

Antwort

1

der golang soure Code Lesen durch, stieß ich auf diese:

// 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 
} 

Also, anscheinend es soll keine Payload tragen. Ich habe es geschafft, die Erkennung mithilfe von Ebenen durchzuführen.

Verwandte Themen