comparison 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
comparison
equal deleted inserted replaced
21:4232b4cbeeb5 22:5345d67aea5a
1 /*
2 little network library.
3 */
4 package nw
5
6 import (
7 "io"
8 "log"
9 "net"
10 "os"
11 )
12
13 /* nc: done. */
14 func Netcat( server, port string ) {
15 conn, err := net.Dial( "tcp", net.JoinHostPort( server, port ) )
16 if err != nil {
17 log.Fatal( err )
18 }
19 defer conn.Close()
20 go mustCopy( os.Stdout, conn )
21 mustCopy( conn, os.Stdin )
22 }
23
24 func mustCopy( dst io.Writer, src io.Reader ) {
25 if _, err := io.Copy( dst, src ); err != nil {
26 log.Fatal( err )
27 }
28 }
29
30 /* nc -l: done. */
31 func Netcat_l( port string ) {
32 addr := GetLocalIP()
33 l, err := net.Listen( "tcp", net.JoinHostPort( addr, port ) )
34 if err != nil {
35 log.Fatal( err )
36 }
37 defer l.Close()
38
39 conn, err := l.Accept()
40 if err != nil {
41 log.Fatal( err )
42 }
43 io.Copy( os.Stdout, conn )
44 conn.Close()
45 }
46
47 /* done. */
48 func GetLocalIP() string {
49 addrs, err := net.InterfaceAddrs()
50 if err != nil {
51 log.Fatal( err )
52 }
53 for _, addr := range addrs {
54 if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
55 if ipnet.IP.To4() != nil {
56 return ipnet.IP.String()
57 }
58 }
59 }
60 return "127.0.0.1"
61 }
62