The classic game of Pong, in your terminal, over ICMPv6!

Overview

icmpong

The classic game of Pong, in your terminal, over ICMPv6!

icmpong.mov

How does this work?

We are basically "using the ping command to send data" between two people, instead of using TCP or UDP.

ICMP allows you to include custom data (patterns) within your packets, so we're sending all of our information (ball position, scores, paddle positions, etc) through ICMP.

Why ICMPv6 (IPv6)?

Unlike IPv4, each device gets its own unique IPv6 address, which means you can connect directly to your friends without any sort of intermediate server.

How can I play?

Simply run icmpong (as root, as it needs to send and capture raw ICMP packets) and supply your friend's IPv6 address (or fe80::101 to play with yourself) via the -p flag. Your friend must also supply your IPv6 address.

Compiling

$ git clone https://github.com/ErrorNoInternet/icmpong
$ cd icmpong
$ cargo build --release

Nix

$ nix run github:ErrorNoInternet/icmpong -- --help

Thanks to @SpamixOfficial for the idea!

You might also like...
An experimental HTTP server in Rust that supports HTTP/1.1, HTTP/2, and HTTP/3 over QUIC.

πŸš€ H123 An experimental HTTP server in Rust that supports HTTP/1.1, HTTP/2, and HTTP/3 over QUIC. Warning This is an experimental project and not inte

GeoIP lookup server over HTTP.

geoip-http | geoip-http is a fast GeoIP lookup service in Rust, using the Axum web framework. It provides one possible server for tzupdate. Features F

πŸ“‘Proxy HTTP/1.1 requests over a sensitive point-to-point link
πŸ“‘Proxy HTTP/1.1 requests over a sensitive point-to-point link

ptproxy Motivation What's this? Why do I need this? What's a sensitive network link? What's wrong with a VPN? What's wrong with HTTP[S]? What's wrong

It's like
It's like "docker stats" but with beautiful, real-time charts into your terminal. πŸ“Š

πŸ“Š ds - Real-time Stats with Terminal Charts Visualize container stats with beautiful, real-time charts directly in your terminal. Why ds? Missing Cha

Acts as an IRC server and a nostr client. Connect with your IRC client using your nostr private key as the password.

nostr-irc Acts as an IRC server and a nostr client. Connect with your IRC client using your nostr private key as the password. Experimental code, use

Easily share data between terminal windows!
Easily share data between terminal windows!

abra A tool that makes data sharing between terminal windows easy. abra can be used for displaying info about the current working directory, for split

An online version of the popular game four in a row, written in Rust on the server side and Flutter + Dart on the client.
An online version of the popular game four in a row, written in Rust on the server side and Flutter + Dart on the client.

Four in a Row - Server An online version of the popular game four in a row, written in Rust on the server side and Flutter + Dart on the client. Downl

Conway Game of Life plus WebAssembly and basic HTTP Server
Conway Game of Life plus WebAssembly and basic HTTP Server

Conway Game of Life plus WebAssembly and basic HTTP Server How to run First, you have to choose what server do you want to use for hosting the wasm ga

A halloween-themed game made in Rust πŸ¦€

Robo Halloween πŸ€– πŸŽƒ 🧟 Top 3 pumpkin smashers πŸŽ‰ 🦾 πŸ₯‡ poteresting - 80 πŸŽƒ πŸ₯ˆ ArinaSolovjova - 69 πŸŽƒ πŸ₯‰ poteresting - 61 πŸŽƒ Get your name on this boa

Owner
Ryan
I am a human, and I make stuff
Ryan
πŸ€– brwrs is a new protocol running over TCP/IP that is intended to be a suitable candidate for terminal-only servers

brwrs is a new protocol running over TCP/IP that is intended to be a suitable candidate for terminal-only servers (plain text data). That is, although it can be accessed from a browser, brwrs will not correctly interpret the browser's GET request.

daCoUSB 3 Jul 30, 2021
A tcp over http2 + tls proxy

mtunnel A tcp over http2 + tls proxy. Usage 1. get certificates, by following steps. 2. make your config client config: { "local_addr": "127.0.0.1

cssivision 9 Sep 5, 2022
Bevy asset loader that transparently supports loading over http(s)

Bevy Web Asset This is a tiny crate that that wraps the standard bevy asset loader, and adds the ability to load assets from http and https urls. Supp

Johan Klokkhammer Helsing 28 Jan 2, 2023
A small utility to wake computers up or put them to sleep over the local network

WKSL - a wake and sleep utility An experiment in writing a small CLI utility in Rust. The program lets you wake a machine on your local network up fro

Henrik Ravn 0 Nov 14, 2021
MQTT over QUIC

MQuicTT ?? This is a pre-alpha project, tread carefully ?? A rustlang utility/library for MQTT over QUIC. QUIC allows us to send data over multiple co

null 29 Dec 16, 2022
Send files over TCP. Quick and simple. Made in Rust.

SFT Multithreaded utility to send files over TCP. The sender writes a header containing the filename, and then the contents of the file, buffered, to

Orel 0 Dec 24, 2021
Streaming data over unix sockets, in Rust

Unix-socket based client/server In order to dig into Sōzu channels, I had to dig into the workings of unix sockets. What this repo contains a small so

Emmanuel Bosquet 3 Nov 28, 2022
A simple cross-platform remote file management tool to upload and download files over HTTP/S

A simple cross-platform remote file management tool to upload and download files over HTTP/S

sexnine 13 Dec 30, 2022
Final Project for "Computer Networking Security": A Layer-3 VPN implementation over TLS

Final Project for "Computer Networking Security": A Layer-3 VPN implementation over TLS

Siger Yang 2 Jun 7, 2022
A simple web server(and library) to display server stats over HTTP and Websockets/SSE or stream it to other systems.

x-server-stats A simple web server(and library) to display server stats over HTTP and Websockets/SSE or stream it to other systems. x-server(in x-serv

Pratyaksh 11 Oct 17, 2022