mirror of
https://github.com/golang/net.git
synced 2026-03-31 18:37:08 +09:00
Following CL 254740, this CL does it on x/net. Updates golang/go#38485. Change-Id: I80831dd0faa6f216d8d3b8f1af0af811aacce43f Reviewed-on: https://go-review.googlesource.com/c/net/+/255537 Trust: Cherry Zhang <cherryyz@google.com> Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
64 lines
1.3 KiB
Go
64 lines
1.3 KiB
Go
// Copyright 2014 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package icmp_test
|
|
|
|
import (
|
|
"log"
|
|
"net"
|
|
"os"
|
|
"runtime"
|
|
|
|
"golang.org/x/net/icmp"
|
|
"golang.org/x/net/ipv6"
|
|
)
|
|
|
|
func ExamplePacketConn_nonPrivilegedPing() {
|
|
switch runtime.GOOS {
|
|
case "darwin", "ios":
|
|
case "linux":
|
|
log.Println("you may need to adjust the net.ipv4.ping_group_range kernel state")
|
|
default:
|
|
log.Println("not supported on", runtime.GOOS)
|
|
return
|
|
}
|
|
|
|
c, err := icmp.ListenPacket("udp6", "fe80::1%en0")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer c.Close()
|
|
|
|
wm := icmp.Message{
|
|
Type: ipv6.ICMPTypeEchoRequest, Code: 0,
|
|
Body: &icmp.Echo{
|
|
ID: os.Getpid() & 0xffff, Seq: 1,
|
|
Data: []byte("HELLO-R-U-THERE"),
|
|
},
|
|
}
|
|
wb, err := wm.Marshal(nil)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
if _, err := c.WriteTo(wb, &net.UDPAddr{IP: net.ParseIP("ff02::1"), Zone: "en0"}); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
rb := make([]byte, 1500)
|
|
n, peer, err := c.ReadFrom(rb)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
rm, err := icmp.ParseMessage(58, rb[:n])
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
switch rm.Type {
|
|
case ipv6.ICMPTypeEchoReply:
|
|
log.Printf("got reflection from %v", peer)
|
|
default:
|
|
log.Printf("got %+v; want echo reply", rm)
|
|
}
|
|
}
|