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

Hanya terima paket ICMP 0-panjang daripada icmp.Packetconn

WBOY
Lepaskan: 2024-02-05 21:24:04
ke hadapan
1246 orang telah melayarinya

仅从 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)

    }
}
Salin selepas log masuk

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)
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan