annotate src/netcat.go @ 56:7396e7407abd

searcher version up.
author pyon@macmini
date Sat, 27 Jun 2020 16:25:13 +0900
parents b0784443ed87
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
1 // OK : windows -> osx
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
2 // Not OK : osx -> windows
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
3 // OK : osx, win <-> yahoo.com
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
4 /*
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
5 Netcat
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
6
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
7 -v verbose
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
8 -vv very verbose
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
9 -w timeout [ -w 2 2seconds ]
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
10 -i interval
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
11 -s local source address
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
12 -z zero-I/O mode ( for portscan )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
13 -u with UDP ( default use TCP )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
14 -n don't resolve name/address
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
15 -d stealth mode ( don't read from stdin )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
16 -l listen mode ( once )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
17 -L listen mode ( continuous )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
18
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
19 Portscan
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
20 $ nc -v -z -w 1 192.168.1.1 1-140
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
21 $ nc -u -v -z -w 1 192.168.1.1 1-140
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
22
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
23 Web-client
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
24 $ nc -v www.yahoo.com 80
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
25
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
26 File transfer
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
27 $ nc -l 1234 > file
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
28 % nc hoge.com 1234 < file
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
29
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
30 Backdoor
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
31 C:\> nc -L -d -e cmd.exe -p 8080
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
32
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
33 */
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
34 package main
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
35
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
36 import (
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
37 "flag"
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
38 "fmt"
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
39 "io"
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
40 "log"
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
41 "net"
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
42 "os"
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
43 )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
44
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
45 func main() {
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
46
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
47 verbose := flag.Bool( "v", false, "verbose" )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
48 vverbose := flag.Bool( "vv", false, "very verbose" )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
49 udp := flag.Bool( "u", false, "with udp" )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
50 // interval := flag.Int( "i", 0, "interval for lines sent, port scanned" )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
51 // timeout := flag.Int( "w", 7, "timeout for connects and final net reads" )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
52 listen := flag.Bool( "l", false, "listen mode" )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
53 zmode := flag.Bool( "z", false, "zero-I/O mode" )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
54 laddr := flag.String( "s", "", "local source address" )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
55 example := flag.Bool( "e", false, "print examples" )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
56
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
57 flag.Parse()
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
58
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
59 if *example {
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
60 printExample()
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
61 os.Exit( 0 )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
62 }
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
63
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
64 if flag.NArg() == 0 {
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
65 fmt.Fprintf( os.Stderr, "netcat v0.1 (20170604)\n" )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
66 fmt.Fprintf( os.Stderr, " -h or --help option\n" )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
67 os.Exit( 0 )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
68 }
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
69
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
70 p := "tcp"
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
71 if *udp {
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
72 p = "udp"
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
73 }
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
74
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
75 if *listen {
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
76
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
77 if flag.NArg() != 1 {
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
78 flag.PrintDefaults()
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
79 os.Exit( 1 )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
80 }
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
81
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
82 port := flag.Arg( 0 )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
83
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
84 addr := getLocalIP()
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
85 if *laddr == "" {
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
86 addr = *laddr
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
87 }
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
88
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
89 if *verbose || *vverbose {
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
90 msg := fmt.Sprintf( "listening... %s:%s[%s]", addr, port, p )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
91 printVerbose( msg, "" )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
92 }
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
93
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
94 l, err := net.Listen( p, net.JoinHostPort( addr, port ) )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
95 if err != nil {
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
96 log.Fatal( err )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
97 }
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
98 defer l.Close()
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
99
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
100 conn, err := l.Accept()
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
101 if err != nil {
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
102 log.Fatal( err )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
103 }
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
104 io.Copy( os.Stdout, conn )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
105 conn.Close()
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
106
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
107 } else {
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
108
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
109 if flag.NArg() != 2 {
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
110 flag.PrintDefaults()
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
111 os.Exit( 1 )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
112 }
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
113
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
114 addr := flag.Arg( 0 )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
115 port := flag.Arg( 1 )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
116
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
117 conn, err := net.Dial( p, net.JoinHostPort( addr, port ) )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
118 if err != nil {
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
119 log.Fatal( err )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
120 }
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
121 defer conn.Close()
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
122 go mustCopy( os.Stdout, conn )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
123 mustCopy( conn, os.Stdin )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
124 }
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
125
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
126 if *zmode {
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
127 /*
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
128 address := "" // for me.
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
129 port := "1-1024"
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
130 server := address + ":" + port
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
131 */
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
132 }
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
133 }
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
134
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
135 func mustCopy( dst io.Writer, src io.Reader ) {
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
136 if _, err := io.Copy( dst, src ); err != nil {
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
137 log.Fatal( err )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
138 }
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
139 }
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
140
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
141 func printVerbose( vmsg, vvmsg string ) {
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
142 fmt.Fprintln( os.Stderr, vmsg, vvmsg )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
143 }
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
144
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
145 func printExample() {
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
146 fmt.Fprintln( os.Stderr, "\n[Exaples]" )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
147 fmt.Fprintln( os.Stderr, " Portscan" )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
148 fmt.Fprintln( os.Stderr, " $ nc -v -z -w 1 192.168.1.1 1-140" )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
149 fmt.Fprintln( os.Stderr, " $ nc -u -v -z -w 1 192.168.1.1 1-140\n" )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
150 fmt.Fprintln( os.Stderr, " Web-client" )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
151 fmt.Fprintln( os.Stderr, " $ nc -v www.yahoo.com 80" )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
152 fmt.Fprintln( os.Stderr, " GET / HTTP/1.0[Enter]" )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
153 fmt.Fprintln( os.Stderr, " [ENTER]\n" )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
154 fmt.Fprintln( os.Stderr, " File transfer" )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
155 fmt.Fprintln( os.Stderr, " $ nc -l 1234 > file" )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
156 fmt.Fprintln( os.Stderr, " % nc hoge.com 1234 < file\n" )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
157 fmt.Fprintln( os.Stderr, " Backdoor" )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
158 fmt.Fprintln( os.Stderr, " C:\\> nc -L -d -e cmd.exe -p 8080" )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
159 }
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
160
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
161 func getLocalIP() string {
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
162 addrs, err := net.InterfaceAddrs()
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
163 if err != nil {
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
164 log.Fatal( err )
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
165 }
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
166 for _, addr := range addrs {
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
167 if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
168 if ipnet.IP.To4() != nil {
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
169 return ipnet.IP.String()
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
170 }
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
171 }
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
172 }
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
173 return "127.0.0.1"
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
174 }
b0784443ed87 add netcat and unsleep.
pyon@macmini
parents:
diff changeset
175