Documentation ¶
Overview ¶
Package icmp provides basic functions for the manipulation of messages used in the Internet Control Message Protocols, ICMPv4 and ICMPv6.
Index ¶
- func IPv6PseudoHeader(src, dst net.IP) []byte
- func ParseIPv4Header(b []byte) (*ipv4.Header, error)
- type DefaultMessageBody
- type DstUnreach
- type Echo
- type Message
- type MessageBody
- type PacketConn
- func (c *PacketConn) Close() error
- func (c *PacketConn) IPv4PacketConn() *ipv4.PacketConn
- func (c *PacketConn) IPv6PacketConn() *ipv6.PacketConn
- func (c *PacketConn) LocalAddr() net.Addr
- func (c *PacketConn) ReadFrom(b []byte) (int, net.Addr, error)
- func (c *PacketConn) SetDeadline(t time.Time) error
- func (c *PacketConn) SetReadDeadline(t time.Time) error
- func (c *PacketConn) SetWriteDeadline(t time.Time) error
- func (c *PacketConn) WriteTo(b []byte, dst net.Addr) (int, error)
- type PacketTooBig
- type ParamProb
- type TimeExceeded
- type Type
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func IPv6PseudoHeader ¶
IPv6PseudoHeader returns an IPv6 pseudo header for checkusm calculation.
Types ¶
type DefaultMessageBody ¶
type DefaultMessageBody struct {
Data []byte // data
}
A DefaultMessageBody represents the default message body.
func (*DefaultMessageBody) Len ¶
func (p *DefaultMessageBody) Len() int
Len implements the Len method of MessageBody interface.
func (*DefaultMessageBody) Marshal ¶
func (p *DefaultMessageBody) Marshal() ([]byte, error)
Marshal implements the Marshal method of MessageBody interface.
type DstUnreach ¶
type DstUnreach struct {
Data []byte // data
}
A DstUnreach represents an ICMP destination unreachable message body.
func (*DstUnreach) Len ¶
func (p *DstUnreach) Len() int
Len implements the Len method of MessageBody interface.
func (*DstUnreach) Marshal ¶
func (p *DstUnreach) Marshal() ([]byte, error)
Marshal implements the Marshal method of MessageBody interface.
type Message ¶
type Message struct { Type Type // type, either ipv4.ICMPType or ipv6.ICMPType Code int // code Checksum int // checksum Body MessageBody // body }
A Message represents an ICMP message.
func ParseMessage ¶
ParseMessage parses b as an ICMP message. Proto must be either the ICMPv4 or ICMPv6 protocol number.
func (*Message) Marshal ¶
Marshal returns the binary enconding of the ICMP message m.
For an ICMPv4 message, the returned message always contains the calculated checksum field.
For an ICMPv6 message, the returned message contains the calculated checksum field when psh is not nil, otherwise the kernel will compute the checksum field during the message transmission. When psh is not nil, it must be the pseudo header for IPv6.
type MessageBody ¶
type MessageBody interface { // Len returns the length of ICMP message body. Len() int // Marshal returns the binary enconding of ICMP message body. Marshal() ([]byte, error) }
A MessageBody represents an ICMP message body.
type PacketConn ¶
type PacketConn struct {
// contains filtered or unexported fields
}
A PacketConn represents a packet network endpoint that uses either ICMPv4 or ICMPv6.
Example (NonPrivilegedPing) ¶
package main import ( "log" "net" "os" "golang.org/x/net/icmp" "golang.org/x/net/internal/iana" "golang.org/x/net/ipv6" ) func main() { 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(iana.ProtocolIPv6ICMP, 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) } }
Output:
func ListenPacket ¶
func ListenPacket(network, address string) (*PacketConn, error)
ListenPacket listens for incoming ICMP packets addressed to address. See net.Dial for the syntax of address.
For non-privileged datagram-oriented ICMP endpoints, network must be "udp4" or "udp6". The endpoint allows to read, write a few limited ICMP messages such as echo request and echo reply. Currently only Darwin and Linux support this.
Examples:
ListenPacket("udp4", "192.168.0.1") ListenPacket("udp4", "0.0.0.0") ListenPacket("udp6", "fe80::1%en0") ListenPacket("udp6", "::")
For privileged raw ICMP endpoints, network must be "ip4" or "ip6" followed by a colon and an ICMP protocol number or name.
Examples:
ListenPacket("ip4:icmp", "192.168.0.1") ListenPacket("ip4:1", "0.0.0.0") ListenPacket("ip6:ipv6-icmp", "fe80::1%en0") ListenPacket("ip6:58", "::")
func (*PacketConn) IPv4PacketConn ¶
func (c *PacketConn) IPv4PacketConn() *ipv4.PacketConn
IPv4PacketConn returns the ipv4.PacketConn of c. It returns nil when c is not created as the endpoint for ICMPv4.
func (*PacketConn) IPv6PacketConn ¶
func (c *PacketConn) IPv6PacketConn() *ipv6.PacketConn
IPv6PacketConn returns the ipv6.PacketConn of c. It returns nil when c is not created as the endpoint for ICMPv6.
func (*PacketConn) LocalAddr ¶
func (c *PacketConn) LocalAddr() net.Addr
LocalAddr returns the local network address.
func (*PacketConn) SetDeadline ¶
func (c *PacketConn) SetDeadline(t time.Time) error
SetDeadline sets the read and write deadlines associated with the endpoint.
func (*PacketConn) SetReadDeadline ¶
func (c *PacketConn) SetReadDeadline(t time.Time) error
SetReadDeadline sets the read deadline associated with the endpoint.
func (*PacketConn) SetWriteDeadline ¶
func (c *PacketConn) SetWriteDeadline(t time.Time) error
SetWriteDeadline sets the write deadline associated with the endpoint.
type PacketTooBig ¶
type PacketTooBig struct { MTU int // maximum transmission unit of the nexthop link Data []byte // data }
A PacketTooBig represents an ICMP packet too big message body.
func (*PacketTooBig) Len ¶
func (p *PacketTooBig) Len() int
Len implements the Len method of MessageBody interface.
func (*PacketTooBig) Marshal ¶
func (p *PacketTooBig) Marshal() ([]byte, error)
Marshal implements the Marshal method of MessageBody interface.
type ParamProb ¶
type ParamProb struct { Pointer uintptr // offset within the data where the error was detected Data []byte // data }
A ParamProb represents an ICMP parameter problem message body.
type TimeExceeded ¶
type TimeExceeded struct {
Data []byte // data
}
A TimeExceeded represents an ICMP time exceeded message body.
func (*TimeExceeded) Len ¶
func (p *TimeExceeded) Len() int
Len implements the Len method of MessageBody interface.
func (*TimeExceeded) Marshal ¶
func (p *TimeExceeded) Marshal() ([]byte, error)
Marshal implements the Marshal method of MessageBody interface.