this post was submitted on 18 Jul 2026
149 points (98.7% liked)

Programming

28538 readers
345 users here now

Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!

Cross posting is strongly encouraged in the instance. If you feel your post or another person's post makes sense in another community cross post into it.

Hope you enjoy the instance!

Rules

Rules

  • Follow the programming.dev instance rules
  • Keep content related to programming in some way
  • If you're posting long videos try to add in some form of tldr for those who don't want to watch videos

Wormhole

Follow the wormhole through a path of communities !webdev@programming.dev



founded 3 years ago
MODERATORS
 

I pinged every IP address that wasn't reserved. The image is 8k by 8k and is re-encoded as an AVIF to be friendlier to mobile devices. Like every other survey done, it is using a Hilbert Curve to convert the linear address space to a contiguous 2d space. The hotter the colors (blue is coolest), the denser the ping responses were.

(If you are interested the full-resolution pyramidal-tiled TIFF can be downloaded and viewed in QuPath on desktop. I've also compressed the ping response data into its own format down to about 150 MB. PM me for a link)

Non-proxied image

Here is a 2006 survey to compare.

Some observations: Big Tech (USA) is in the top left. US government allocations, for the most part, did not respond to any pings. And maybe you didn't realize this before, but Multicast (Class D) & Class E consume a whopping 12% of the IPv4 range.

top 50 comments
sorted by: hot top controversial new old
[–] tal@lemmy.today 72 points 2 months ago (3 children)

every IP address

every IPv4 address

[–] sacred_font@infosec.pub 21 points 2 months ago

I left details out to be less verbose.

[–] Glitchvid@lemmy.world 21 points 2 months ago (1 children)

They're working on the IPv6 part right now, just don't ask when it'll be done.

[–] Valmond@lemmy.dbzer0.com 2 points 2 months ago (1 children)

Oh, it's working already, but way more hassle than the 'ol a.b.c.d stuff IMO!

[–] Bazoogle@lemmy.world 11 points 2 months ago (1 children)

They were joking, saying OP is working on pinging every IPv6 address right now. There are 3.4×10^38^ possible addresses, so if they started pinging a trillion IPs every second, they probably wouldn't finish before our sun implodes.

[–] Valmond@lemmy.dbzer0.com 3 points 2 months ago

Oh, whoosh I guess 😅

[–] GammaGames@beehaw.org 20 points 2 months ago (1 children)

ipv6 would look like a starless sky

[–] nymnympseudonym@piefed.social 14 points 2 months ago

IPv6: a dark image

[–] talkingpumpkin@lemmy.world 22 points 2 months ago (2 children)

Nice! Now do the same for ipv6 :p

Any way to determine/estimate if the black squares are unused blocks ("give them back!") or just not responding to pings?

[–] glitch1985@lemmy.world 4 points 2 months ago

No. Any proper firewall is going to act as if there nothing there.

[–] sacred_font@infosec.pub 2 points 2 months ago* (last edited 2 months ago)

This was a ping scan, so it wasn't probing any TCP/UDP ports (see shodan.io). I suppose you could use ICMP control messages (Destination Unreachable) to determine if something was unused, but that assumes the other side is being friendly.

[–] TheSlad@sh.itjust.works 16 points 2 months ago (1 children)

Hey, I can see my house from here!

[–] skankhunt42@lemmy.ca 6 points 2 months ago

I'm in this pic too!

[–] herseycokguzelolacak@lemmy.ml 8 points 2 months ago (1 children)

How long did it take to ping the whole world?

[–] Buddahriffic@lemmy.world 2 points 2 months ago

Or more specifically, what is the sum of all latencies divided by the number of responses times the total numer of requests sent (to scale up for the ones that didn't reply, assuming their average latency would have been similar to the total average)?

[–] mr_satan@lemmy.zip 6 points 2 months ago

It would be nice to have some overlay of the two images with a difference to see what changed.

[–] qaz@lemmy.world 4 points 2 months ago* (last edited 2 months ago)

It's interesting how certain companies and organizations have such large ranges, 16m IP's each for both that old printer company and a farmaceutical company is a lot. It really shows the history of the internet and how seemingly certain companies that adopted it first ended up with huge chunks of the available IPv4 space.

[–] melsaskca@lemmy.ca 3 points 2 months ago (4 children)

Forgive me if this is an ignorant question. How did you do the incremental address to address search? In my head I would start with "000.000.000.000" and then "000.000.000.001" and so on but that doesn't account for the "000.000.000.1" scenario, or any combination thereof.

[–] MagicShel@lemmy.zip 9 points 2 months ago (3 children)

Writing it out like 000 is just a convention. .1 is the same as .001. They are actually hex numbers from 0 to FF.

[–] atzanteol@sh.itjust.works 9 points 2 months ago (2 children)

They're not "actually hex". Hex is just a representation. Same as base 10.

[–] MagicShel@lemmy.zip 6 points 2 months ago* (last edited 2 months ago) (1 children)

What communicates what they need to know at the level they're at? I can get technical about octets and bounded decimals, or I can give a simple answer that puts those values into a familiar context.

[–] atzanteol@sh.itjust.works 2 points 2 months ago (1 children)

You think introducing hex was clarifying?

[–] MagicShel@lemmy.zip 6 points 2 months ago* (last edited 2 months ago) (1 children)

Yes I do.

https://lemmy.ca/comment/24351633

Feel free to explain to them how "it's all just a representation, man. Nothing means anything. It's just electrons moving around."

[–] atzanteol@sh.itjust.works 4 points 2 months ago (1 children)

I mean - they are "numbers". Numbers are not in hex or decimal. Saying "they're really hex numbers" is not just wrong it's kinda meaningless since ff == 255.

You've explained it badly.

[–] nebeker@programming.dev 1 points 2 months ago (1 children)

Lie-to-children. See also “perfect is the enemy of good.”

This was very hard for me to understand, particularly when the simple answer in school that was provided for the benefit of the rest of the class didn’t come with a deeper follow-up, but I now recognize the great value in meeting people where they are.

[–] atzanteol@sh.itjust.works 2 points 2 months ago

This wasn't a "lie to children" - that's a simplification. This was like explaining the Pythagorean theorem by introducing imaginary numbers.

Almost nobody ever uses hex to represent IP addresses ever. There is no reason to bring up hex. It complicates things rather than simplifies.

And to say "[t]hey are actually hex numbers from 0 to FF" is just misleading to the point of wrong. Numbers are not "hex" or "base 10" or "binary". They're numbers. We only represent them as hex or base10. They aren't "different numbers".

And in this case we almost always use base10. SO WHY ARE WE TALKING ABOUT HEX?

[–] Bazoogle@lemmy.world 5 points 2 months ago (1 children)

If anything, it's actually binary...

[–] MagicShel@lemmy.zip 3 points 2 months ago

It's all binary.

[–] melsaskca@lemmy.ca 2 points 2 months ago

Ahh...makes sense. Thanks.

[–] thenextguy@sh.itjust.works 1 points 2 months ago (2 children)

They’re supposed to be (traditionally) written in octal. Which is why they are called ‘octets’.

[–] arthropod_shift@programming.dev 2 points 2 months ago (1 children)

That smells a little like folk etymology to me, are you sure about that? My understanding is that since the word is older than computers and can refer to any group of 8 things, "octet" in computing just came from the need to communicate a group of exactly 8 bits given that bytes aren't always that size.

[–] thenextguy@sh.itjust.works 2 points 2 months ago (1 children)

I was not implying that the word octet comes from octal.

[–] arthropod_shift@programming.dev 3 points 2 months ago

You said they're called octets because they're supposed to be written in octal. I was saying why I don't think that's true.

[–] MagicShel@lemmy.zip 2 points 2 months ago (1 children)

I could be mistaken, but I think based on the question, that would not be clarifying. I suppose I could've just left it as they are numeric.

[–] sgh@lemmy.ml 2 points 2 months ago* (last edited 2 months ago) (1 children)

The only possible improvement would be to mention that they are bytes - as said otherwise, representation is meaningless, but they factually are 8 bits each segment, which means they are effectively just a number between 0-255.

Still, I think you were able to explain yourself to the other comment, so there's that.

[–] MagicShel@lemmy.zip 3 points 2 months ago

That's a valid correction and unlike the other comment provides more information rather than just "that's technically bullshit."

[–] poolcritter@pawb.social 4 points 2 months ago (1 children)

Essentially, IPv4 addresses[2] are just numbers from 1 to 2147483647, for example 3405804031. However, since address routing is often based on common binary prefix, more intuitive methods like 203.0.113.255 are used. This notation is just a length-4 list of integers from 0 to 255. To convert from an integer to a common IP address, you divide-with-remainder with a constant divisor of 256. For example, 3405804031 /% 256 = (13303921,256), 13303921 /% 256 = (51968,113), 51968 /% 256 = (203,0), and 203 /% 256 = (0,203).[1] Collecting all the remainders in reverse order, then joining them with periods, produces 203.0.113.255. (This notation is just for people to read; aside from parsing code, none of IPv4 uses this notation.) When you enter an IPv4 address, the opposite happens — an expression like ((203 * 256 + 0) * 256 + 113) * 256 + 255, which evaluates to 3405804031, is performed. These octets are just numbers — using 203.000.113.255 or 203.00.113.255 in place of 203.0.113.255 is merely a choice of how to write the address, as 203 * 256 + 0 = 203 * 256 + 000. mraow

[1]: this operation can be omitted; I include it for symmetry. [2]: though all of this holds true for IPv6, I really didn't feel like going through 128 bits of address

load more comments (1 replies)
[–] atzanteol@sh.itjust.works 3 points 2 months ago (1 children)

The "." are just separators. Each segment is a number from 0-255 (1 byte). So you hold three segments static (e.g. 10.10.10.x) and then increment the last segment from 0-255 (so 10.10.10.0 -> 10.10.10.255). Then the next segment increments (10.10.11.0 -> 10.10.11.255).

load more comments (1 replies)
load more comments (1 replies)
[–] olenkoVD@lemmy.dbzer0.com 2 points 2 months ago

Exactly the same thing had been done in this very interesting video I had watched some time ago. Did you get the idea from there?

[–] MonkderVierte@lemmy.zip 2 points 2 months ago (1 children)

Yeah, a link to the tiff would be great.

[–] sacred_font@infosec.pub 2 points 2 months ago (1 children)
load more comments (1 replies)
[–] lazynooblet@lazysoci.al 2 points 2 months ago (1 children)

Where is 100.64.0.0/10. Should be reserved

[–] sacred_font@infosec.pub 4 points 2 months ago

Unlabeled grey square at the bottom

[–] nosuchanon@lemmy.world 2 points 2 months ago
[–] Marija_@programming.dev 1 points 2 months ago

The Hilbert curve visualization is surprisingly satisfying.

load more comments
view more: next ›