33

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?

3 Answers 3

48

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.

7
  • 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, 2022 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
  • 3
    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
0

dind't work for me, also using UDP listener. The -w0 solved the problem. while true; do nc -luv 5140 -w0; done

1
  • 1
    Your answer could be improved with additional supporting information. Please edit to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers in the help center.
    – Community Bot
    Apr 14, 2023 at 12:17

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .