28

There's -k option in OS X (BSD) version of netcat to keep listening after current connection is completed. However in Debian (GNU?) version this option is missing.

There's -q -1 option to listen forever after EOF appears on stdin but this doesn't do the trick and connections close anyway.

Is there any way to force Debian's netcat to keep listening indefinitely?

2 Answers 2

39

Debian's implementation of Netcat does have the -k option. However, it's not documented in the manual because it doesn't work in a reliable manner, for some unknown reason.

Luckily, there's ncat, which is yet another implementation of Netcat and is part of the nmap package. This one has a working -k. You can get it by installing nmap. ncat's options and usage are more or less similar to other implementations of Netcat, so your knowledge of other implementations should transfer very well to ncat.

5
  • 1
    Thank you! Thanks to you I found best version of netcat ever.
    – Aalex Gabi
    Oct 20, 2017 at 20:04
  • 2
    openbsd-netcat appears to have the -k option as well Jun 19, 2018 at 5:01
  • 2
    Package is netcat-openbsd, not openbsd-netcat for those who might not click @AndrewSavinykh link Apr 8, 2019 at 22:22
  • ncat worked for me in macos
    – Vishrant
    Oct 18, 2020 at 21:08
  • ncat, UDP and -k don't work together: ncat -u -l -k 1900 results in Ncat: UDP mode does not support the -k or --keep-open options, except with --exec or --sh-exec. QUITTING.
    – Abdull
    Mar 15 at 23:14
2

I have the same problem if netcat gets a rst or fin packet, I think.

You could simply call netcat again as soon as it closes using a bash loop.

while true; do nc -lv <listeningport> ; done
4
  • 2
    Welcome on the SU! Please explain, what your code is doing and how does it work.
    – peterh
    Mar 5, 2020 at 21:33
  • 2
    This is different from ncat or opensbd-ncat -k option, which will actually allow multiple clients to connect at the same time; your solution will only allow one after the other Apr 9, 2020 at 21:14
  • 1
    @peterh-ReinstateMonica it is doing a loop that starts a new netcat command when the previous one has returned. While true for infinite loop.
    – Tinmarino
    Oct 25, 2020 at 21:24
  • This doesn't work for me. After the message is sent, netcat just hangs until I press Enter. Maybe because I'm listening on UDP? Adding -w0 to the netcat command fixes it, e.g. while true; do nc -luv 5140 -w0; done
    – bmaupin
    Sep 27, 2021 at 13:33

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.