Estaba leyendo el código de ndpi y encontré esta línea -
if (packet->payload_packet_len > 7 && packet->payload_packet_len < 100
&& memcmp(packet->payload, "SSH-", 4) == 0) {
....
}
Quería hacer lo mismo usando la biblioteca gopacket (biblioteca de rastreo de paquetes en Golang) pero la carga útil parece estar encriptada, lo que significa que no puede encontrar la cadena "SSH-". Al ser un principiante en IS, no estoy seguro de lo que está sucediendo -
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())
}
}
Salida -
Application layer/Payload found.
?}"o??>A??L??j#??U?|X?:c?K??^1L?)?)???I"
También estoy usando un filtro BPF con el puerto configurado en 22, y también estoy enviando tráfico a través de mi servidor de prueba.
¿Entonces mi pregunta es dónde me voy mal? Mi objetivo final es detectar algunos protocolos independientes del puerto. ¿Cómo debo abordar este problema?