52

Is anybody else not able to get nc -lp 8888 working on Mac OS X? Is there another way to get this to work?

Hennes
  • 64,768
  • 7
  • 111
  • 168
kzh
  • 4,243
  • 7
  • 28
  • 33
  • How does it not work? Does it return an error? – heavyd Mar 03 '10 at 01:58
  • I am not near a mac right now, but it returns the useage. `nc -lp 8888` works on my Ubuntu box. – kzh Mar 03 '10 at 15:50
  • Had never heard of this until reading a book on Docker. They also mention something called socat, which is supposedly this command on steriods. More info here https://stackoverflow.com/questions/16808543/install-socat-on-mac and here https://linux.die.net/man/1/socat and here https://www.youtube.com/watch?v=ZnwZA1GRqkw – JGFMK Sep 26 '19 at 08:57

4 Answers4

61

It looks to me as if the -p option does nothing on the OS X version of netcat. To get it to work, I must do nc -l localhost 8888.

kzh
  • 4,243
  • 7
  • 28
  • 33
  • 9
    Unless installed from homebrew, then `nc -l -p 8888` works. – user1338062 Dec 03 '12 at 13:27
  • 4
    From `man nc`: `-l ... It is an error to use this option in conjunction with the -p, -s, or -z options. ...` You probably want to just stick with @kzh's command there – fatuhoku Oct 11 '13 at 18:41
  • @fatuhoku I just checked my manual, and yest it does say that in there, but the weird thing is that if I do `nc -lp 8888` or `nc -l -p 8888` it will then take `-p` to mean listening port. So my distributed copy does not listen to its own manual! – kzh Oct 11 '13 at 20:31
  • Agreed! Flags are a bit too expressive... it should have just refused to do any useful work, output a message and quit! – fatuhoku Oct 11 '13 at 21:02
  • 1
    Works also with nc -l 8888 – polym Jun 19 '15 at 10:49
  • No matter the man page said that it is an error to use **-p** option in conjunction with the **-l** option. Actually, only **nc -l -p 8081** work in my mbp. That's crazy. :( – andy Mar 01 '16 at 03:09
  • Confirming that this works for me: `nc -lvn 8080` vs. the recommended `nc -lvnp 8080`. `p` and `l` do not work when used together on the Mac OS version. – james-see Oct 22 '21 at 16:23
  • Even on Ubuntu 20 I'm finding this quirk (for UDP). – Sridhar Sarnobat Dec 17 '21 at 23:19
24

Here's how this is working for me on OS X 10.10, with either the installed BSD version, or the one from Homebrew:

BSD Version

When using the BSD version that ships with OS X, a server can be started like this

/usr/bin/nc -l 9999

Homebrew

  • Install using Homebrew: brew install netcat
  • This will install v0.7.1 of http://netcat.sourceforge.net/
  • One can use either the nc or netcat command. nc is an alias for netcat.

To start a server:

nc -l -p 9999

To start a client:

nc targethost 9999

To get the manpage of this version, one needs to use man netcat, as man nc will open the manpage of the BSD version.

nwinkler
  • 345
  • 2
  • 9
12

I needed to test a web service over SSL, which ncat (made by the nmap team) supports.

brew install nmap
ncat -C --ssl api.somecompany.com 443

https://nmap.org/ncat/

Colin
  • 446
  • 5
  • 8
10

nc on MacOS has too many bugs, and Apple did none patch for years. the netcat from homebrew is a very low version. use ncat from nmap instead

J.Z
  • 211
  • 2
  • 2
  • 2
    +1, as of today, `netcat --version` is `0.7.1` (2003) for `brew install`ed `netcat`. Terrible. – ijoseph Oct 20 '20 at 22:29
  • Get the `nmap` version [here (link)](https://nmap.org/book/inst-macosx.html) – ijoseph Oct 20 '20 at 22:30
  • "`nc` on MacOS has too many bugs" -> I can only confirm this. Fiddling around with it today and facing some inconsistent behaviours. I believe [this version of nc from 2005](https://opensource.apple.com/source/netcat/netcat-49.40.1/netcat.c.auto.html) is the one that they're still using. Ended up using [socat](http://www.dest-unreach.org/socat/) instead: `brew install socat`. – Glenn Mohammad Apr 30 '22 at 21:10