Mercurial > mercurial > hgweb_golang.cgi
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 |