annotate src/ut/nw/nw.go @ 22:5345d67aea5a

ut: add nw/nw.go
author pyon@macmini
date Fri, 29 Jun 2018 20:14:29 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
22
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
1 /*
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
2 little network library.
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
3 */
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
4 package nw
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
5
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
6 import (
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
7 "io"
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
8 "log"
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
9 "net"
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
10 "os"
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
11 )
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
12
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
13 /* nc: done. */
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
14 func Netcat( server, port string ) {
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
15 conn, err := net.Dial( "tcp", net.JoinHostPort( server, port ) )
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
16 if err != nil {
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
17 log.Fatal( err )
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
18 }
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
19 defer conn.Close()
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
20 go mustCopy( os.Stdout, conn )
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
21 mustCopy( conn, os.Stdin )
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
22 }
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
23
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
24 func mustCopy( dst io.Writer, src io.Reader ) {
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
25 if _, err := io.Copy( dst, src ); err != nil {
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
26 log.Fatal( err )
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
27 }
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
28 }
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
29
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
30 /* nc -l: done. */
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
31 func Netcat_l( port string ) {
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
32 addr := GetLocalIP()
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
33 l, err := net.Listen( "tcp", net.JoinHostPort( addr, port ) )
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
34 if err != nil {
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
35 log.Fatal( err )
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
36 }
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
37 defer l.Close()
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
38
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
39 conn, err := l.Accept()
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
40 if err != nil {
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
41 log.Fatal( err )
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
42 }
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
43 io.Copy( os.Stdout, conn )
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
44 conn.Close()
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
45 }
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
46
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
47 /* done. */
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
48 func GetLocalIP() string {
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
49 addrs, err := net.InterfaceAddrs()
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
50 if err != nil {
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
51 log.Fatal( err )
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
52 }
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
53 for _, addr := range addrs {
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
54 if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
55 if ipnet.IP.To4() != nil {
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
56 return ipnet.IP.String()
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
57 }
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
58 }
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
59 }
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
60 return "127.0.0.1"
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
61 }
5345d67aea5a ut: add nw/nw.go
pyon@macmini
parents:
diff changeset
62