Stavo leggendo il codice da ndpi e ho trovato questa riga -
if (packet->payload_packet_len > 7 && packet->payload_packet_len < 100
&& memcmp(packet->payload, "SSH-", 4) == 0) {
....
}
Volevo fare la stessa cosa usando la libreria gopacket (libreria sniffing di pacchetti in golang) ma il carico utile sembra essere crittografato, il che significa che non è in grado di trovare la stringa "SSH-". Essendo un principiante in IS, non sono sicuro di cosa stia succedendo -
applicationLayer := packet.ApplicationLayer()
if applicationLayer != nil {
fmt.Println("Application layer/Payload found.")
fmt.Printf("%s\n", applicationLayer.Payload())
fmt.Println()
// Search for a string inside the payload
if strings.Contains(string(applicationLayer.Payload()), "SSH-") {
fmt.Println("SSH found!")
fmt.Printf("%s\n", applicationLayer.Payload())
}
}
Output -
Application layer/Payload found.
?}"o??>A??L??j#??U?|X?:c?K??^1L?)?)???I"
Inoltre sto utilizzando un filtro BPF con porta impostata su 22 e sto anche inviando traffico attraverso il mio server di prova.
Quindi la mia domanda è dove sto andando male? Il mio obiettivo finale è quello di rilevare alcuni protocolli indipendenti dalla porta. Come dovrei avvicinarmi a questo problema?