tracebgp es una pequeña suite de utilidades en Bash que combina traceroute con consultas whois a bases de datos de enrutamiento (RADB y Team Cymru) para enriquecer cada salto de una traza con el Sistema Autónomo (AS) al que pertenece, y para moverte libremente entre una IP, su AS y los rangos de red que ese AS anuncia en BGP.
En una traza de red normal solo ves IPs. Con tracebgp ves, además, de qué operador u organización es cada salto, lo cual es muy útil para:
- Diagnosticar por qué el tráfico "sale" hacia un proveedor concreto.
- Detectar cambios de ruta o hijacks de BGP.
- Investigar la infraestructura de un objetivo en labores de reconocimiento de red.
- Entender la topología de Internet en cualquier traceroute.
- Características
- Scripts incluidos
- Cómo encajan las piezas
- ¿Cómo funciona traceroute?
- Opciones del comando traceroute en Linux
- Requisitos
- Instalación
- Uso
- Ejemplos de salida
- Fuentes de datos (whois)
- Aviso legal y buenas prácticas
- Licencia
- Traceroute salto a salto anotado con el AS de origen de cada IP intermedia.
- Resolución automática del nombre/descripción del AS vía Team Cymru whois.
- Consulta inversa: a partir de una IP pública, obtén su AS y país (
ip2bgp). - Consulta de prefijos: a partir de un número de AS, lista todos los rangos IPv4/IPv6 (
route:/route6:) que ese AS anuncia en RADB (bgp2ip). - Instalación en un solo paso como comandos globales del sistema.
- Sin dependencias exóticas: solo
bash,tracerouteywhois.
| Script | Entrada | Qué hace | Fuente de datos consultada |
|---|---|---|---|
tracebgp |
Una IP o host destino | Ejecuta traceroute -A y añade a cada salto con AS visible el nombre/descripción de ese AS |
whois.cymru.com |
ip2bgp |
Una IP pública | Devuelve el AS y el país al que pertenece esa IP | ip-api.com |
bgp2ip |
Un número de AS (ej. AS1849) |
Lista todos los rangos de red (IPv4 y IPv6) anunciados por ese AS | whois.radb.net (RADB) |
instalar.sh |
— | Instala las dependencias (traceroute, whois) y copia los tres comandos a /sbin/ |
— |
┌───────────────────────┐
│ 1. tracebgp <IP> │
│ traceroute -A + AS │
└──────────┬────────────┘
│ obtienes una IP intermedia / su AS
▼
┌───────────────────────┐
│ 2. ip2bgp <IP> │
│ IP → AS + país │
└──────────┬────────────┘
│ obtienes el número de AS
▼
┌───────────────────────┐
│ 3. bgp2ip <AS> │
│ AS → todos sus rangos │
│ IPv4 / IPv6 │
└───────────────────────┘
Un flujo típico de investigación de red sería: lanzar tracebgp hacia un destino → identificar un salto interesante → resolver su AS con ip2bgp → listar con bgp2ip todo el rango de direcciones que pertenece a ese operador.
tracebgp es en el fondo una capa encima de traceroute -A, así que entender el mecanismo interno de traceroute ayuda a interpretar correctamente cada salto de la traza.
Todo paquete IP lleva un campo TTL (Time To Live) que se decrementa en 1 cada vez que atraviesa un router. Cuando el TTL llega a 0, el router que lo tiene en ese momento descarta el paquete y responde al origen con un mensaje ICMP "Time Exceeded" (tipo 11). traceroute explota justo este comportamiento:
- Envía un primer paquete de sondeo con TTL = 1. El primer router en la ruta lo descarta y devuelve un ICMP Time Exceeded → así se descubre el salto 1.
- Envía otro paquete con TTL = 2. Esta vez es el segundo router quien lo descarta → se descubre el salto 2.
- Repite incrementando el TTL en 1 en cada ronda, hasta que un paquete llega finalmente al destino (o se alcanza el número máximo de saltos configurado).
- Cuando el paquete sí llega al destino final, este responde de forma distinta según el tipo de sondeo usado (ver más abajo), lo que le indica a
tracerouteque la traza ha terminado.
TTL=1 ───▶ [Router 1] ──X (descarta, TTL=0) ──▶ ICMP Time Exceeded ──▶ origen
TTL=2 ───▶ [Router 1] ──▶ [Router 2] ──X ──▶ ICMP Time Exceeded ──▶ origen
TTL=3 ───▶ [Router 1] ──▶ [Router 2] ──▶ [Router 3] ──X ──▶ ICMP Time Exceeded ──▶ origen
⋮
TTL=n ───▶ ... ──▶ [Destino] ──▶ respuesta final ──▶ origen
Por cada valor de TTL, traceroute envía por defecto 3 sondeos (configurable con -q) y mide el RTT (tiempo de ida y vuelta) de cada uno; de ahí que en la salida clásica se vean 3 tiempos por línea. Un * en lugar de un tiempo significa que ese sondeo concreto no obtuvo respuesta antes de agotarse el tiempo de espera (por ejemplo, porque un firewall intermedio filtra ICMP o el tráfico del sondeo).
El comportamiento anterior es independiente del tipo de paquete usado para "sondear" cada salto; en Linux, traceroute puede enviar tres tipos distintos:
| Tipo de sondeo | Opción | Comportamiento | Cuándo usarlo |
|---|---|---|---|
| UDP (por defecto) | (ninguna, o -U) |
Envía datagramas UDP a un puerto alto poco probable de estar abierto; el destino final responde con ICMP "Port Unreachable", lo que señala el final de la traza | Uso general; es el método clásico de Unix |
| ICMP Echo | -I |
Igual que un ping; el destino final responde con ICMP Echo Reply |
Redes donde el UDP está filtrado pero el ICMP sí pasa |
| TCP SYN | -T |
Envía un SYN a un puerto (por defecto el 80); el destino responde con SYN-ACK o RST | Muy útil para atravesar firewalls que solo permiten tráfico "tipo web" (equivalente al comportamiento de herramientas como tcptraceroute) |
tracebgp no fija ninguno de estos modos explícitamente, por lo que usa el método UDP por defecto de traceroute, además de activar la resolución de AS con -A (ver siguiente sección).
- Un router intermedio tiene ICMP deshabilitado o limitado por rate-limiting.
- Existe un firewall que descarta silenciosamente el tipo de paquete de sondeo usado.
- El salto no decrementa el TTL de forma visible (algunos equipos de MPLS "esconden" saltos internos).
- Hay pérdida de paquetes real en la red en ese tramo.
La implementación de traceroute que trae por defecto la mayoría de distribuciones Linux (Debian/Ubuntu/Kali, paquete traceroute) admite muchas más opciones que el uso básico. Estas son las más relevantes:
| Opción | Descripción |
|---|---|
-4 / -6 |
Fuerza el uso de IPv4 o IPv6 |
-I |
Usa sondeos ICMP ECHO en lugar de UDP |
-T |
Usa sondeos TCP SYN en lugar de UDP |
-U |
Usa sondeos UDP explícitamente (comportamiento por defecto) |
-A |
Resuelve el Sistema Autónomo (AS) de cada salto mediante whois — esta es la opción que usa tracebgp |
-n |
No resuelve nombres DNS: muestra solo direcciones IP (traza más rápida) |
-m <max_ttl> |
Número máximo de saltos a explorar (por defecto 30) |
-f <first_ttl> |
TTL inicial desde el que empezar a trazar (por defecto 1); útil para omitir saltos ya conocidos |
-q <nqueries> |
Número de sondeos enviados por cada salto (por defecto 3) |
-w <waittime> |
Tiempo máximo de espera de respuesta por sondeo, en segundos |
-z <sendwait> |
Tiempo mínimo entre sondeos consecutivos (para no saturar la red) |
-p <port> |
Puerto de destino de los sondeos (UDP) o puerto base (TCP) |
-i <device> |
Interfaz de red por la que enviar los sondeos |
-s <src_addr> |
Dirección IP de origen a usar en los sondeos |
-g <gateway> |
Ruta de origen laxa (loose source routing) a través de una o varias puertas de enlace |
-N <squeries> |
Número de sondeos enviados en paralelo (acelera la traza) |
-t <tos> |
Valor de Type of Service / DSCP a usar en los paquetes |
-F |
Envía los paquetes con el bit Don't Fragment activado |
-M <module> |
Selecciona explícitamente el método de sondeo (icmp, udp, tcp, raw, dccp) |
-V |
Muestra la versión del programa |
--help |
Muestra la ayuda resumida de opciones |
El script tracebgp de este repositorio invoca internamente traceroute -A "$1". La opción -A hace que, por cada salto en el que la IP responde, traceroute intente automáticamente identificar el AS de origen de esa IP y lo muestre entre corchetes junto a la dirección (p. ej. [AS15169]). tracebgp toma esa información en bruto y la enriquece más todavía, sustituyendo el número de AS por su nombre/descripción real obtenido de Team Cymru, de modo que en vez de ver solo AS15169 veas directamente AS15169:GOOGLE.
| Requisito | Detalle |
|---|---|
| Sistema operativo | Linux (Debian/Ubuntu/Kali u otras distros con apt-get) |
| Shell | bash |
Paquete traceroute |
Necesario para tracebgp (traza con soporte de AS, opción -A) |
Paquete whois |
Necesario para tracebgp y bgp2ip (consultas whois a RADB y Cymru) |
curl |
Necesario para ip2bgp |
| Conexión a Internet | Imprescindible: todo el valor añadido viene de consultas whois/API externas en tiempo real |
Permisos de escritura en /sbin/ |
Necesarios solo si usas instalar.sh (normalmente vía sudo) |
git clone https://github.com/hackingyseguridad/tracebgp.git
cd tracebgp
sudo sh instalar.shinstalar.sh hace tres cosas:
- Instala las dependencias con
apt-get install traceroute whois. - Da permisos de ejecución a los tres scripts.
- Copia
bgp2ip,ip2bgpytracebgpa/sbin/, dejándolos disponibles como comandos globales.
git clone https://github.com/hackingyseguridad/tracebgp.git
cd tracebgp
chmod +x tracebgp bgp2ip ip2bgp
./tracebgp 8.8.8.8Si solo quieres probar el script una vez, no hace falta instalarlo ni tener privilegios de root: basta con darle permisos de ejecución y llamarlo con
./.
tracebgp <IP_o_host> # traza con AS resuelto en cada salto
ip2bgp <IP> # AS y país de una IP concreta
bgp2ip <AS> # todos los rangos de red de un AS (ej: AS15169)| Comando | Sintaxis | Ejemplo |
|---|---|---|
tracebgp |
tracebgp <IP|host> |
tracebgp 8.8.8.8 |
ip2bgp |
ip2bgp <IP> |
ip2bgp 8.8.8.8 |
bgp2ip |
bgp2ip <AS> |
bgp2ip AS15169 |
$ tracebgp 8.8.8.8
1 192.168.1.1 0.5 ms
2 10.10.10.1 4.2 ms
3 203.0.113.1 [AS1234:NombreDelOperador] 8.1 ms
4 198.51.100.7 [AS15169:GOOGLE] 12.3 ms
5 8.8.8.8 [AS15169:GOOGLE] 14.0 ms
(salida ilustrativa; el número y contenido exacto de los saltos depende de la ruta real de red)
$ ip2bgp 8.8.8.8
AS15169 | US
$ bgp2ip AS15169
Uso: ./bgp2ip AS
8.8.8.0/24
8.8.4.0/24
2001:4860::/32
...
| Fuente | Usada por | Qué aporta |
|---|---|---|
RADB (whois.radb.net) |
bgp2ip |
Prefijos IPv4/IPv6 (route: / route6:) registrados como originados por un AS |
Team Cymru (whois.cymru.com) |
tracebgp |
Nombre/descripción legible de un número de AS a partir de una consulta -v <AS> |
| ip-api.com | ip2bgp |
AS y país asociados a una IP pública concreta |
Estas fuentes son servicios públicos de terceros; su disponibilidad, límites de consultas y política de uso pueden cambiar sin previo aviso. Para uso intensivo o automatizado a gran escala, consulta las condiciones de cada proveedor.
- Estas herramientas solo consultan información pública de enrutamiento (whois de RADB/Cymru e IP pública); no acceden a los sistemas destino ni realizan ninguna acción intrusiva más allá de un
tracerouteestándar. - Aun así, algunos entornos corporativos consideran el escaneo/trazado de sus rangos de red como una actividad a vigilar. Utiliza estas herramientas de forma responsable y, en contextos de auditoría, siempre con autorización explícita.
- El acceso no autorizado a sistemas de terceros está prohibido y puede constituir un delito según la legislación vigente.
Este proyecto se distribuye bajo licencia GPL-3.0. Consulta el fichero LICENSE para más detalles.