- arpchat es una herramienta convertida en app de chat que usa ARP, el protocolo que las computadoras usan para encontrar la dirección MAC de otras computadoras en la misma red
- El proyecto surge de la idea de querer chatear con amigos en una red con aislamiento entre clientes
- Implementa un protocolo de transporte genérico y simple sobre ARP, con el que puede enviar mensajes de decenas de miles de caracteres, y también usa algo de compresión
- Incluye un sistema de presence discovery y heartbeats para actualizar la lista de usuarios en línea, junto con notificaciones de entrada y salida
- Los binarios para instalación se pueden descargar desde la releases page
- En Windows puede ser necesario npcap, y durante la instalación hay que seleccionar
Install Npcap in WinPcap API-compatible Mode - En Linux puede ser necesario otorgar permisos de red con
sudo setcap CAP_NET_RAW+ep /path/to/arpchat
- En Windows puede ser necesario npcap, y durante la instalación hay que seleccionar
- El binario se ejecuta desde la terminal, y si el mensaje enviado aparece en tu propia pantalla, puede considerarse que está funcionando correctamente
- La compilación fue probada en la versión unstable más reciente de Rust, y para compilar en Windows se necesita WinPcap Developer's Pack y configurar la variable de entorno
LIBa la carpetaWpdPack/Lib/x64/
1 comentarios
Opiniones de Hacker News
Soy quien hizo esto. También hice otra cosa que publiqué hoy en HN (https://news.ycombinator.com/item?id=37062422), y me resulta bastante curioso ver que ArpChat también apareció. Probablemente alguien vio mi perfil.
Fue un proyecto realmente divertido y aprendí mucho sobre redes.
Hace poco también tuve la oportunidad de usarlo de verdad en un entorno totalmente offline, y fue divertido. Pero después encontré un bug importante, y ese bug estaba causando una latencia enorme. Ya lo corregí, pero todavía no pude subir un nuevo artefacto de build, así que si piensas probarlo en un entorno real, conviene compilarlo directamente desde el código fuente. También agregué, por diversión, colores para los nombres de usuario y horas en los mensajes. Prometo subir pronto una nueva versión.
Si les interesa, también hay un artículo que escribí hace aproximadamente un año sobre cómo funciona ArpChat: https://kognise.dev/writing/arp
Espero que sigas jugando con código. Se parece un poco a lo que justine tunney mostró en trabajos como https://justine.lol/ape.html: meterse a fondo en un área que solo unos pocos entienden bien, por ejemplo los detalles de los formatos binarios de compiladores, y luego hacerse una pregunta loca como “¿no se podrían enlazar todos los formatos binarios en un único metaformato y hacer que realmente se ejecute en todos?”, para después construir algo que de verdad funciona.
# sudo getcap ./arpchat./arpchat cap_net_raw=epRecibo “error getting channel, might be missing permissions”
Agregado: este error viene de arpchat, no de la configuración de
setcap.Justo esto era lo que quería. Travesuras en la capa de enlace de datos.
Para quienes no sepan qué es Address Resolution Protocol (ARP), dicho muy a grandes rasgos, es el eslabón perdido que conecta las direcciones MAC (las que usa Ethernet) con las direcciones IP (las que usa Internet). Cuando la tabla de ruteo IP, que puedes ver con
route, decide a qué dirección IP enviar luego un paquete, la caché ARP, que puedes ver conarp, determina la dirección MAC correspondiente a esa IP. Normalmente es la dirección IP local del router.Hoy en día, solo saber que ARP existe ya se considera casi como conocimiento místico no profesional, y su hermano del lado de IPv6, Neighbor Discovery Protocol, aún más. Aunque en despliegues modernos basados en la nube no se trate directamente muy seguido, saber que existe da una visión mucho más completa de todo el stack de red.
arpinges muy útil para verificar si un equipo en el mismo segmento de red está encendido pero no responde a ping ICMP.Si miras volcados de
tcpdumpo Wireshark, tarde o temprano te lo vas a encontrar. Eso sí, como la nube y las redes tradicionales son muy distintas, un ingeniero de software quizá lo encuentre antes al depurar la red de su casa que una aplicación.Es divertido abusar de que ARP pueda llevar un payload arbitrario, pero, volviendo a una perspectiva introductoria de redes, lo central en lo que se apoya el autor es el simple hecho de que un switch inunda todo el dominio de broadcast con los paquetes dirigidos a
ff:ff:ff:ff:ff:ff.Incluso sin privilegios de superusuario ni permisos de paquetes raw, si envías paquetes a una dirección de broadcast L3, normalmente se inundan en L2, así que puedes lograr una propagación de mensajes similar. Es decir, hacer ping a una dirección de broadcast es divertido.
Usar ARP no tiene ninguna ventaja especial. Además, muchos switches modernos tienen funciones para vigilar paquetes ARP, así que generar mucho tráfico ARP falso podría tener efectos realmente negativos. Aun así, es un trabajo divertido y me recuerda las travesuras que hacía cuando estaba aprendiendo. Personalmente, creo que habría abusado de ICMP para este propósito, y podría ser una dirección futura de desarrollo. Aplausos por un proyecto divertido.
ARP, DNS, HTTP y TLS son, por un lado, exactamente esos protocolos que imaginamos, pero al mismo tiempo no son más que números. ARP accede al mismo espacio de números que HTTP. UDP no es el único que usa bytes de 11 bits, ni DNS tiene alguna instrucción especial de CPU que solo él pueda usar. Al final, todo son números. En última instancia puedes empujar los números que quieras por el cable, y el resto del mundo los recibe y sigue haciendo lo suyo.
Hoy en día no debería funcionar, pero en ese entonces las implementaciones TCP/IP ingenuas —es decir, muchas— participaban con gusto.
Me gusta abusar de protocolos que vienen integrados por defecto en la mayoría de los sistemas operativos. Como no encontré un sistema de mensajería GUI/CLI multiplataforma que no requiriera instalar software cliente aparte, una vez hice una tonta compartición Samba falsa en la que se podían ver mensajes desde Finder.app/Explorer.exe/Gnome/KDE
En la red local, invocar netcat tampoco funcionaba muy bien, y para hacer broadcast también había diferencias de flags según el sistema operativo. La idea era ver el mensaje de la compartición Samba en el explorador de archivos, hacer clic y luego modificar el nombre del archivo para actualizar un “tablón” de 3 líneas
https://github.com/jedahan/samba-haiku/blob/master/index.js
Esto también era una reimplementación de algo que originalmente usaba el SSID de Wi-Fi para crear haikus de captive portal
https://github.com/jedahan/haiku-wifi
Puede ser más divertido de lo esperado. Estábamos separando la red usando VLAN con hardware de un proveedor importante y descubrimos que, aunque las VLAN funcionaban en la mayoría de los casos, el tráfico ARP se filtraba
Las máquinas debían enviar todo el tráfico a través del router, pero a veces veían respuestas ARP que no debían ver y concluían que podían llegar directamente a otra máquina. Como resultado, no podían enviar tráfico hasta que expirara la entrada de la caché ARP, lo cual era un dolor de cabeza. El proveedor era demasiado grande como para importarle y no mostró interés en corregir el bug
En ciertas circunstancias, esta app de chat podría atravesar VLAN
Mi esposa, mis hijos y yo trabajamos o estudiamos mayormente desde casa, así que a menudo estamos cada uno en habitaciones separadas. Para mandarnos mensajes cuando hace falta usamos BeeBEEP. Fue decisivo que no necesite servidor y que tenga clientes tanto para Linux como para Windows
Funciona bastante bien, aunque a veces hay que reiniciarlo después de que una laptop despierta de suspensión para volver a ver a las demás personas de la LAN. Y mi única queja real es que desde el ícono de la bandeja no se puede abrir directamente una ventana de mensaje a una persona concreta. También permite copiar y pegar fotos graciosas de gatos, y tiene funciones que no uso, como transferencia de archivos. No es publicidad pagada, solo me extendí demasiado
https://www.beebeep.net/
En la secundaria hice esto con
net sendy me metí en problemasAsí que falsifiqué el nombre de usuario del administrador del sistema (en Win9x no era difícil) y envié un mensaje de advertencia severo. Por lo visto se asustaron bastante, porque de repente todos los mensajes se detuvieron
writemanda saludoshttps://en.wikipedia.org/wiki/Write_(Unix)
net sendtenía que estar conectado a un dominio, así que no creo que usara ARPMuy bueno. Dicho eso, TCP/IP no sigue el modelo OSI, así que es difícil aplicar tal cual las distinciones sutiles de OSI
En la práctica, ARP puede definirse como capa 2.5 según el modelo TCP/IP de Stevens, así que llamarla 2.5 parece lo más razonable. Y como las tramas ARP no se enrutan, claramente no es L3
En la época en que NAT IPv4 era prácticamente el estándar —y todavía lo es, aunque hoy también existen IPv6 y CGNAT— hice algo llamado NATChat
Básicamente creaba salas de chat según la dirección IPv4 pública, para que pudieras chatear con cualquiera en la misma red. Era bastante útil para usarlo con otras personas en la oficina. La oficina, por cierto, era algo que existía en aquella época
También hay algo similar en C++: https://github.com/gbonacini/arpchatcpp