Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Hanya terima paket ICMP 0-panjang daripada icmp.Packetconn

Hanya terima paket ICMP 0-panjang daripada icmp.Packetconn

WBOY
WBOYke hadapan
2024-02-05 21:24:041174semak imbas

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

Kandungan soalan

Matlamat utama adalah untuk mengesan port UDP terbuka dengan menghantar data melalui port dan mendengar mesej ICMP yang masuk jika port tidak dapat dicapai. Untuk melakukan ini, gunakan fungsi Go berikut untuk dijalankan sebagai 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)

    }
}

Ini dapat mengesan ping ICMP dan destinasi yang tidak dapat dicapai, tetapi sentiasa mengembalikan mesej 0 panjang. Contoh:

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

Saya telah cuba menghuraikan mesej tetapi kerana ia kosong ia mengembalikan ralat masa jalan. Juga, saya memberikan kebenaran root boleh laku, tetapi itu juga tidak berkesan.

EDIT: OS ialah Ubuntu 20.04


Jawapan betul


Terdapat kesilapan saya sendiri...

Saya cuba membaca daripada penimbal yang tidak dimulakan. Membuat perubahan berikut pada penimbal masuk menyelesaikan isu:

// var incoming []byte
incoming := make([]byte, 80)

Atas ialah kandungan terperinci Hanya terima paket ICMP 0-panjang daripada icmp.Packetconn. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam