Pingfs: Stores your data in ICMP ping packets (2020)

(github.com)

68 points | by linkdd 5 days ago

9 comments

  • HenrikB 4 hours ago
    It's humbling to know that the RAM of computers like ZX Spectrum and Commodore 64 would fit in a single IP packet. It took minutes to load that "paket" from cassette tape.
    • zamadatix 39 minutes ago
      With IPv6 there is even an extension to go to 4 GB packets (extremely rare to actually be implemented though), which you can send in less than 100 ms with an 800G NIC!
      • hermitdev 4 minutes ago
        > to 4 GB packets

        Heh. Anyone remember the ping of death[0]? A lot (most?) of computers on the early internet didn't properly handle large packets, _especially_ from ICMP pings. Once upon a time, you could send a single ping w/ a packet size of 65536 and crash the remote.

        [0] https://en.wikipedia.org/wiki/Ping_of_death

  • cakemedia 4 hours ago
    A software version of a mercury delay line! https://en.wikipedia.org/wiki/Delay-line_memory
    • EvanAnderson 4 hours ago
      Yep. ICMP delay line memory.
      • cbdevidal 3 hours ago
        Okay, but could someone ELI5 how it works? Because I am heckin’ confused
        • leoc 3 hours ago
          The UK's National Musuem of Computing has a nice demonstration video https://www.youtube.com/watch?v=xGEAPVCuwvY . Apparently delay-line memory also went on to have wide use in colour TVs before the arrival of cheap semiconductor memory https://www.youtube.com/watch?v=EPQq7xd3WdA , which was quite appropriate as it had come from radar in the first place https://www.youtube.com/watch?v=JZLpbhsE72I&t=675s .
        • adzm 3 hours ago
          Imagine a continuously-moving loop that stores bits. When you want a certain bit you just wait for it to loop back to the position you want.
          • cbdevidal 1 hour ago
            Good, but how does a ping hold data? AFAIK each ping is a single round trip and not a continuous loop. And where in the packet is the data stored?
            • robjs 1 hour ago
              ICMP packets pretty much always carry some data (even though it's not _strictly_ required). This data is what is padded when the user asks for a ping with a specific packet size (e.g., when debugging MTU issues).

              In some applications, using an ICMP payload and getting a quote of the IP header + 8-bytes of the original packet back in ICMP error messages is part of the application. For example, traceroute utilises the fact that it gets part of the payload back in a ICMP TTL exceeded message to identify _which_ traceroute request was being responded to.

            • lesuorac 1 hour ago
              In everybody else's router as it travels back and forth.

              Imagine mailing somebody a letter with data; once they receive the letter they send it back. The information is stored within the postal system.

            • chasd00 40 minutes ago
              you're right it's not continuous, you'd have to send another ping once the first one is finished. Your data is only "stored in the network" until the ping completes which would be a few hundred ms or so and then another ping has to be sent. If a single ping fails i wonder if the whole "fs" is corrupted or if there some kind of error handling built in.
              • EvanAnderson 30 minutes ago
                Clearly you need to send multiple redundant PINGs. ICMP delay line memory RAID.
  • xvilka 4 hours ago
    The concept is widely covered in the amazing book Silence on the Wire[1] by Michal Zalewski. I wish he or someone else would write modern equivalent (or at least a new, updated edition) of the book.

    [1] https://nostarch.com/silence.htm

  • _jholland 7 hours ago
    Obligatory Tom7 reference: [Harder Drive: Hard drives we didn't want or need](https://www.youtube.com/watch?v=JcJSW7Rprio)

    He stores data in ICMP ping packets, but also Tetris board states, among others. If you are not familiar with Tom7, let this be an introduction to a heavyweight whimsical internet nerd

  • dim13 2 hours ago
    Reminded me of GNU Terry Pratchett[1].

    [1]: http://www.gnuterrypratchett.com/

  • jupitr 2 hours ago
    makes me wonder if a sufficiently large number of connected nodes can represent bits via their online/offline status, and their network graph representing "memory"
  • some_furry 1 hour ago
    Every time someone does something like this, I recall this post from Xe:

    https://xeiaso.net/blog/anything-message-queue/

  • lysace 7 hours ago