mirror of
https://github.com/golang/net.git
synced 2026-03-31 18:37:08 +09:00
Package ipv4 implements IP-level socket options for the Internet Protocol version 4. It also provides raw IP socket access methods including IPv4 header manipulation. Fixes golang/go#3684. Fixes golang/go#3820. This CL requires CL 6426047; net: add read, write message methods to IPConn, UDPConn R=rsc, dave, alex.brainman CC=gobot, golang-dev https://golang.org/cl/6482044
80 lines
1.8 KiB
Go
80 lines
1.8 KiB
Go
// Copyright 2012 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.
|
|
|
|
// +build darwin freebsd linux netbsd openbsd
|
|
|
|
package ipv4_test
|
|
|
|
import (
|
|
"code.google.com/p/go.net/ipv4"
|
|
"net"
|
|
"os"
|
|
"testing"
|
|
)
|
|
|
|
func TestReadWriteUnicastIPPayloadUDP(t *testing.T) {
|
|
c, err := net.ListenPacket("udp4", "127.0.0.1:0")
|
|
if err != nil {
|
|
t.Fatalf("net.ListenPacket failed: %v", err)
|
|
}
|
|
defer c.Close()
|
|
|
|
dst, err := net.ResolveUDPAddr("udp4", c.LocalAddr().String())
|
|
if err != nil {
|
|
t.Fatalf("net.ResolveUDPAddr failed: %v", err)
|
|
}
|
|
|
|
p := ipv4.NewPacketConn(c)
|
|
runPayloadTransponder(t, p, []byte("HELLO-R-U-THERE"), dst)
|
|
}
|
|
|
|
func TestReadWriteUnicastIPPayloadICMP(t *testing.T) {
|
|
if os.Getuid() != 0 {
|
|
t.Logf("skipping test; must be root")
|
|
return
|
|
}
|
|
|
|
c, err := net.ListenPacket("ip4:icmp", "0.0.0.0")
|
|
if err != nil {
|
|
t.Fatalf("net.ListenPacket failed: %v", err)
|
|
}
|
|
defer c.Close()
|
|
|
|
dst, err := net.ResolveIPAddr("ip4", "127.0.0.1")
|
|
if err != nil {
|
|
t.Fatalf("ResolveIPAddr failed: %v", err)
|
|
}
|
|
|
|
p := ipv4.NewPacketConn(c)
|
|
id := os.Getpid() & 0xffff
|
|
pld := newICMPEchoRequest(id, 1, 128, []byte("HELLO-R-U-THERE"))
|
|
runPayloadTransponder(t, p, pld, dst)
|
|
}
|
|
|
|
func TestReadWriteUnicastIPDatagram(t *testing.T) {
|
|
if os.Getuid() != 0 {
|
|
t.Logf("skipping test; must be root")
|
|
return
|
|
}
|
|
|
|
c, err := net.ListenPacket("ip4:icmp", "0.0.0.0")
|
|
if err != nil {
|
|
t.Fatalf("net.ListenPacket failed: %v", err)
|
|
}
|
|
defer c.Close()
|
|
|
|
dst, err := net.ResolveIPAddr("ip4", "127.0.0.1")
|
|
if err != nil {
|
|
t.Fatalf("ResolveIPAddr failed: %v", err)
|
|
}
|
|
|
|
r, err := ipv4.NewRawConn(c)
|
|
if err != nil {
|
|
t.Fatalf("ipv4.NewRawConn failed: %v", err)
|
|
}
|
|
id := os.Getpid() & 0xffff
|
|
pld := newICMPEchoRequest(id, 1, 128, []byte("HELLO-R-U-THERE"))
|
|
runDatagramTransponder(t, r, pld, nil, dst)
|
|
}
|