55

I'm not sure about when to use nc, netcat or ncat. If one is the deprecated version of another? If one is only available on one distribution? If it is the same command but with different names?

In fact I'm a bit confused. My question comes from wanting to do a network speed test between two CentOS 7 servers. I came across several examples using nc and dd but not many using netcat or ncat.

Could someone clarify this for me please?

Kusalananda
  • 333,661
Pozinux
  • 1,365

3 Answers3

51

nc and netcat are two names for the same program (typically, one will be a symlink to the other). Though—for plenty of confusion—there are two different implementations of Netcat ("traditional" and "OpenBSD"), and they take different options and have different features.

Ncat is the same idea, but from the Nmap project. There is also socat, which is a similar idea. There is also /dev/tcp, an (optional) Bash feature.

However, if you're looking to do network speed tests then all of the above are the wrong answer. You're looking for iperf3 (site 1 or site 2 or code).

derobert
  • 109,670
  • Do you mean that testing (quick test) network speed using dd and nc is not reliable? – Pozinux May 30 '17 at 18:20
  • 4
    @Pozinux dd/nc should give you an average bandwidth, but none of the extra useful info iperf3 gives you (was it stable, did it experience TCP slow start, were there retransmits, etc.). All of those are very useful (almost required) to troubleshoot unexpectedly low bandwidth, or even to understand what the "you got X mbps" means. – derobert May 30 '17 at 18:24
  • Ok thanks, I didn't know about this tool. – Pozinux May 30 '17 at 18:31
  • One difference worth noting is ncat can encrypt its traffic via --ssl option, nc does not have such option. – jumping_monkey Nov 25 '21 at 05:08
  • On RHEL/CentOS 7, there are /usr/bin/ncat (provided by the nmap-ncat RPM package) and /usr/bin/netcat (which is OpenBSD nc, provided by the netcat RPM package). And /usr/bin/nc is just a symbolic link to one of the two previous ones that can be managed on RHEL/CentOS 7 by alternatives --config nmap, and on RHEL 8 (or later) or derivatives by alternatives --config nc). – rsc Mar 27 '22 at 01:33
14

Looking at the packets in Debian, there are two different implementations of netcat (nc), I think both of them install with netcat as well as nc symlinked to the same binary (Though they use Debian's "alternatives" system to control which one of the implementation appears with the main name.) Those two are netcat-traditional ("the "classic" netcat, written by Hobbit. It lacks many features found in netcat-openbsd.") and netcat-openbsd ("the OpenBSD rewrite of netcat, including support for IPv6, proxies, and Unix sockets.").

ncat is the version of netcat from the Nmap Project claimed to be "a much-improved reimplementation of the venerable Netcat".

All three seem to have the same basic functionality, as in being able to open a socket and connect or listen, but for anything above that, you may want to check the manual of your version. (The OpenBSD one doesn't support -e for executing a command after connection, for example.)

ilkkachu
  • 138,973
1

ncat supports SSL which is great for testing https sessions. nc/netcat requires you to use "openssl s_client ..."