github.com/hugelgupf/u-root@v0.0.0-20191023214958-4807c632154c/cmds/core/netcat/netcat.go (about)

     1  // Copyright 2012-2017 the u-root Authors. All rights reserved
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  // Netcat pipes over the network.
     6  package main
     7  
     8  import (
     9  	"flag"
    10  	"fmt"
    11  	"io"
    12  	"log"
    13  	"net"
    14  	"os"
    15  
    16  	"github.com/u-root/u-root/pkg/uroot/util"
    17  )
    18  
    19  const usage = "netcat [go-style network address]"
    20  
    21  var (
    22  	netType = flag.String("net", "tcp", "What net type to use, e.g. tcp, unix, etc.")
    23  	listen  = flag.Bool("l", false, "Listen for connections.")
    24  	verbose = flag.Bool("v", false, "Verbose output.")
    25  )
    26  
    27  func init() {
    28  	util.Usage(usage)
    29  }
    30  
    31  func main() {
    32  	var c net.Conn
    33  	var err error
    34  	if flag.Parse(); len(flag.Args()) != 1 {
    35  		flag.Usage()
    36  		os.Exit(1)
    37  	}
    38  
    39  	addr := flag.Args()[0]
    40  
    41  	if *listen {
    42  		ln, err := net.Listen(*netType, addr)
    43  		if err != nil {
    44  			log.Fatalln(err)
    45  		}
    46  		if *verbose {
    47  			fmt.Fprintln(os.Stderr, "Listening on", ln.Addr())
    48  		}
    49  
    50  		c, err = ln.Accept()
    51  		if err != nil {
    52  			log.Fatalln(err)
    53  		}
    54  	} else {
    55  		if c, err = net.Dial(*netType, addr); err != nil {
    56  			log.Fatalln(err)
    57  		}
    58  	}
    59  	if *verbose {
    60  		fmt.Fprintln(os.Stderr, "Connected to", c.RemoteAddr())
    61  	}
    62  
    63  	go func() {
    64  		if _, err := io.Copy(c, os.Stdin); err != nil {
    65  			fmt.Fprintln(os.Stderr, err)
    66  		}
    67  	}()
    68  	if _, err = io.Copy(os.Stdout, c); err != nil {
    69  		fmt.Fprintln(os.Stderr, err)
    70  	}
    71  	if *verbose {
    72  		fmt.Fprintln(os.Stderr, "Disconnected")
    73  	}
    74  }