changeset 22:5345d67aea5a

ut: add nw/nw.go
author pyon@macmini
date Fri, 29 Jun 2018 20:14:29 +0900
parents 4232b4cbeeb5
children a3c8d0b20a60
files src/ut/nw/nw.go
diffstat 1 files changed, 62 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ut/nw/nw.go	Fri Jun 29 20:14:29 2018 +0900
@@ -0,0 +1,62 @@
+/*
+    little network library.
+*/
+package nw
+
+import (
+    "io"
+    "log"
+    "net"
+    "os"
+)
+
+/* nc: done. */
+func Netcat( server, port string ) {
+    conn, err := net.Dial( "tcp", net.JoinHostPort( server, port ) )
+    if err != nil {
+        log.Fatal( err )
+    }
+    defer conn.Close()
+    go mustCopy( os.Stdout, conn )
+    mustCopy( conn, os.Stdin )
+}
+
+func mustCopy( dst io.Writer, src io.Reader ) {
+    if _, err := io.Copy( dst, src ); err != nil {
+        log.Fatal( err )
+    }
+}
+
+/* nc -l: done. */
+func Netcat_l( port string ) {
+    addr := GetLocalIP()
+    l, err := net.Listen( "tcp", net.JoinHostPort( addr, port ) )
+    if err != nil {
+        log.Fatal( err )
+    }
+    defer l.Close()
+
+    conn, err := l.Accept()
+    if err != nil {
+        log.Fatal( err )
+    }
+    io.Copy( os.Stdout, conn )
+    conn.Close()
+}
+
+/* done. */
+func GetLocalIP() string {
+    addrs, err := net.InterfaceAddrs()
+    if err != nil {
+        log.Fatal( err )
+    }
+    for _, addr := range addrs {
+        if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
+            if ipnet.IP.To4() != nil {
+                return ipnet.IP.String()
+            }
+        }
+    }
+    return "127.0.0.1"
+}
+