Provided by: icmpush_2.2-6.1_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>