1 .\" $OpenBSD: nc.1,v 1.88 2017/11/28 16:59:10 jsing Exp $
3 .\" Copyright (c) 1996 David Sacerdote
4 .\" All rights reserved.
6 .\" Redistribution and use in source and binary forms, with or without
7 .\" modification, are permitted provided that the following conditions
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
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.
28 .Dd $Mdocdate: November 28 2017 $
33 .Nd arbitrary TCP and UDP connections and listens
36 .Op Fl 46cDdFhklNnrStUuvz
46 .Op Fl o Ar staplefile
47 .Op Fl P Ar proxy_username
48 .Op Fl p Ar source_port
55 .Op Fl X Ar proxy_protocol
56 .Op Fl x Ar proxy_address Ns Op : Ns Ar port
57 .Op Fl Z Ar peercertfile
65 utility is used for just about anything under the sun involving TCP,
69 It can open TCP connections, send UDP packets, listen on arbitrary
70 TCP and UDP ports, do port scanning, and deal with both IPv4 and
75 scripts nicely, and separates error messages onto standard error instead
76 of sending them to standard output, as
82 .Bl -bullet -offset indent -compact
86 shell-script based HTTP clients and servers
88 network daemon testing
90 a SOCKS or HTTP ProxyCommand for
96 The options are as follows:
101 to use IPv4 addresses only.
105 to use IPv6 addresses only.
107 Specifies the filename from which the public key part of the TLS
108 certificate is loaded, in PEM format.
109 May only be used with TLS.
111 If using a TCP socket to connect or listen, use TLS.
112 Illegal if not using TCP sockets.
114 Enable debugging on the socket.
116 Do not attempt to read from stdin.
118 Specify the name that must be present in the peer certificate when using TLS.
119 Illegal if not using TLS.
121 Pass the first connected socket using
124 This is useful in conjunction with
128 perform connection setup with a proxy but then leave the rest of the
129 connection to another program (e.g.\&
136 Specifies the required hash string of the peer certificate when using TLS.
137 The string format required is that used by
138 .Xr tls_peer_cert_hash 3 .
139 Illegal if not using TLS, and may not be used with -T noverify.
145 Specifies the size of the TCP receive buffer.
147 Specifies a delay time interval between lines of text sent and received.
148 Also causes a delay time between connections to multiple ports.
150 Specifies the filename from which the private key
151 is loaded in PEM format.
152 May only be used with TLS.
156 to stay listening for another connection after its current connection
158 It is an error to use this option without the
161 When used together with the
163 option, the server socket is not connected and it can receive UDP datagrams from
168 should listen for an incoming connection rather than initiate a
169 connection to a remote host.
170 It is an error to use this option in conjunction with the
176 Additionally, any timeouts specified with the
180 Set the TTL / hop limit of outgoing packets.
182 Ask the kernel to drop incoming packets whose TTL / hop limit is under
186 the network socket after EOF on the input.
187 Some servers require this to finish their work.
189 Do not do any DNS or service lookups on any specified addresses,
192 Specifies the size of the TCP send buffer.
193 .It Fl o Ar staplefile
194 Specifies the filename from which to load data to be stapled
195 during the TLS handshake.
196 The file is expected to contain an OCSP response from an OCSP server in
198 May only be used with TLS and when a certificate is being used.
199 .It Fl P Ar proxy_username
200 Specifies a username to present to a proxy server that requires authentication.
201 If no username is specified then authentication will not be attempted.
202 Proxy authentication is only supported for HTTP CONNECT proxies at present.
203 .It Fl p Ar source_port
204 Specifies the source port
206 should use, subject to privilege restrictions and availability.
207 It is an error to use this option in conjunction with the
211 Specifies the filename from which the root CA bundle for certificate
212 verification is loaded, in PEM format.
213 Illegal if not using TLS.
215 .Pa /etc/ssl/cert.pem .
217 Specifies that source and/or destination ports should be chosen randomly
218 instead of sequentially within a range or in the order that the system
221 Enables the RFC 2385 TCP MD5 signature option.
223 Specifies the IP of the interface which is used to send the packets.
226 datagram sockets, specifies the local temporary socket file
227 to create and use so that datagrams can be received.
228 It is an error to use this option in conjunction with the
232 Change IPv4 TOS value or TLS options.
237 which disables certificate verification;
239 which disables certificate name checking;
241 which requires a client certificate on incoming connections; or
243 which requires the peer to provide a valid stapled OCSP response
245 The following TLS options specify a value in the form of a key=value pair:
247 which allows the supported TLS ciphers to be specified (see
248 .Xr tls_config_set_ciphers 3
249 for further details);
251 which allows the supported TLS protocols to be specified (see
252 .Xr tls_config_parse_protocols 3
253 for further details).
254 It is illegal to specify TLS options if not using TLS.
265 or one of the DiffServ Code Points:
269 or a number in either hex or decimal.
273 to send RFC 854 DON'T and WON'T responses to RFC 854 DO and WILL requests.
274 This makes it possible to use
276 to script telnet sessions.
282 Use UDP instead of the default option of TCP.
285 sockets, use a datagram socket instead of a stream socket.
288 socket is used, a temporary receiving socket is created in
294 Set the routing table to be used.
298 give more verbose output.
299 .It Fl W Ar recvlimit
300 Terminate after receiving
302 packets from the network.
304 Connections which cannot be established or are idle timeout after
309 flag has no effect on the
313 will listen forever for a connection, with or without the
316 The default is no timeout.
317 .It Fl X Ar proxy_protocol
320 should use the specified protocol when talking to the proxy server.
321 Supported protocols are
329 If the protocol is not specified, SOCKS version 5 is used.
330 .It Fl x Ar proxy_address Ns Op : Ns Ar port
341 is not specified, the well-known port for the proxy protocol is used (1080
342 for SOCKS, 3128 for HTTPS).
343 An IPv6 address can be specified unambiguously by enclosing
346 .It Fl Z Ar peercertfile
347 Specifies the filename in which the peer supplied certificates will be saved
349 May only be used with TLS.
353 should just scan for listening daemons, without sending any data to them.
354 It is an error to use this option in conjunction with the
360 can be a numerical IP address or a symbolic hostname
364 In general, a destination must be specified,
368 (in which case the local host is used).
371 sockets, a destination is required and is the socket path to connect to
377 can be a specified as a numeric port number, or as a service name.
378 Ports may be specified in a range of the form nn-mm.
380 a destination port must be specified,
384 .Sh CLIENT/SERVER MODEL
385 It is quite simple to build a very basic client/server model using
387 On one console, start
389 listening on a specific port for a connection.
395 is now listening on port 1234 for a connection.
397 .Pq or a second machine ,
398 connect to the machine and port being listened on:
400 .Dl $ nc 127.0.0.1 1234
402 There should now be a connection between the ports.
403 Anything typed at the second console will be concatenated to the first,
405 After the connection has been set up,
407 does not really care which side is being used as a
409 and which side is being used as a
411 The connection may be terminated using an
415 The example in the previous section can be expanded to build a
416 basic data transfer model.
417 Any information input into one end of the connection will be output
418 to the other end, and input and output can be easily captured in order to
419 emulate file transfer.
423 to listen on a specific port, with output captured into a file:
425 .Dl $ nc -l 1234 \*(Gt filename.out
427 Using a second machine, connect to the listening
429 process, feeding it the file which is to be transferred:
431 .Dl $ nc -N host.example.com 1234 \*(Lt filename.in
433 After the file has been transferred, the connection will close automatically.
434 .Sh TALKING TO SERVERS
435 It is sometimes useful to talk to servers
437 rather than through a user interface.
438 It can aid in troubleshooting,
439 when it might be necessary to verify what data a server is sending
440 in response to commands issued by the client.
441 For example, to retrieve the home page of a web site:
442 .Bd -literal -offset indent
443 $ printf "GET / HTTP/1.0\er\en\er\en" | nc host.example.com 80
446 Note that this also displays the headers sent by the web server.
447 They can be filtered, using a tool such as
451 More complicated examples can be built up when the user knows the format
452 of requests required by the server.
453 As another example, an email may be submitted to an SMTP server using:
454 .Bd -literal -offset indent
455 $ nc localhost 25 \*(Lt\*(Lt EOF
456 HELO host.example.com
457 MAIL FROM:\*(Ltuser@host.example.com\*(Gt
458 RCPT TO:\*(Ltuser2@host.example.com\*(Gt
466 It may be useful to know which ports are open and running services on
470 flag can be used to tell
472 to report open ports,
473 rather than initiate a connection.
475 .Bd -literal -offset indent
476 $ nc -z host.example.com 20-30
477 Connection to host.example.com 22 port [tcp/ssh] succeeded!
478 Connection to host.example.com 25 port [tcp/smtp] succeeded!
481 The port range was specified to limit the search to ports 20 \- 30.
483 Alternatively, it might be useful to know which server software
484 is running, and which versions.
485 This information is often contained within the greeting banners.
486 In order to retrieve these, it is necessary to first make a connection,
487 and then break the connection when the banner has been retrieved.
488 This can be accomplished by specifying a small timeout with the
490 flag, or perhaps by issuing a
492 command to the server:
493 .Bd -literal -offset indent
494 $ echo "QUIT" | nc host.example.com 20-30
495 SSH-1.99-OpenSSH_3.6.1p2
497 220 host.example.com IMS SMTP Receiver Version 0.84 Ready
500 Open a TCP connection to port 42 of host.example.com, using port 31337 as
501 the source port, with a timeout of 5 seconds:
503 .Dl $ nc -p 31337 -w 5 host.example.com 42
505 Open a TCP connection to port 443 of www.example.com, and negotiate TLS with
506 any supported TLS protocol version and "compat" ciphers:
508 .Dl $ nc -cv -T protocols=all -T ciphers=compat www.example.com 443
510 Open a TCP connection to port 443 of www.google.ca, and negotiate TLS.
511 Check for a different name in the certificate for validation:
513 .Dl $ nc -cv -e adsf.au.doubleclick.net www.google.ca 443
515 Open a UDP connection to port 53 of host.example.com:
517 .Dl $ nc -u host.example.com 53
519 Open a TCP connection to port 42 of host.example.com using 10.1.2.3 as the
520 IP for the local end of the connection:
522 .Dl $ nc -s 10.1.2.3 host.example.com 42
524 Create and listen on a
528 .Dl $ nc -lU /var/tmp/dsocket
530 Connect to port 42 of host.example.com via an HTTP proxy at 10.2.3.4,
532 This example could also be used by
538 for more information.
540 .Dl $ nc -x10.2.3.4:8080 -Xconnect host.example.com 42
542 The same example again, this time enabling proxy authentication with username
544 if the proxy requires it:
546 .Dl $ nc -x10.2.3.4:8080 -Xconnect -Pruser host.example.com 42
551 Original implementation by *Hobbit*
552 .Aq Mt hobbit@avian.org .
554 Rewritten with IPv6 support by
555 .An Eric Jackson Aq Mt ericj@monkey.org .
557 UDP port scans using the
559 combination of flags will always report success irrespective of
560 the target machine's state.
562 in conjunction with a traffic sniffer either on the target machine
563 or an intermediary device,
566 combination could be useful for communications diagnostics.
567 Note that the amount of UDP traffic generated may be limited either
568 due to hardware resources and/or configuration settings.