• 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)