Port 0: The Port That Does Not Exist

(acid.vegas)

43 points | by NewCzech 8 hours ago ago

20 comments

  • afn 5 hours ago
  • OptionOfT an hour ago

    > And asking for port 0 needs no privileges.

    My brain has issues with this kind of form. It prevents me from reading words in a fifo manner. I now need to backtrack, because the 'no' negates the word before.

    • spacechild1 41 minutes ago

      FWIW this is exactly how you negate a verb in German. For example: "Ich rauche nicht " -> "I don't smoke" or "Ich brauche keinen Mantel" -> "I don't need a coat"

      • Muskwalker 6 minutes ago

        English |-n't| is also a negation that applies to what comes before. In fact I don't think you actually can put a verbal negation before the verb in English in ordinary/modern circumstances; only a few verbs can be directly negated, and if one of those isn't present, one is added (usually "do", this is called "do-support") ... and the negation goes after it.

        "This is how you negate a verb" -> "This is not how you negate a verb" ('is' can be negated, the negation goes after)

        "This confuses the duke" -> "This does not confuse the duke" ('confuses' wants do-support to negate it, and the negation goes after 'do'.)

    • digitalsushi an hour ago

      legit curious, if you read 'zero privileges' does it parse easier

      • OptionOfT an hour ago

        It parses easier, but it's still doing extra work to negate the 'needs'.

        doesn't need privileges > needs zero privileges > needs no privileges

    • seritools 37 minutes ago

      "doesn't need any privileges" is more tokens :^)

  • greggsy 6 hours ago

    I saw the URL and immediately thought it was about Acid Pro DAW or Vegas video editor is used to use back in the early 00’s.

  • fosco an hour ago
  • 99harry 4 hours ago

    Sometimes I have scripts that automatically assign ports starting from 30000. How would that work? Would I have to bind to port 0 multiple times until I randomly get a port in that range?

    • 0bytes 3 hours ago

      I’m not exactly sure if that’s the question, but the range can be set. Here’s the Linux solution: https://tldp.org/LDP/solrhe/Securing-Optimizing-Linux-RH-Edi... FreeBSD has net.inet.ip.portrange

      • 99harry 2 hours ago

        That might not quite fit my use case. My AI-generated scripts probably won't modify system-level configuration files to change the port range

        • Zambyte 2 hours ago

          ... do you not have a say in the matter?

    • _flux 2 hours ago

      I'm not quite sure what a script assigning ports actually does, but if I need an app to bind a port in some port range, I just start binding ports starting from 30000 until it succeeds.

      If it's in a script then that might be difficult, but a racy approximation could be to loop e.g. listening socat with different ports for finding the free port. (Or maybe: parse output of ss.) But if the port use is separate from the port binding, then it might still be busy once the time to rebind it comes.

  • embedding-shape 5 hours ago

    I'm not sure how I'd do acceptance/E2E testing without the magic of port 0. As long as you have a way of capturing what port it ended up using (which most languages are able to out of the box more or less), parallelizing testing workloads becomes such a breeze without having to manage ports and all that jazz, just fire everything up with N parallism and let the OS figure out what the free ports are, pass the references down and stuff just works. Thanks Linux :)

    • wolrah 2 hours ago

      > I'm not sure how I'd do acceptance/E2E testing without the magic of port 0.

      Same as anything else, an explicit flag to achieve the same "just give me a port" functionality as this "magic number" does without resulting in the documented unpredictable behavior around a technically legitimate port number.

      As the article points out, most if not all of the services exposed on port 0 seem to be accidental and likely resulted from people assuming this magic behavior applies everywhere instead of just to one specific API.

      • embedding-shape an hour ago

        > Same as anything else

        Yeah, obviously I'm a programmer so I'm well aware it's technically possible, it was a bit of an exaggeration to explain how much value I feel I get from it.

        > most if not all of the services exposed on port 0 seem to be accidental

        No program actually end up "exposed on port 0", if it's not supported it won't be able to create a listener on that port, AFAIK. Most yeah, all no. P2P software commonly leverage port 0, and other "discover<>connect" types of software. But I'd agree that it's most likely accidental if outside of those niches.

    • Joker_vD 3 hours ago

      And then there is OpenSSH...

          joker@joker:~$ ssh localhost -D 127.0.0.1:0
          Bad dynamic forwarding specification '127.0.0.1:0'
          joker@joker:~$ ssh localhost -D 127.0.0.1:9999
          ssh: connect to host localhost port 22: Connection refused
          joker@joker:~$ ssh localhost -L 127.0.0.1:0:localhost:8080
          Bad local forwarding specification '127.0.0.1:0:localhost:8080'
          joker@joker:~$ ssh localhost -L 127.0.0.1:9999:localhost:8080
          ssh: connect to host localhost port 22: Connection refused
      
      Oh well.
  • justsomehnguy 2 hours ago

    I have a feeling what sometimes :0 is interpreted as a 'first listening'. But Occam says what most of the time it's just 'DNAT dst port ANY to :80' or whatever, no magik.

  • skinfaxi 7 hours ago

    Seems hugged?