package main import ( "net" "fmt" "io" "os" "crypto/sha1" "time" ) func main() { now := time.Now().Unix() nowstr := fmt.Sprintf("%d", now) h := sha1.New() h.Write([]byte(nowstr)) fmt.Printf("%v\n", h.Sum(nil)); if len(os.Args) != 3 { fatal("usage: netfwd local remote") } localAddr := os.Args[1] remoteAddr := os.Args[2] local, err := net.Listen("tcp", localAddr) if local == nil { fatal("Cannot listen: %v", err) } for { conn, err := local.Accept() if conn == nil { fatal("accept failed: %v", err) } go forward(conn, remoteAddr) } } func forward(local net.Conn, remoteAddr string) { remote, err := net.Dial("tcp", remoteAddr) if remote == nil { fmt.Fprintf(os.Stderr, "remote dial failed: %v\n", err) } go io.Copy(local, remote) go io.Copy(remote, local) } func fatal(s string, a ... interface{}) { fmt.Fprintf(os.Stderr, "netfdw: %s \n", fmt.Sprintf(s, a)) os.Exit(2) }