Provided by: icmpush_2.2-6_i386 bug

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>