Golang 中监听 ICMP,可以使用 "golang.org/x/net/icmp" 。该提供了对 ICMPICMPv6 协议的支持。 以下是一个简单的示例代码,可以监听 ICMP Echo 请求并打印收到的消息: ``` package main import ( "fmt" "log" "net" "golang.org/x/net/icmp" "golang.org/x/net/ipv4" ) func main() { conn, err := icmp.ListenPacket("ip4:icmp", "0.0.0.0") if err != nil { log.Fatal(err) } defer conn.Close() for { buf := make([]byte, 1024) n, addr, err := conn.ReadFrom(buf) if err != nil { log.Fatal("ReadFrom error:", err) } msg, err := icmp.ParseMessage(1, buf[:n]) if err != nil { log.Fatal("ParseMessage error:", err) } switch msg.Type { case ipv4.ICMPTypeEcho: log.Printf("Received ICMP Echo from %v: %s\n", addr, string(msg.Body.(*icmp.Echo).Data)) default: log.Printf("Received ICMP message type %v from %v\n", msg.Type, addr) } } } ``` 在上面的示例中,我们使用 `icmp.ListenPacket` 函数来监听 ICMP 数据。然后,我们使用 `icmp.ParseMessage` 函数来解析收到的消息。最后,我们根据消息类型进行处理。 请注意,ICMP 是一个底层协议,需要具有管理员特权才能访问。在 Linux 中,您需要使用 `sudo` 命令来运行此程序。