Roland Mainz
Roland Mainz

Reputation: 71

TCP client on Windows cannot bind() to port < 1023

I'm doing some testing with a TCP client on Windows 10 (10.0-19045) but due to firewall restrictions I need to run my experiments from a local port < 1024 (not negotiable).

I thought that this was no problem... but bind() fails with "address in use" (yes, I checked netstat, no one is there) for any port < 1023. Then I checked netsh int ipv4 show excludedportrange protocol=tcp and the same for IPv6, noone is using those ports.

This feels like the "restricted port range" (1-1023) on UNIX/Linux, where only "root" can do a bind() with a local port < 1023, but this is Windows, and even as "Administrator" this still fails.

https://learn.microsoft.com/en-us/troubleshoot/windows-server/networking/default-dynamic-port-range-tcpip-chang talks about a "... well-known ports that are used by services and applications...", but I do not know where to set that (for a Cygwin process).

Does anyone know what is going on? Is there a way around this?

Upvotes: 1

Views: 287

Answers (1)

david
david

Reputation: 2638

https://www.betaarchive.com/wiki/index.php?title=Microsoft_KB_Archive/174904

"The Well Known Ports [those from 0 through 1023] are assigned by the IANA and on most systems can only be used by system (or root) processes or by programs executed by privileged users"

One way to run as System is to use PSexec. That's an old KB, I'm don't remember if SYSTEM still has network privileges -- you may have to find or define another user.

Upvotes: 0

Related Questions