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

Traducción del artículo Sniff the Bitcoin network

Posted on Leave a comment

Sniff the Bitcoin network

Sniff Bitcoin Network

Out of curiosity we are going to listen to the network traffic between my full node and the rest of the Bitcoin network. As what interests me is to know the normal traffic commands, I will not execute any protocol command and I will have the sniffer acting until a new block is generated.

For this we will use the tcpdump tool on the Bitcoin full node BCubium that allows us to capture the network traffic on the specific communication port. In our case, as the node is running Tor, we will activate listening on port 9050 and on the loopback network interface.

The command to execute is the following:

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

We inspect the file generated with the Wireshark utility.

We find the types of messages sent: addr, getdata, headers, inv, ping, pong and tx.

addr

Provides information about known nodes on the network. If the nodes are not advertised they are forgotten after 3 hours.

inv

Allows a node to report the existence of one or more objects. It can be received without requesting it or in response to a getblocks type message.

getdata

Used in response to an inv message to retrieve the content of a specific object. Usually getdata is sent after receiving the inv packet, after filtering known objects. It can be used to retrieve transactions.

headers

This message is sent in response to the getheader message that returns the desired block headers.

ping

Message to test the liveliness of the TCP / IP connection. Any connection error is assumed to be a closed connection and the address is removed as the current pair.

pong

Response message to a ping message by a node to demonstrate its liveliness on the network. 

tx

Describes a bitcoin transaction, in response to getdata.

version

When a node creates an outbound connection, it immediately announces its version.

verack

Themessage is sent in response to the version. It consists only of a message header with the command string “verack”.

There is more information about the Bitcoin protocol on the page, Protocol documentation