Posted on Leave a comment

Escuchando la red P2P de Bitcoin

Sniff Bitcoin Network

Por curiosidad vamos a escuchar el tráfico de red que hay entre mi full node y el resto de la red de Bitcoin. Como lo que me interesa es conocer los comandos de tráfico normal no ejecutaré ningún comando del protocolo y tendré el sniffer actuando hasta que se genere un bloque nuevo.

Para ello utilizaremos la herramienta tcpdump sobre el Bitcoin full node BCubium que nos permite capturar el tráfico de red sobre el puerto de comunicación en concreto. En nuestro caso como el nodo se está ejecutando Tor activaremos la escucha en el puerto 9050 y en el interfaz de red de loopback.

El comando a ejecutar es el siguiente:

tcpdump -i lo -s 65535 port 9050 -w /mnt/disk/tmp/BCubium_net_20200912.dump

Inspeccionamos el fichero generado con la utilidad Wireshark.

Nos encontramos los tipos de mensajes enviados: addr, getdata, headers, inv, ping, pong y tx.

addr

Proporciona información sobre los nodos conocidos de la red. Si los nodos no se anuncian se olvidan después de 3 horas.

inv

Permite a un nodo avisar de la existencia de uno o más objetos. Se puede recibir sin solicitarlo o en respuesta a un mensaje de tipo getblocks.

getdata

Se usa en respuesta a un mensaje inv para recuperar el contenido de un objeto específico. Por lo general, getdata se envía después de recibir el paquete inv, después de filtrar objetos conocidos. Se puede utilizar para recuperar transacciones.

headers

Este mensaje se envía en respuesta al mensaje getheader que devuelve los encabezados de bloque deseados.

ping

Mensaje para probar la vivacidad de la conexión TCP / IP. Se presupone que cualquier error de conexión es una conexión cerrada y la dirección se elimina como par actual.

pong

Mensaje de respuesta a un mensaje de ping por un nodo para demostrar su vivacidad en la red. 

tx

Describe una transacción de bitcoin, en respuesta a getdata.

version

Cuando un nodo crea una conexión saliente, inmediatamente anuncia su versión.

verack

El mensaje verack se envía en respuesta a la versión. Consta únicamente de un encabezado de mensaje con la cadena de comando “verack”.

Hay más información sobre el protocolo de Bitcoin en la página, Protocol documentation

Un hecho que me ha sorprendido es que aunque hemos estado escuchando la red bastante más de 10 minutos y en los logs aparece que se han minado dos bloques en el análisis del tráfico no aparecen ningún bloque completo supongo que será debido a que en la práctica no se enviarán los bloques enteros con todas sus transacciones sino las referencias a estas para que a partir de ellas se cojan de la mempool y montar el bloque consiguiendo con ello un ahorro muy importante en el volumen del tráfico de red.

Traducción del artículo Sniff the Bitcoin network

Leave a Reply