Among Ncat's vast number of features there is the ability to chain Ncats together; redirection of TCP, UDP, and SCTP ports to other sites; SSL support; and proxy connections via SOCKS4, SOCKS5 or HTTP proxies (with optional proxy authentication as well). Some general principles apply to most applications and thus give you the capability of instantly adding networking support to software that would normally never support it.
Ncat 7.70SVN ( https://nmap.org/ncat ) Usage: ncat [options] [hostname] [port] Options taking a time assume seconds. Append 'ms' for milliseconds, 's' for seconds, 'm' for minutes, or 'h' for hours (e.g. 500ms). -4 Use IPv4 only -6 Use IPv6 only -U, --unixsock Use Unix domain sockets only --vsock Use vsock sockets only -C, --crlf Use CRLF for EOL sequence -c, --sh-exec <command> Executes the given command via /bin/sh -e, --exec <command> Executes the given command --lua-exec <filename> Executes the given Lua script -g hop1[,hop2,...] Loose source routing hop points (8 max) -G <n> Loose source routing hop pointer (4, 8, 12, ...) -m, --max-conns <n> Maximum <n> simultaneous connections -h, --help Display this help screen -d, --delay <time> Wait between read/writes -o, --output <filename> Dump session data to a file -x, --hex-dump <filename> Dump session data as hex to a file -i, --idle-timeout <time> Idle read/write timeout -p, --source-port port Specify source port to use -s, --source addr Specify source address to use (doesn't affect -l) -l, --listen Bind and listen for incoming connections -k, --keep-open Accept multiple connections in listen mode -n, --nodns Do not resolve hostnames via DNS -t, --telnet Answer Telnet negotiations -u, --udp Use UDP instead of default TCP --sctp Use SCTP instead of default TCP -v, --verbose Set verbosity level (can be used several times) -w, --wait <time> Connect timeout -z Zero-I/O mode, report connection status only --append-output Append rather than clobber specified output files --send-only Only send data, ignoring received; quit on EOF --recv-only Only receive data, never send anything --no-shutdown Continue half-duplex when receiving EOF on stdin --allow Allow only given hosts to connect to Ncat --allowfile A file of hosts allowed to connect to Ncat --deny Deny given hosts from connecting to Ncat --denyfile A file of hosts denied from connecting to Ncat --broker Enable Ncat's connection brokering mode --chat Start a simple Ncat chat server --proxy <addr[:port]> Specify address of host to proxy through --proxy-type <type> Specify proxy type ("http", "socks4", "socks5") --proxy-auth <auth> Authenticate with HTTP or SOCKS proxy server --proxy-dns <type> Specify where to resolve proxy destination --ssl Connect or listen with SSL --ssl-cert Specify SSL certificate file (PEM) for listening --ssl-key Specify SSL private key (PEM) for listening --ssl-verify Verify trust and domain name of certificates --ssl-trustfile PEM file containing trusted SSL certificates --ssl-ciphers Cipherlist containing SSL ciphers to use --ssl-alpn ALPN protocol list to use. --version Display Ncat's version information and exit See the ncat(1) manpage for full options, descriptions and usage examples
Ncat operates in one of two primary modes: connect mode and listen mode. Other modes, such as the HTTP proxy server, act as special cases of these two. In connect mode, Ncat works as a client. In listen mode it is a server.
In connect mode, the hostname and port arguments tell what to connect to. hostname is required, and may be a hostname or IP address. If port is supplied, it must be a decimal port number. If omitted, it defaults to 31337.
In listen mode, hostname and port control the address the server will bind to. Both arguments are optional in listen mode. If hostname is omitted, it defaults to listening on all available addresses over IPv4 and IPv6. If port is omitted, it defaults to 31337.
-4 (IPv4 only)
-6 (IPv6 only)
-U, --unixsock (Use Unix domain sockets)
-u, --udp (Use UDP)
--sctp (Use SCTP)
--vsock (Use AF_VSOCK sockets)
-g hop1[,hop2,...] (Loose source routing)
-G ptr (Set source routing pointer)
-p port, --source-port port (Specify source port)
-s host, --source host (Specify source address)
See the section called "ACCESS CONTROL OPTIONS" for information on limiting the hosts that may connect to the listening Ncat process.
-l, --listen (Listen for connections)
-m numconns, --max-conns numconns (Specify maximum number of connections)
-k, --keep-open (Accept multiple connections)
--broker (Connection brokering)
--chat (Ad-hoc "chat server")
--ssl (Use SSL)
In server mode, this option listens for incoming SSL connections, rather than plain untunneled traffic.
In UDP connect mode, this option enables Datagram TLS (DTLS). This is not supported in server mode.
--ssl-verify (Verify server certificates)
This option has no effect in server mode.
--ssl-cert certfile.pem (Specify SSL certificate)
--ssl-key keyfile.pem (Specify SSL private key)
--ssl-trustfile cert.pem (List trusted certificates)
--ssl-ciphers cipherlist (Specify SSL ciphersuites)
--ssl-alpn ALPN list (Specify ALPN protocol list)
--proxy host[:port] (Specify proxy address)
If no port is specified, the proxy protocol's well-known port is used (1080 for SOCKS and 3128 for HTTP). When specifying an IPv6 HTTP proxy server using the IP address rather than the hostname, the square-bracket notation (for example [2001:db8::1]:8080) MUST be used to separate the port from the IPv6 address. If the proxy requires authentication, use --proxy-auth.
--proxy-type proto (Specify proxy protocol)
The currently available protocols in connect mode are http (CONNECT), socks4 (SOCKSv4), and socks5 (SOCKSv5). The only server currently supported is http. If this option is not used, the default protocol is http.
--proxy-auth user[:pass] (Specify proxy credentials)
--proxy-dns type (Specify where to resolve proxy destination)
local - Hostnames are resolved locally on the Ncat host. Ncat exits with error if the hostname cannot be resolved.
remote - Hostnames are passed directly onto the remote proxy server. This is the default behavior.
both - Hostname resolution is first attempted on the Ncat host. Unresolvable hostnames are passed onto the remote proxy server.
none - Hostname resolution is completely disabled. Only a literal IPv4 or IPv6 address can be used as the proxy destination.
Local hostname resolution generally respects IP version specified with options -4 or -6, except for SOCKS4, which is incompatible with IPv6.
-e command, --exec command (Execute command)
-c command, --sh-exec command (Execute command via sh)
--lua-exec file (Execute a .lua script)
All exec options add the following variables to the child's environment:
NCAT_REMOTE_ADDR, NCAT_REMOTE_PORT
NCAT_LOCAL_ADDR, NCAT_LOCAL_PORT
NCAT_PROTO
--allow host[,host,...] (Allow connections)
--allowfile file (Allow connections from file)
--deny host[,host,...] (Deny connections)
--denyfile file (Deny connections from file)
These options accept a time parameter. This is specified in seconds by default, though you can append ms, s, m, or h to the value to specify milliseconds, seconds, minutes, or hours.
-d time, --delay time (Specify line delay)
-i time, --idle-timeout time (Specify idle timeout)
-w time, --wait time (Specify connect timeout)
-o file, --output file (Save session data)
-x file, --hex-dump file (Save session data in hex)
--append-output (Append output)
-v, --verbose (Be verbose)
-C, --crlf (Use CRLF as EOL)
-h, --help (Help screen)
--recv-only (Only receive data)
--send-only (Only send data)
--no-shutdown (Do not shutdown into half-duplex mode)
-n, --nodns (Do not resolve hostnames)
-t, --telnet (Answer Telnet negotiations)
--version (Display version)
The -U option (same as --unixsock) causes Ncat to use Unix domain sockets rather than network sockets. Unix domain sockets exist as an entry in the filesystem. You must give the name of a socket to connect to or to listen on. For example, to make a connection,
ncat -U ~/unixsock
To listen on a socket:
ncat -l -U ~/unixsock
Listen mode will create the socket if it doesn't exist. The socket will continue to exist after the program ends.
Both stream and datagram domain sockets are supported. Use -U on its own for stream sockets, or combine it with --udp for datagram sockets. Datagram sockets require a source socket to connect from. By default, a source socket with a random filename will be created as needed, and deleted when the program ends. Use the --source with a path to use a source socket with a specific name.
The --vsock option causes Ncat to use AF_VSOCK sockets rather than network sockets. A CID must be given instead of a hostname or IP address. For example, to make a connection to the host,
ncat --vsock 2 1234
To listen on a socket:
ncat -l --vsock 1234
Both stream and datagram domain sockets are supported, but socket type availability depends on the hypervisor. Use --vsock on its own for stream sockets, or combine it with --udp for datagram sockets.
Connect to example.org on TCP port 8080.
Listen for connections on TCP port 8080.
Redirect TCP port 8080 on the local machine to host on port 80.
Bind to TCP port 8081 and attach /bin/bash for the world to access freely.
Bind a shell to TCP port 8081, limit access to hosts on a local network, and limit the maximum number of simultaneous connections to 3.
Connect to smtphost:25 through a SOCKS4 server on port 1080.
Connect to smtphost:25 through a SOCKS5 server on port 1080.
Create an HTTP proxy server on localhost port 8888.
Send a file over TCP port 9899 from host2 (client) to host1 (server).
HOST2$ ncat HOST1 9899 < inputfile
Transfer in the other direction, turning Ncat into a "one file" server.
HOST2$ ncat HOST1 9899 > outputfile
The exit code reflects whether a connection was made and completed successfully. 0 means there was no error. 1 means there was a network error of some kind, for example "Connection refused" or "Connection reset". 2 is reserved for all other errors, like an invalid option or a nonexistent file.
Like its authors, Ncat isn't perfect. But you can help make it better by sending bug reports or even writing patches. If Ncat doesn't behave the way you expect, first upgrade to the latest version available from m[blue]https://nmap.orgm[]. If the problem persists, do some research to determine whether it has already been discovered and addressed. Try Googling the error message or browsing the nmap-dev archives at m[blue]http://seclists.org/m[].
Read this full manual page as well. If nothing comes of this, mail a bug report to <dev@nmap.org>. Please include everything you have learned about the problem, as well as what version of Ncat you are running and what operating system version it is running on. Problem reports and Ncat usage questions sent to dev@nmap.org are far more likely to be answered than those sent to Fyodor directly.
Code patches to fix bugs are even better than bug reports. Basic instructions for creating patch files with your changes are available at m[blue]https://svn.nmap.org/nmap/HACKINGm[]. Patches may be sent to nmap-dev (recommended) or to Fyodor directly.
The original Netcat was written by *Hobbit* <hobbit@avian.org>. While Ncat isn't built on any code from the "traditional" Netcat (or any other implementation), Ncat is most definitely based on Netcat in spirit and functionality.
Ncat is (C) 2005-2018 Insecure.Com LLC. It is distributed as free and open source software under the same license terms as our Nmap software. Precise terms and further details are available from m[blue]https://nmap.org/man/man-legal.htmlm[].
This Ncat Reference Guide is (C) 2005-2018 Insecure.Com LLC. It is hereby placed under version 3.0 of the m[blue]Creative Commons Attribution Licensem[][1]. This allows you redistribute and modify the work as you desire, as long as you credit the original source. Alternatively, you may choose to treat this document as falling under the same license as Ncap itself (discussed previously).
Source is provided to this software because we believe users have a right to know exactly what a program is going to do before they run it. This also allows you to audit the software for security holes (none have been found so far).
Source code also allows you to port Nmap (which includes Ncat) to new platforms, fix bugs, and add new features. You are highly encouraged to send your changes to <dev@nmap.org> for possible incorporation into the main distribution. By sending these changes to Fyodor or one of the Insecure.Org development mailing lists, it is assumed that you are offering the Nmap Project (Insecure.Com LLC) the unlimited, non-exclusive right to reuse, modify, and relicense the code. Nmap will always be available open source, but this is important because the inability to relicense code has caused devastating problems for other Free Software projects (such as KDE and NASM). We also occasionally relicense the code to third parties as discussed in the Nmap man page. If you wish to specify special license conditions of your contributions, just say so when you send them.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License v2.0 for more details at m[blue]http://www.gnu.org/licenses/gpl-2.0.htmlm[], or in the COPYING file included with Nmap.
Ncat should never be installed with special privileges (e.g. suid root). That would open up a major security vulnerability as other users on the system (or attackers) could use it for privilege escalation.
This product includes software developed by the m[blue]Apache Software Foundationm[][2]. A modified version of the m[blue]Libpcap portable packet capture librarym[][3] is distributed along with Ncat. The Windows version of Ncat utilized the Libpcap-derived m[blue]Npcap librarym[][4] instead. Certain raw networking functions use the m[blue]Libdnetm[][5] networking library, which was written by Dug Song. A modified version is distributed with Ncat. Ncat can optionally link with the m[blue]OpenSSL cryptography toolkitm[][6] for SSL version detection support. All of the third-party software described in this paragraph is freely redistributable under BSD-style software licenses.