Provided by:
icmpush_2.2-6_i386 
NOMBRE
icmpush - Generador de paquetes ICMP
SINOPSIS
icmpush tipo [opciones] host
DESCRIPCI'ON
icmpush es una aplicacion para generar diversos tipos de paquetes ICMP.
Actualmente soporta los tipos ICMP de error siguientes: Redirect,
Source Quench, Time Exceeded, Destination Unreach, Parameter Problem y
los tipos ICMP de informacion siguientes: Address Mask Request,
Timestamp, Information Request, Echo Request, Router Solicitation y
Router Advertisement.
No es mision de esta pagina describir en profundidad los entresijos del
protocolo ICMP, pero cuanto mas conocimiento se tenga del mismo, mejor
comprension se tendra del uso, funcionamiento y utilidades de esta
herramienta.
La cantidad de argumentos necesarios puede parecer excesiva, pero, como
su propio autor indica, la construccion de un paquete ICMP que se
ajuste al formato del protocolo requiere una serie de datos
imprescindibles que deben ser suministrados desde la linea de comandos.
Hacia el final de esta pagina se incluye una gran cantidad de ejemplos
que ilustran algunas de las posibilidades reales de uso de este
programa.
OPCIONES
-h, --help
Ayuda.
-V, --version
Version del programa.
-v, --verbose
Modo informativo.
-vv, --more_verbose
Mas informativo aun. Util para depuracion.
El tipo de ICMP, siguiendo un orden por codigo de menor a mayor, puede
ser cualquiera de los siguientes:
-du, --dest_unreach
Destination Unreach. El paquete IP no pudo ser entregado. Este
tipo ICMP es de error.
-sq, --src_quench
Source Quench. El paquete IP no se entrega a causa de una
congestion en la red. Este es tipo ICMP es de error.
-red, --redirect
Redirect. Requerimiento para desviar paquetes IP a traves de
otro router. Este tipo ICMP es de error.
-echo, --echo_request
Echo Request. Peticion a un host para que devuelva una respuesta
de eco. Este tipo ICMP es de informaci'on.
-rta, --router_advert direcci'on[/preferencia]
Router Advertisement. El router comunica la disponibilidad de
uno o varios routers con direccion direcci'on y preferencia
preferencia. Si se omite esta ultima se toma la preferencia por
defecto que es 0. Este tipo ICMP es de informaci'on.
-rts, --router_solicit
Router Solicitation. Requerimiento por parte de un host para que
se envie un anuncio de uno o varios routers. Como el anterior,
forma parte del intercambio de mensajes Router Discovery y es un
tipo ICMP de informaci'on.
-tx, --time_exc
Time Exceeded. Se ha acabado el tiempo de un paquete IP. Este
tipo ICMP es de error.
-param, --param_problem
Parameter Problem. Valor erroneo en una variable de la cabecera
IP. Este tipo ICMP es de error.
-tstamp, --timestamp
Timestamp. Solicitud de la hora de un host. Este tipo ICMP es de
informaci'on.
-info, --info_req
Information Request. El host solicita una respuesta Info Reply.
Este tipo ICMP es de informaci'on.
-mask, --mask_req
Address Mask Request. Averiguar la mascara de red para la red
local actual. Este tipo ICMP es de informaci'on.
Las opciones pueden ser cualquiera de las siguientes:
-sp, --spoof direcci'on
Direccion IP a usar como origen del paquete ICMP.
-to, --timeout segundos
Tiempo de espera en segundos para leer las respuestas. Solo es
valido para ICMPs de informaci'on salvo el tipo Router
Advertisement (-rta). Por defecto es de 5 segundos. Si se
indica 0 no se leen las respuestas.
-n, --no_resolve
No usar resolucion DNS de nombre de host.
-lt, --lifetime segundos
Tiempo de vida en segundos de un anuncio de router. Valido solo
para Router Advertisement (-rta). Por defecto son 1800 segundos
(30').
-gw, --gateway direcci'on
Host que actuara como pasarela de ruta en un ICMP Redirect
(-red). Por defecto sera la direccion de spoof (-sp), si se ha
especificado, o la direccion IP del interfaz de salida si no se
ha especificado.
-dest, --route_dest direcci'on
Host o red destino de ruta en un ICMP Redirect (-red). Esta
opcion es obligatoria si se envia un ICMP Redirect.
-orig, --orig_host direcci'on
Host origen en la cabecera IP que se envia en la parte de datos
de un ICMP de error. Por defecto sera igual a la IP del host al
que se manda el paquete ICMP.
-psrc, --port_src puerto
Puerto (tcp o udp) origen a usar en la cabecera IP que se envia
en la parte de datos de un ICMP de error. Por defecto es 0.
-pdst, --port_dest puerto
Puerto (tcp o udp) destino a usar en la cabecera IP que se envia
en la parte de datos de un ICMP de error. Por defecto es 0.
-prot, --protocol icmp|tcp|udp
Protocolo a usar en la cabecera IP que se envia en la parte de
datos de un ICMP de error. Debe ser uno de los tres listados.
Por defecto es tcp.
-id, --echo_id identificador
Identificador de Echo usado en la cabecera IP que se envia
cuando es un ICMP de error y el protocolo de la cabecera IP
(-prot) de los datos de error es icmp. Por defecto es 0.
-seq, --echo_seq secuencia
Numero de secuencia de Echo usado en la cabecera IP que se envia
cuando es un ICMP de error y el protocolo de la cabecera IP
(-prot) de los datos de error es icmp. Por defecto es 0.
-pat, --pattern patr'on
Patron de datos a enviar en un Echo Request (-echo).
-gbg, --garbage bytes|max
Cantidad de bytes basura que se enviaran en cualquier paquete
ICMP. Con max se envia el maximo posible.
-ptr, --pointer byte
Puntero a byte erroneo en un paquete ICMP indicando un problema
en un parametro. Valido solo para el tipo Parameter Problem
(-param).
-c, --code c'odigo|num|max
Codigo de ICMP enviado. Codigo c'odigo valido para los tipos
Destination Unreach (-du), Redirect (-red) y Time Exceeded
(-tx).
Se puede especificar un codigo numerico num para los tipos ICMP
que no tienen (Echo Request, Information Request, Address Mask
Request, Router Solicitation, Router Advertisement, Source
Quench, Parameter Problem y Timestamp).
Si se usa max se enviara un codigo ICMP superior a los
admitidos.
La siguiente seccion C'ODIGOS ICMP enumera los tipos de codigo
c'odigo validos.
C'ODIGOS ICMP
Los c'odigos validos para usar con los tipos Destination Unreach,
Redirect y Time Exceeded son,
- Para usar con el tipo Destination Unreach (-du):
net-unreach (Net Unreachable) indica red de destino no accesible.
host-unreach (Host Unreachable) indica host de destino no accesible.
prot-unreach (Protocol Unreachable) indica que el protocolo deseado no
esta a disposicion en el host destino.
port-unreach (Port Unreachable) indica que el puerto deseado en el host
destino no esta disponible.
frag-needed (Fragmentation Needed and Don't Fragment was Set) indica
que el paquete IP tuvo que ser fragmentado por su tamano, pero el
emisor no lo permitio por medio del flag DF (DON'T FRAGMENT o NO
FRAGMENTAR).
sroute-fail (Source Route Failed) indica que no se pudo seguir la ruta
deseada que se indicaba en el paquete IP.
net-unknown (Destination Network Unknown) indica que no se conoce la
red de destino.
host-unknown (Destination Host Unknown) indica que no se conoce el host
de destino, pero si la red.
host-isolated (Source Host Isolated) indica que no se puede acceder al
host de destino.
net-ano (Communication with Destination Network is Administratively
Prohibited) indica que el acceso a la red de destino se deniega, via
cortafuegos o similar, por parte del receptor.
host-ano (Communication with Destination Host is Administratively
Prohibited) indica que el acceso al host de destino se deniega, via
cortafuegos o procedimiento analogo, por parte del receptor.
net-unr-tos (Destination Network Unreachable for Type of Service)
indica que no se puede acceder a la red de destino con el tipo de
servicio (TOS, type of service) solicitado.
host-unr-tos (Destination Host Unreachable for Type of Service) indica
que no se puede acceder al host destino con el TOS solicitado.
com-admin-prohib (Communication Administratively Prohibited) indica que
un router no puede encaminar un paquete por filtrado administrativo.
host-precedence-viol (Host Precedence Violation) indica que la
precedencia IP del paquete original no esta permitida.
precedence-cutoff (Precedence cutoff in effect) indica que se ha
intentado enviar un paquete con un nivel de precedencia IP menor que el
minimo impuesto por los administradores.
- Para usar con el tipo Redirect (-red):
net (Redirect Datagram for the Network) indica que el destino es una
red.
host (Redirect Datagram for the Host) indica que el destino es un host.
serv-net (Redirect Datagram for the Type Of Service and Network) indica
que el destino es tipo de servicio y red.
serv-host (Redirect Datagram for the Type Of Service and Host) indica
que el destino es tipo de servicio y host.
y
- Para usar con el tipo Time Exceeded (-tx):
ttl (Time to Live exceeded in Transit) indica que el tiempo de vida en
la cabecera de un paquete IP se ha agotado.
frag (Fragment Reassembly Time Exceeded) indica que los fragmentos de
un paquete IP no han podido ser reensamblados.
C'ODIGOS DE RETORNO
icmpush puede ser usado de una forma muy sencilla en guiones del
interprete de comandos que estemos usando (tipicamente bash). El
programa devuelve los siguientes codigos al shell que le invoco:
Valor Significado
----- -----------
0 Programa finalizado OK.
1 Numero de argumentos incorrecto.
2 Protocolo ICMP desconocido.
3 No se pudo crear socket tipo RAW.
4 Tipo de paquete ICMP incorrecto.
5 Gateway incorrecto.
6 Destino de ruta incorrecto.
7 Codigo de paquete ICMP incorrecto.
8 Host original incorrecto.
9 Error enviando paquete.
10 Protocolo no implementado todavia.
11 Direccion IP o host de spoof incorrecto.
12 No se pudo reservar memoria para union data_hdr.
13 Direccion IP o host destino del paquete incorrecto.
14 Protocolo desconocido.
16 Error leyendo socket RAW.
17 Error al iniciar manejador de senal SIGALRM.
18 Los datos que se quieren enviar en el paquete
Echo Request son demasiado grandes.
19 Puerto origen incorrecto.
20 Puerto destino incorrecto.
21 Valor de timeout incorrecto.
22 Echo ID incorrecto.
23 Numero de secuencia incorrecto.
24 Datos de Echo incorrectos.
25 Error en IP_HDRINCL.
26 Direccion de router en Router Advertisement
incorrecta.
27 Numero de bytes basura incorrecto.
28 Puntero de ICMP Parameter Problem es incorrecto.
EJEMPLOS
- En repuesta a un paquete enviado con origen en el puerto TCP 100 y
con destino en el puerto 90, queremos enviar un ICMP Redirect a
tontoligo.es para modificar su tabla de rutas con los siguientes datos:
10.12.12.12 como gateway hacia el host death.es enmascarando el origen
del paquete como originado desde el host infect.comx:
icmpush -red -sp infect.comx -gw 10.12.12.12 -dest death.es -c host
-prot tcp -psrc 100 -pdst 90 tontoligo.es
- En respuesta a un paquete ICMP Echo Request enviado con un ECHO
REQUEST id 100 y un numero de secuencia ECHO REQUEST 90, queremos
enviar un ICMP Redirect al host almorranas.es para modificar su tabla
de rutas con los siguientes datos: el host pizza.death como pasarela
hacia el host death.es enmascarando el origen del paquete como
originado desde el host infect.comx:
icmpush -red -sp infect.comx -gw pizza.death -dest death.es -c host
-prot icmp -id 100 -seq 90 almorranas.es
- Queremos enviar un paquete ICMP Destination Unreach al host 10.2.3.4
diciendole que nuestro puerto TCP numero 20, conectado con su puerto
TCP 2100, es inalcanzable. Nos enmascaramos como el host 10.1.1.1:
icmpush -du -sp 10.1.1.1 -c port-unreach -prot tcp -psrc 2100 -pdst 20
10.2.3.4
- Queremos enviar un paquete ICMP Destination Unreach al host 10.2.3.4
diciendole que el host inferno.hell y su puerto TCP 69, relacionado con
su puerto TCP 666 es inalcanzable. Nos enmascaramos como como el
gateway router.comx:
icmpush -du -sp router.comx -c host-unreach -prot tcp -psrc 666 -pdst
69 -orig inferno.hell 10.2.3.4
- Queremos enviar un paquete ICMP Source Quench al host ldg02.hell en
respuesta a un paquete destinado al host ldg00 con protocolo UDP,
puerto origen 100 y destino 200. Nos enmascaramos como el gateway
10.10.10.1:
icmpush -sq -sp 10.10.10.1 -prot udp -psrc 100 -pdst 200 -orig ldg00
ldg02.hell
- Queremos enviar un paquete ICMP Time Exceeded al host ldg02.hell en
respuesta a un paquete destinado al host ldg00 con protocolo UDP,
puerto origen 100 y puerto destino 200. Nos enmascaramos como el
gateway ldg04.hell:
icmpush -tx -sp ldg04.hell -c frag -prot udp -psrc 100 -pdst 200 -orig
ldg00 ldg02.hell
- Queremos enviar un paquete ICMP Address Mask Request y esperar 10
segundos para ver las respuestas. Enmascararemos el paquete con origen
en 10.2.3.4 y lo mandaremos a la direccion 10.0.1.255:
icmpush -mask -sp 10.2.3.4 -to 10 10.0.1.255
- Queremos enviar un paquete ICMP Timestamp al host sepultura.hell.
Enmascaramos el paquete como enviado por el host 10.2.3.1. Usamos el
tiempo de espera por defecto, 5 segundos:
icmpush -tstamp --spoof 10.2.3.1 sepultura.hell
- Queremos enviar un paquete ICMP Information Request al host
nominas.hell. La direccion origen sera nuestra propia direccion IP, y
el tiempo de espera sera de 20 segundos:
icmpush -info -to 20 nominas.hell
- Queremos enviar un paquete ICMP Router Solicitation al host
vagos.hell. La direccion de origen sera nuestra propia direccion IP, y
el tiempo de espera sera de 20 segundos:
icmpush -rts --timeout 20 vagos.hell
- Queremos enviar un paquete ICMP Echo Request al host vagos.hell con
un el patron de datos 'MiNombreEsGump'. La direccion origen sera
nuestra propia direccion IP. El tiempo de espera para leer los datos
sera de 2 segundos:
icmpush -echo -data MiNombreEsGump -to 2 vagos.hell
- Queremos enviar un paquete ICMP Echo Request a 10.12.0.255 con el
siguiente patron de datos: 'D E A T H' (espacios inclusive). La
direccion origen la enmascararemos como 192.168.0.255, y no queremos
leer las respuestas:
icmpush -echo -sp 192.168.0.255 -data 'D E A T H' -to 0 192.168.0.255
- Queremos enviar un ICMP Destination Unreach al host destino.death
pero enviandolo con un codigo ICMP superior a los legales anadiendo
ademas 60K de datos basura:
icmpush -du -c max -gbg 60000 destino.death
- Queremos enviar un ICMP Router Advertisement al host death.es,
diciendole que los routers a usar son: router1.xtc con preferencia 20,
router2.xtc con preferencia 50 y router3.xtc con preferencia por
defecto (0). Nos enmascararemos como el router routerpadre.xtc
icmpush -rta router1.xtc/20 -rta router2.xtc/50 -rta router3.xtc -sp
routerpadre.xtc death.es
- Queremos enviar un ICMP Parameter Problem al host desgracias.es
diciendole que el paquete que ha enviado al host paleto.org con
protocolo udp, puerto origen 13 y puerto destino 53, tiene un error en
el byte 13 de la cabecera IP. Ademas, le anadiremos todos los bytes
basura posibles:
icmpush -sp paleto.org -param -ptr 13 -prot udp -psrc 13 -pdest 53 -gbg
max desgracias.es
- Queremos enviar un paquete ICMP Timestamp al host www.paletos.org con
el codigo 38 en lugar del codigo (0) que llevaria normalmente:
icmpush -tstamp -c 38 www.paletos.org
VER TAMBI'EN
Postel, John, "Internet Control Message Protocol - DARPA Internet
Program Protocol Specification", RFC 792, USC/Information Sciences
Institute, September 1981.
Mogul, Jeffrey and John Postel, "Internet Standard Subnetting
Procedure", RFC 950, Stanford, USC/Information Sciences Institute,
August 1985.
Braden, Robert, "Requeriments for Internet Hosts - Communication
Layers", RFC 1122, USC/Information Sciences Institute, October 1989.
Deering, Stephen, "ICMP Router Discovery Messages", RFC 1256, Xerox
PARC, September 1991.
Baker, Fred, "Requeriments for IP Version 4 Routers", RFC 1812, Cisco
Systems, June 1995.
El c'odigo fuente de Linux, en especial todo lo referente al codigo de
red, y principalmente lo referido al protocolo ICMP.
AUTOR
Slayer <tcpbgp@softhome.net>