We are well known about telnet which is pretty much handy tool to debug and open a TCP connection to remote server:port. But we want the tool which will listen on given port for connections unlike telnet. Yeah, there is tool called netcat. Usually it comes with many linux distributions by default, also called nc. There is also a windows version . According to the scope of the article we will see how to open a TCP or UDP connection and print the data sent by connected clients, but this tool is more than capable of just listening on port for a connection.
nc [-46DdhklnrStUuvzC] [-i interval] [-p source_port] [-s source_ip_address] [-T ToS] [-wtimeout] [-X proxy_protocol] [ -x proxy_address[ :port]] [hostname] [port[s]]
Listen for UDP on specific host and port using netcat
Listen for the connections and print the data sent by the clients
nc -lvu [IP Address] 5060
nc -lvu 5060
nc -lvu 192.168.0.5 5060
nc is the command alias for netcat.
The break down of above command
l Forcing netcat to listen on given host and port instead of opening/making connection with remote host and port
v Give verbose output
u Use UDP. That is, listen for UDP on give port, by default it listens for TCP unless we give this option.
Ip Address It is optional, if it is not specified localhost will be used
Port You must specify the port on which nc should listen on.
Listen for TCP on specific host and port using netcat
nc -lv 9876
This is same as UDP mentioned above except we haven’t specified the option -u . Where netcat will listen on TCP port by default with out that option.
Now netcat is listening on the given port on localhost. You can connect to this TCP port from the other tab(terminal) using either netcat or telnet
Connect Using Telnet
telnet localhost 9876 Trying ::1... telnet: connect to address ::1: Connection refused Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Hello
After connected, type “Hello”, you should see that text in the tab where netcat is listening
Connect Using NetCat
nc localhost 9876
$ nc localhost 9876 Hello Connected, sending text
After connected, we sent some text. It should be displayed on tab where nc is listening.
You can quit the client by sending interrupt CTRL + D. If you quit the client, the server(nc command) will also stop listening. We can use the option -k to forces nc to stay listening for another connection after its current connection is completed. It is an error to use this option without the -l option.
nc -lkv 9876
I hope, these examples gave you some good understanding. As you can see, we can use nc as both server and client. Practically it is more capable than you think. If you are networking geek or dealing with network application or protocols. You can find this handy for your debugging purpose.
Let’s say, I have web hook URL configured on other 3rd party website. I want to check whether that server is sending events or not. If sending, I would like to see how is API and message format and I don’t have my program ready yet. In such a case, you simply listen on host and port which are configured on 3rd party web site to receive events and simply you can check the data received by nc
$ nc -lvk 8080 GET /user_login HTTP/1.1 Host: localhost:8080 Connection: keep-alive Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Upgrade-Insecure-Requests: 1
The tool netcat (nc) is very powerful tool, it is very simple tool but there are lot of possibilities. Anti-viruses on windows will detect this program as malware sometimes. Where it can also be used as a backdoor.