]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/netcat/nc.1
Merge/update to bmake-20230126
[FreeBSD/FreeBSD.git] / contrib / netcat / nc.1
1 .\"     $OpenBSD: nc.1,v 1.68 2015/03/26 10:35:04 tobias Exp $
2 .\"
3 .\" Copyright (c) 1996 David Sacerdote
4 .\" All rights reserved.
5 .\"
6 .\" Redistribution and use in source and binary forms, with or without
7 .\" modification, are permitted provided that the following conditions
8 .\" are met:
9 .\" 1. Redistributions of source code must retain the above copyright
10 .\"    notice, this list of conditions and the following disclaimer.
11 .\" 2. Redistributions in binary form must reproduce the above copyright
12 .\"    notice, this list of conditions and the following disclaimer in the
13 .\"    documentation and/or other materials provided with the distribution.
14 .\" 3. The name of the author may not be used to endorse or promote products
15 .\"    derived from this software without specific prior written permission
16 .\"
17 .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 .\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 .\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 .\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 .\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 .\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 .\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 .\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 .\"
28 .\" $FreeBSD$
29 .\"
30 .Dd January 17, 2023
31 .Dt NC 1
32 .Os
33 .Sh NAME
34 .Nm nc
35 .Nd arbitrary TCP and UDP connections and listens
36 .Sh SYNOPSIS
37 .Nm nc
38 .Bk -words
39 .Op Fl 46DdEFhklMNnrStUuvz
40 .Op Fl e Ar IPsec_policy
41 .Op Fl I Ar length
42 .Op Fl i Ar interval
43 .Op Fl -no-tcpopt
44 .Op Fl -sctp
45 .Op Fl O Ar length
46 .Op Fl P Ar proxy_username
47 .Op Fl p Ar source_port
48 .Op Fl s Ar source
49 .Op Fl T Ar toskeyword
50 .Op Fl -tun Ar tundev
51 .Op Fl V Ar rtable
52 .Op Fl w Ar timeout
53 .Op Fl X Ar proxy_protocol
54 .Oo Xo
55 .Fl x Ar proxy_address Ns Oo : Ns
56 .Ar port Oc
57 .Xc Oc
58 .Op Ar destination
59 .Op Ar port
60 .Ek
61 .Sh DESCRIPTION
62 The
63 .Nm
64 (or
65 .Nm netcat )
66 utility is used for just about anything under the sun involving TCP,
67 UDP, or
68 .Ux Ns -domain
69 sockets.
70 It can open TCP connections, send UDP packets, listen on arbitrary
71 TCP and UDP ports, do port scanning, and deal with both IPv4 and
72 IPv6.
73 Unlike
74 .Xr telnet 1 ,
75 .Nm
76 scripts nicely, and separates error messages onto standard error instead
77 of sending them to standard output, as
78 .Xr telnet 1
79 does with some.
80 .Pp
81 Common uses include:
82 .Pp
83 .Bl -bullet -offset indent -compact
84 .It
85 simple TCP proxies
86 .It
87 shell-script based HTTP clients and servers
88 .It
89 network daemon testing
90 .It
91 a SOCKS or HTTP ProxyCommand for
92 .Xr ssh 1
93 .It
94 and much, much more
95 .El
96 .Pp
97 The options are as follows:
98 .Bl -tag -width Ds
99 .It Fl 4
100 Forces
101 .Nm
102 to use IPv4 addresses only.
103 .It Fl 6
104 Forces
105 .Nm
106 to use IPv6 addresses only.
107 .It Fl D
108 Enable debugging on the socket.
109 .It Fl d
110 Do not attempt to read from stdin.
111 .It Fl E
112 Shortcut for
113 .Qo
114 .Li "-e 'in ipsec esp/transport//require'"
115 .Li "-e 'out ipsec esp/transport//require'" 
116 .Qc ,
117 which enables IPsec ESP transport mode in both
118 directions.
119 .It Fl e
120 If IPsec support is available, then one can specify the IPsec policies
121 to be used using the syntax described in
122 .Xr ipsec_set_policy 3 .
123 This flag can be specified up to two times, as typically one policy for
124 each direction is needed.
125 .It Fl F
126 Pass the first connected socket using
127 .Xr sendmsg 2
128 to stdout and exit.
129 This is useful in conjunction with
130 .Fl X
131 to have
132 .Nm
133 perform connection setup with a proxy but then leave the rest of the
134 connection to another program (e.g.\&
135 .Xr ssh 1
136 using the
137 .Xr ssh_config 5
138 .Cm ProxyUseFdpass
139 option).
140 .It Fl h
141 Prints out
142 .Nm
143 help.
144 .It Fl I Ar length
145 Specifies the size of the TCP receive buffer.
146 .It Fl i Ar interval
147 Specifies a delay time interval between lines of text sent and received.
148 Also causes a delay time between connections to multiple ports.
149 .It Fl k
150 Forces
151 .Nm
152 to stay listening for another connection after its current connection
153 is completed.
154 It is an error to use this option without the
155 .Fl l
156 option.
157 When used together with the
158 .Fl u
159 option, the server socket is not connected and it can receive UDP datagrams from
160 multiple hosts.
161 .It Fl l
162 Used to specify that
163 .Nm
164 should listen for an incoming connection rather than initiate a
165 connection to a remote host.
166 It is an error to use this option in conjunction with the
167 .Fl p ,
168 .Fl s ,
169 or
170 .Fl z
171 options.
172 Additionally, any timeouts specified with the
173 .Fl w
174 option are ignored.
175 .It Fl M
176 Collect per-connection TCP statistics using the
177 .Xr stats 3
178 framework and print them in JSON format to
179 .Xr stderr 4
180 after the connection is closed.
181 .It Fl N
182 .Xr shutdown 2
183 the network socket after EOF on the input.
184 Some servers require this to finish their work.
185 .It Fl n
186 Do not do any DNS or service lookups on any specified addresses,
187 hostnames or ports.
188 .It Fl -no-tcpopt
189 Disables the use of TCP options on the socket, by setting the boolean
190 TCP_NOOPT
191 socket option.
192 .It Fl -sctp
193 Use SCTP instead of the default option of TCP.
194 .It Fl O Ar length
195 Specifies the size of the TCP send buffer.
196 .It Fl P Ar proxy_username
197 Specifies a username to present to a proxy server that requires authentication.
198 If no username is specified then authentication will not be attempted.
199 Proxy authentication is only supported for HTTP CONNECT proxies at present.
200 .It Fl p Ar source_port
201 Specifies the source port
202 .Nm
203 should use, subject to privilege restrictions and availability.
204 It is an error to use this option in conjunction with the
205 .Fl l
206 option.
207 .It Fl r
208 Specifies that source and/or destination ports should be chosen randomly
209 instead of sequentially within a range or in the order that the system
210 assigns them.
211 .It Fl S
212 Enables the RFC 2385 TCP MD5 signature option.
213 .It Fl s Ar source
214 Specifies the IP of the interface which is used to send the packets.
215 For
216 .Ux Ns -domain
217 datagram sockets, specifies the local temporary socket file
218 to create and use so that datagrams can be received.
219 It is an error to use this option in conjunction with the
220 .Fl l
221 option.
222 .It Fl T Ar toskeyword
223 Change IPv4 TOS value.
224 .Ar toskeyword
225 may be one of
226 .Ar critical ,
227 .Ar inetcontrol ,
228 .Ar lowdelay ,
229 .Ar netcontrol ,
230 .Ar throughput ,
231 .Ar reliability ,
232 or one of the DiffServ Code Points:
233 .Ar ef ,
234 .Ar af11 ... af43 ,
235 .Ar cs0 ... cs7 ;
236 or a number in either hex or decimal.
237 .It Fl t
238 Causes
239 .Nm
240 to send RFC 854 DON'T and WON'T responses to RFC 854 DO and WILL requests.
241 This makes it possible to use
242 .Nm
243 to script telnet sessions.
244 .It Fl -tun Ar tundev
245 Causes
246 .Nm
247 to use the provided
248 .Xr tun 4
249 for input and output rather than the default of stdin and stdout.
250 .It Fl U
251 Specifies to use
252 .Ux Ns -domain
253 sockets.
254 .It Fl u
255 Use UDP instead of the default option of TCP.
256 For
257 .Ux Ns -domain
258 sockets, use a datagram socket instead of a stream socket.
259 If a
260 .Ux Ns -domain
261 socket is used, a temporary receiving socket is created in
262 .Pa /tmp
263 unless the
264 .Fl s
265 flag is given.
266 .It Fl V Ar rtable
267 Set the routing table
268 .Pq Dq FIB
269 to be used.
270 .It Fl v
271 Have
272 .Nm
273 give more verbose output.
274 .It Fl w Ar timeout
275 Connections which cannot be established or are idle timeout after
276 .Ar timeout
277 seconds.
278 The
279 .Fl w
280 flag has no effect on the
281 .Fl l
282 option, i.e.\&
283 .Nm
284 will listen forever for a connection, with or without the
285 .Fl w
286 flag.
287 The default is no timeout.
288 .It Fl X Ar proxy_protocol
289 Requests that
290 .Nm
291 should use the specified protocol when talking to the proxy server.
292 Supported protocols are
293 .Dq 4
294 (SOCKS v.4),
295 .Dq 5
296 (SOCKS v.5)
297 and
298 .Dq connect
299 (HTTPS proxy).
300 If the protocol is not specified, SOCKS version 5 is used.
301 .It Xo
302 .Fl x Ar proxy_address Ns Oo : Ns
303 .Ar port Oc
304 .Xc
305 Requests that
306 .Nm
307 should connect to
308 .Ar destination
309 using a proxy at
310 .Ar proxy_address
311 and
312 .Ar port .
313 If
314 .Ar port
315 is not specified, the well-known port for the proxy protocol is used (1080
316 for SOCKS, 3128 for HTTPS).
317 .It Fl z
318 Specifies that
319 .Nm
320 should just scan for listening daemons, without sending any data to them.
321 It is an error to use this option in conjunction with the
322 .Fl l
323 option.
324 .El
325 .Pp
326 .Ar destination
327 can be a numerical IP address or a symbolic hostname
328 (unless the
329 .Fl n
330 option is given).
331 In general, a destination must be specified,
332 unless the
333 .Fl l
334 option is given
335 (in which case the local host is used).
336 For
337 .Ux Ns -domain
338 sockets, a destination is required and is the socket path to connect to
339 (or listen on if the
340 .Fl l
341 option is given).
342 .Pp
343 .Ar port
344 can be a single integer or a range of ports.
345 Ranges are in the form nn-mm.
346 In general,
347 a destination port must be specified,
348 unless the
349 .Fl U
350 option is given.
351 .Sh CLIENT/SERVER MODEL
352 It is quite simple to build a very basic client/server model using
353 .Nm .
354 On one console, start
355 .Nm
356 listening on a specific port for a connection.
357 For example:
358 .Pp
359 .Dl $ nc -l 1234
360 .Pp
361 .Nm
362 is now listening on port 1234 for a connection.
363 On a second console
364 .Pq or a second machine ,
365 connect to the machine and port being listened on:
366 .Pp
367 .Dl $ nc 127.0.0.1 1234
368 .Pp
369 There should now be a connection between the ports.
370 Anything typed at the second console will be concatenated to the first,
371 and vice-versa.
372 After the connection has been set up,
373 .Nm
374 does not really care which side is being used as a
375 .Sq server
376 and which side is being used as a
377 .Sq client .
378 The connection may be terminated using an
379 .Dv EOF
380 .Pq Sq ^D .
381 .Sh DATA TRANSFER
382 The example in the previous section can be expanded to build a
383 basic data transfer model.
384 Any information input into one end of the connection will be output
385 to the other end, and input and output can be easily captured in order to
386 emulate file transfer.
387 .Pp
388 Start by using
389 .Nm
390 to listen on a specific port, with output captured into a file:
391 .Pp
392 .Dl $ nc -l 1234 \*(Gt filename.out
393 .Pp
394 Using a second machine, connect to the listening
395 .Nm
396 process, feeding it the file which is to be transferred:
397 .Pp
398 .Dl $ nc -N host.example.com 1234 \*(Lt filename.in
399 .Pp
400 After the file has been transferred, the connection will close automatically.
401 .Sh TALKING TO SERVERS
402 It is sometimes useful to talk to servers
403 .Dq by hand
404 rather than through a user interface.
405 It can aid in troubleshooting,
406 when it might be necessary to verify what data a server is sending
407 in response to commands issued by the client.
408 For example, to retrieve the home page of a web site:
409 .Bd -literal -offset indent
410 $ printf "GET / HTTP/1.0\er\en\er\en" | nc host.example.com 80
411 .Ed
412 .Pp
413 Note that this also displays the headers sent by the web server.
414 They can be filtered, using a tool such as
415 .Xr sed 1 ,
416 if necessary.
417 .Pp
418 More complicated examples can be built up when the user knows the format
419 of requests required by the server.
420 As another example, an email may be submitted to an SMTP server using:
421 .Bd -literal -offset indent
422 $ nc localhost 25 \*(Lt\*(Lt EOF
423 HELO host.example.com
424 MAIL FROM:\*(Ltuser@host.example.com\*(Gt
425 RCPT TO:\*(Ltuser2@host.example.com\*(Gt
426 DATA
427 Body of email.
428 \&.
429 QUIT
430 EOF
431 .Ed
432 .Sh PORT SCANNING
433 It may be useful to know which ports are open and running services on
434 a target machine.
435 The
436 .Fl z
437 flag can be used to tell
438 .Nm
439 to report open ports,
440 rather than initiate a connection.
441 For example:
442 .Bd -literal -offset indent
443 $ nc -z host.example.com 20-30
444 Connection to host.example.com 22 port [tcp/ssh] succeeded!
445 Connection to host.example.com 25 port [tcp/smtp] succeeded!
446 .Ed
447 .Pp
448 The port range was specified to limit the search to ports 20 \- 30.
449 .Pp
450 Alternatively, it might be useful to know which server software
451 is running, and which versions.
452 This information is often contained within the greeting banners.
453 In order to retrieve these, it is necessary to first make a connection,
454 and then break the connection when the banner has been retrieved.
455 This can be accomplished by specifying a small timeout with the
456 .Fl w
457 flag, or perhaps by issuing a
458 .Qq Dv QUIT
459 command to the server:
460 .Bd -literal -offset indent
461 $ echo "QUIT" | nc host.example.com 20-30
462 SSH-1.99-OpenSSH_3.6.1p2
463 Protocol mismatch.
464 220 host.example.com IMS SMTP Receiver Version 0.84 Ready
465 .Ed
466 .Sh EXAMPLES
467 Open a TCP connection to port 42 of host.example.com, using port 31337 as
468 the source port, with a timeout of 5 seconds:
469 .Pp
470 .Dl $ nc -p 31337 -w 5 host.example.com 42
471 .Pp
472 Open a UDP connection to port 53 of host.example.com:
473 .Pp
474 .Dl $ nc -u host.example.com 53
475 .Pp
476 Open a TCP connection to port 42 of host.example.com using 10.1.2.3 as the
477 IP for the local end of the connection:
478 .Pp
479 .Dl $ nc -s 10.1.2.3 host.example.com 42
480 .Pp
481 Open a TCP connection to port 42 of host.example.com using IPsec ESP for
482 incoming and outgoing traffic.
483 .Pp
484 .Dl $ nc -E host.example.com 42
485 .Pp
486 Open a TCP connection to port 42 of host.example.com using IPsec ESP for
487 outgoing traffic only.
488 .Pp
489 .Dl $ nc -e 'out ipsec esp/transport//require' host.example.com 42
490 .Pp
491 Create and listen on a
492 .Ux Ns -domain
493 stream socket:
494 .Pp
495 .Dl $ nc -lU /var/tmp/dsocket
496 .Pp
497 Connect to port 42 of host.example.com via an HTTP proxy at 10.2.3.4,
498 port 8080.
499 This example could also be used by
500 .Xr ssh 1 ;
501 see the
502 .Cm ProxyCommand
503 directive in
504 .Xr ssh_config 5
505 for more information.
506 .Pp
507 .Dl $ nc -x10.2.3.4:8080 -Xconnect host.example.com 42
508 .Pp
509 The same example again, this time enabling proxy authentication with username
510 .Dq ruser
511 if the proxy requires it:
512 .Pp
513 .Dl $ nc -x10.2.3.4:8080 -Xconnect -Pruser host.example.com 42
514 .Sh EXIT STATUS
515 .Ex -std
516 .Sh SEE ALSO
517 .Xr cat 1 ,
518 .Xr setfib 1 ,
519 .Xr ssh 1 ,
520 .Xr tcp 4
521 .Sh AUTHORS
522 Original implementation by *Hobbit*
523 .Aq Mt hobbit@avian.org .
524 .br
525 Rewritten with IPv6 support by
526 .An Eric Jackson Aq Mt ericj@monkey.org .
527 .Sh CAVEATS
528 UDP port scans using the
529 .Fl uz
530 combination of flags will always report success irrespective of
531 the target machine's state.
532 However,
533 in conjunction with a traffic sniffer either on the target machine
534 or an intermediary device,
535 the
536 .Fl uz
537 combination could be useful for communications diagnostics.
538 Note that the amount of UDP traffic generated may be limited either
539 due to hardware resources and/or configuration settings.