• FauxPseudo @lemmy.world
    link
    fedilink
    arrow-up
    297
    arrow-down
    4
    ·
    8 months ago

    Ok. This covers every ipv6 and ipv4 address.

    “^\s*((([0-9A-Fa-f]1,4}:){7}([0-9A-Fa-f]{1,4}:))|(([0-9A-Fa-f]{1,4:)6}(:[0-9A-Fa-f]{1,4}((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3)|:))|(([0-9A-Fa-f]1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2}):((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3)|:))|(([0-9A-Fa-f]1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})((:[0-9A-Fa-f]{1,4)?:((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]))3})):))|(([0-9A-Fa-f]{1,4:)3}(((:[0-9A-Fa-f]{1,4}){1,4})((:[0-9A-Fa-f]{1,4)0,2}:((25[0-5]2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3))|:))|(([0-9A-Fa-f]1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})((:[0-9A-Fa-f]{1,4)0,3}:((25[0-5]2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3))|:))|(([0-9A-Fa-f]1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})((:[0-9A-Fa-f]{1,4)0,4}:((25[0-5]2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3))|:))|(:(((:[0-9A-Fa-f]1,4}){1,7})((:[0-9A-Fa-f]{1,4)0,5}:((25[0-5]2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3))|:)))(%.+)?\s*$”

    • Danny M@lemmy.escapebigtech.info
      link
      fedilink
      arrow-up
      78
      arrow-down
      2
      ·
      edit-2
      8 months ago

      Please don’t. Use regex to find something that looks like an IP then build a real parser. This is madness, its’s extremely hard to read and a mistake is almost impossible to spot. Not to mention that it’s slow.

      Just parse [0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3} using regex (for v4) and then have some code check that all the octets are valid (and store the IP as a u32).

        • Danny M@lemmy.escapebigtech.info
          link
          fedilink
          arrow-up
          3
          ·
          edit-2
          8 months ago

          Definitely, tho if you store it as a u32 that is fixed magically. Because 1.2.3.4 and 1.02.003.04 both map to the same number.

          What I mean by storing it as a u32 is to convert it to a number, similar to how the IP gets sent over the wire, so for v4:

          octet[3] | octet[2] << 8 | octet[1] << 16 | octet[0] << 24

          or in more human terms:

          (fourth octet) + (third octet * 256) + (second octet * 256^2) + (first octet * 256^3)
          
      • Centillionaire@kbin.social
        link
        fedilink
        arrow-up
        70
        arrow-down
        1
        ·
        8 months ago

        That would allow for like, 2 trillion devices? Feels like a bandaid, my dude. Next you’re gonna suggest a giant ice cube in the ocean once a year to stop global warming.

        • stoy@lemmy.zip
          link
          fedilink
          arrow-up
          13
          ·
          8 months ago

          So add two more octets:

          Moat companies will still just use something like 10.0.13.37.0.1

          • 0xD
            cake
            link
            fedilink
            arrow-up
            14
            arrow-down
            3
            ·
            8 months ago

            IPv6 is not made with internal networks in mind lol

            • dan@upvote.au
              link
              fedilink
              arrow-up
              1
              ·
              8 months ago

              You can use a ULA if you want to. That’s essentially the IPv6 equivalent of a private IP.

              Why though? Having the same IP for both internal and external solves a bunch of issues. For example, you don’t need to use split horizon DNS any more (which is where a host name has a different IP on your internal network vs on the internet). You just need to ensure your firewalls are set up properly, which you should do anyways.

            • stoy@lemmy.zip
              link
              fedilink
              arrow-up
              2
              arrow-down
              4
              ·
              8 months ago

              Never claimed it was, please quote me where I said as much

              • dohpaz42@lemmy.world
                link
                fedilink
                English
                arrow-up
                18
                arrow-down
                1
                ·
                8 months ago

                My dude, you used the 10.xx private IP as an example. Why wouldn’t they assume you were referring to internal networks?

                • stoy@lemmy.zip
                  link
                  fedilink
                  arrow-up
                  1
                  arrow-down
                  3
                  ·
                  8 months ago

                  I thought it was pretty clear with me adding 13.37 that I was making a joke, the earlier post spoke about how just adding one octet would still be too few addresses, so I joked about adding one more octet.

                  • dohpaz42@lemmy.world
                    link
                    fedilink
                    English
                    arrow-up
                    3
                    ·
                    8 months ago

                    I’m only pointing out why the other poster would make the assumption you were referring to an internal network. Do with it what you will.

        • alienzx@feddit.nl
          link
          fedilink
          English
          arrow-up
          5
          arrow-down
          1
          ·
          edit-2
          8 months ago

          You could follow this logic and add 2 alphanumeric digits before 4 numeric octets. E.g. xf.192.168.1.1

          This would at least keep it looking like an IP and not a Mac address. Another advantage would be graceful ipv4 handling with a reserved range starting with “ip” like ip.10.10.10.1

      • Nalivai@discuss.tchncs.de
        link
        fedilink
        arrow-up
        15
        ·
        8 months ago

        Oh yeah, great, let’s change the fundamental protocol on which all the networks in the world are based. Now two third of the devices in the world crashed because you tried to ping 192.168.0.0.1