Maison > développement back-end > Golang > le corps du texte

Recevez uniquement des paquets ICMP de longueur nulle de icmp.Packetconn

WBOY
Libérer: 2024-02-05 21:24:04
avant
1209 Les gens l'ont consulté

仅从 icmp.Packetconn 接收 0 长度的 ICMP 数据包

Contenu de la question

L'objectif principal est de détecter les ports UDP ouverts en envoyant des données via le port et en écoutant les messages ICMP entrants si le port est inaccessible. Pour ce faire, utilisez la fonction Go suivante pour exécuter en tant que goroutine :

func listenIcmp(ipAddr string) {
    conn, err := icmp.ListenPacket("ip4:1", ipAddr)
    if err != nil {
    log.Println("Error while listening for ICMP packets: ")
        log.Println(err)
    }

    for {
        var incoming []byte
        length, sourceIP, err := conn.ReadFrom(incoming)
        if err != nil {
            log.Println(err)
            continue
        }

        log.Printf("message = '%s', length = %d, source-ip = %s", string(incoming), length, sourceIP)

    }
}
Copier après la connexion

Ceci est capable de détecter les pings ICMP et l'inaccessibilité de la destination, mais renvoie toujours un message de longueur nulle. Exemple :

2023/10/11 14:38:32 消息 = '',长度 = 0,源 IP = 127.0.0.1

J'ai essayé d'analyser le message mais comme il est vide, il renvoie une erreur d'exécution. De plus, j'ai donné les autorisations root à l'exécutable go, mais cela n'a pas fonctionné non plus.

EDIT : le système d'exploitation est Ubuntu 20.04


Bonne réponse


J'ai commis ma propre erreur...

J'ai essayé de lire à partir d'un tampon non initialisé. Apporter les modifications suivantes au tampon entrant résout le problème :

// var incoming []byte
incoming := make([]byte, 80)
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal