Provided by: icmpush_2.2-7_amd64 bug

NOMBRE

       icmpush - Generador de paquetes ICMP

SINOPSIS

       icmpush tipo [opciones] host

DESCRIPCIÓN

       icmpush  es  una  aplicación 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 información siguientes: Address Mask Request, Timestamp, Information Request, Echo
       Request, Router Solicitation y Router Advertisement.

       No es misión de esta página describir en profundidad los entresijos del protocolo ICMP, pero  cuanto  más
       conocimiento se tenga del mismo, mejor comprensión se tendrá del uso, funcionamiento y utilidades de esta
       herramienta.

       La cantidad de argumentos necesarios puede parecer excesiva,  pero,  como  su  propio  autor  indica,  la
       construcción  de  un  paquete  ICMP  que  se  ajuste al formato del protocolo requiere una serie de datos
       imprescindibles que deben ser suministrados desde la línea de comandos.

       Hacia el final de esta página 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
              Versión del programa.

       -v, --verbose
              Modo informativo.

       -vv, --more_verbose
              Más informativo aún. Útil para depuración.

       El tipo de ICMP, siguiendo un orden por código 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 congestión en la red. Este es tipo ICMP
              es de error.

       -red, --redirect
              Redirect. Requerimiento para desviar paquetes IP a través de otro router. Este  tipo  ICMP  es  de
              error.

       -echo, --echo_request
              Echo  Request.  Petición  a  un  host para que devuelva una respuesta de eco. Este tipo ICMP es de
              información.

       -rta, --router_advert dirección[/preferencia]
              Router Advertisement. El router comunica la disponibilidad de uno o varios routers  con  dirección
              dirección  y  preferencia preferencia.  Si se omite esta última se toma la preferencia por defecto
              que es 0. Este tipo ICMP es de información.

       -rts, --router_solicit
              Router Solicitation. Requerimiento por parte de un host para que se envíe  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ón.

       -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 erróneo 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ón.

       -info, --info_req
              Information Request. El host solicita una respuesta Info Reply. Este tipo ICMP es de información.

       -mask, --mask_req
              Address Mask Request. Averiguar la mascara de red para la red local actual. Este tipo ICMP  es  de
              información.

       Las opciones pueden ser cualquiera de las siguientes:

       -sp, --spoof dirección
              Dirección IP a usar como origen del paquete ICMP.

       -to, --timeout segundos
              Tiempo  de  espera  en segundos para leer las respuestas. Solo es válido para ICMPs de información
              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 resolución DNS de nombre de host.

       -lt, --lifetime segundos
              Tiempo  de vida en segundos de un anuncio de router. Válido solo para Router Advertisement (-rta).
              Por defecto son 1800 segundos (30').

       -gw, --gateway dirección
              Host que actuará como pasarela de ruta en un ICMP Redirect (-red). Por defecto será  la  dirección
              de  spoof  (-sp),  si  se  ha  especificado,  o la dirección IP del interfaz de salida si no se ha
              especificado.

       -dest, --route_dest dirección
              Host o red destino de ruta en un ICMP Redirect (-red). Esta opción es obligatoria si se  envía  un
              ICMP Redirect.

       -orig, --orig_host dirección
              Host  origen  en la cabecera IP que se envía en la parte de datos de un ICMP de error. Por defecto
              será 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 envía 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 envía 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 envía 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 envía 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
              Número de secuencia de Echo usado en la cabecera IP que se envía 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ón
              Patrón de datos a enviar en un Echo Request (-echo).

       -gbg, --garbage bytes|max
              Cantidad  de  bytes  basura  que se enviarán en cualquier paquete ICMP. Con max se envía el máximo
              posible.

       -ptr, --pointer byte
              Puntero a byte erróneo en un paquete ICMP indicando un problema en un parámetro. Válido sólo  para
              el tipo Parameter Problem (-param).

       -c, --code código|num|max
              Código  de  ICMP  enviado. Código código válido para los tipos Destination Unreach (-du), Redirect
              (-red) y Time Exceeded (-tx).

              Se puede especificar un código numérico 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 enviará un código ICMP superior a los admitidos.

              La siguiente sección CÓDIGOS ICMP enumera los tipos de código código válidos.

CÓDIGOS ICMP

       Los códigos válidos 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 está  a  disposición  en  el  host
       destino.

       port-unreach (Port Unreachable) indica que el puerto deseado en el host destino no está disponible.

       frag-needed  (Fragmentation  Needed  and  Don't  Fragment  was Set) indica que el paquete IP tuvo que ser
       fragmentado por su tamaño, pero el emisor no lo permitió 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 sí 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, vía 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, vía cortafuegos o procedimiento análogo, 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
       está permitida.

       precedence-cutoff (Precedence cutoff in effect) indica que se ha intentado enviar un paquete con un nivel
       de precedencia IP menor que el mínimo 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ÓDIGOS DE RETORNO

       icmpush  puede  ser  usado  de  una  forma muy sencilla en guiones del intérprete de comandos que estemos
       usando (típicamente bash). El programa devuelve los siguientes códigos al shell que le invocó:

       Valor  Significado
       -----  -----------
       0      Programa finalizado OK.
       1      Número 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      Código de paquete ICMP incorrecto.
       8      Host original incorrecto.
       9      Error enviando paquete.
       10     Protocolo no implementado todavía.
       11     Dirección IP o host de spoof incorrecto.
       12     No se pudo reservar memoria para unión data_hdr.
       13     Dirección IP o host destino del paquete incorrecto.
       14     Protocolo desconocido.
       16     Error leyendo socket RAW.
       17     Error al iniciar manejador de señal 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     Número de secuencia incorrecto.
       24     Datos de Echo incorrectos.
       25     Error en IP_HDRINCL.
       26     Dirección de router en Router Advertisement
              incorrecta.
       27     Número 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 diciéndole 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  diciéndole  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 dirección 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 dirección origen sera
       nuestra propia dirección 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  dirección  de  origen  sera
       nuestra propia dirección 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  patrón de datos
       'MiNombreEsGump'. La dirección origen sera nuestra propia dirección IP. El tiempo de espera para leer los
       datos será 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 patrón de datos: 'D E A T
       H' (espacios inclusive). La dirección 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 enviándolo con un código ICMP
       superior a los legales añadiendo además 60K de datos basura:

       icmpush -du -c max -gbg 60000 destino.death

       - Queremos enviar un ICMP Router Advertisement al host death.es, diciéndole 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  diciéndole  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.  Además, le añadiremos 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 código 38 en lugar del  código
       (0) que llevaría normalmente:

       icmpush -tstamp -c 38 www.paletos.org

VER TAMBIÉN

       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ódigo fuente de Linux, en especial todo lo referente al código de red, y principalmente  lo  referido
       al protocolo ICMP.

AUTOR

       Slayer <tcpbgp@softhome.net>