.\" Man page for ICMPush (c) Slayer .\" =============================== .\" .\" You may distribute under the terms of the GNU General Public .\" License as specified in the LICENSE file that comes with the .\" ICMPush v2.2 distribution. .\" .\" Man page author: .\" wait_man .\" Date: .\" Mon Feb 8 01:16:09 CET 1999 .\" Translate from the Spanish to English by: .\" BINARIA .\" .TH "ICMPUSH" "8" "22 de Febrero de 1999" "icmpush v2.2" .SH "NOMBRE" icmpush \- Generador de paquetes ICMP .SH "SINOPSIS" .B icmpush .I tipo [opciones] host .SH "DESCRIPCIÓN" .B icmpush es una aplicación para generar diversos tipos de paquetes ICMP. Actualmente soporta los tipos ICMP de error siguientes: \fIRedirect\fP, \fISource Quench\fP, \fITime Exceeded\fP, \fIDestination Unreach\fP, \fIParameter Problem\fP y los tipos ICMP de información siguientes: \fIAddress Mask Request\fP, \fITimestamp\fP, \fIInformation Request\fP, \fIEcho Request\fP, \fIRouter Solicitation\fP y \fIRouter Advertisement\fP. 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. .SH "OPCIONES" .IP "\fB\-h\fP, \fB--help\fP" Ayuda. .IP "\fB\-V\fP, \fB--version\fP" Versión del programa. .IP "\fB\-v\fP, \fB--verbose\fP" Modo informativo. .IP "\fB\-vv\fP, \fB--more_verbose\fP" Más informativo aún. Útil para depuración. .PP El \fItipo\fP de ICMP, siguiendo un orden por código de menor a mayor, puede ser cualquiera de los siguientes: .IP "\fB\-du\fP, \fB--dest_unreach\fP" Destination Unreach. El paquete IP no pudo ser entregado. Este tipo ICMP es de \fIerror\fP. .IP "\fB\-sq\fP, \fB--src_quench\fP" Source Quench. El paquete IP no se entrega a causa de una congestión en la red. Este es tipo ICMP es de \fIerror\fP. .IP "\fB\-red\fP, \fB--redirect\fP" Redirect. Requerimiento para desviar paquetes IP a través de otro router. Este tipo ICMP es de \fIerror\fP. .IP "\fB\-echo\fP, \fB--echo_request\fP" Echo Request. Petición a un host para que devuelva una respuesta de eco. Este tipo ICMP es de \fIinformación\fP. .IP "\fB\-rta\fP, \fB--router_advert\fP \fIdirección\fP[\fI/preferencia\fP]" Router Advertisement. El router comunica la disponibilidad de uno o varios routers con dirección \fIdirección\fP y preferencia \fIpreferencia\fP. Si se omite esta última se toma la preferencia por defecto que es 0. Este tipo ICMP es de \fIinformación\fP. .IP "\fB\-rts\fP, \fB--router_solicit\fP" 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 \fIinformación\fP. .IP "\fB\-tx\fP, \fB--time_exc\fP" Time Exceeded. Se ha acabado el tiempo de un paquete IP. Este tipo ICMP es de \fIerror\fP. .IP "\fB\-param\fP, \fB--param_problem\fP" Parameter Problem. Valor erróneo en una variable de la cabecera IP. Este tipo ICMP es de \fIerror\fP. .IP "\fB\-tstamp\fP, \fB--timestamp\fP" Timestamp. Solicitud de la hora de un host. Este tipo ICMP es de \fIinformación\fP. .IP "\fB\-info\fP, \fB--info_req\fP" Information Request. El host solicita una respuesta Info Reply. Este tipo ICMP es de \fIinformación\fP. .IP "\fB\-mask\fP, \fB--mask_req\fP" Address Mask Request. Averiguar la mascara de red para la red local actual. Este tipo ICMP es de \fIinformación\fP. .PP Las \fIopciones\fP pueden ser cualquiera de las siguientes: .IP "\fB\-sp\fP, \fB--spoof\fP \fIdirección\fP" Dirección IP a usar como origen del paquete ICMP. .IP "\fB\-to\fP, \fB--timeout\fP \fIsegundos\fP" Tiempo de espera en segundos para leer las respuestas. Solo es válido para ICMPs de \fIinformación\fP salvo el tipo Router Advertisement (\fB-rta\fP). Por defecto es de 5 segundos. Si se indica 0 no se leen las respuestas. .IP "\fB\-n\fP, \fB--no_resolve\fP" No usar resolución DNS de nombre de host. .IP "\fB\-lt\fP, \fB--lifetime\fP \fIsegundos\fP" Tiempo de vida en segundos de un anuncio de router. Válido solo para Router Advertisement (\fI-rta\fP). Por defecto son 1800 segundos (30'). .IP "\fB\-gw\fP, \fB--gateway\fP \fIdirección\fP" Host que actuará como pasarela de ruta en un ICMP Redirect (\fB-red\fP). Por defecto será la dirección de spoof (\fB-sp\fP), si se ha especificado, o la dirección IP del interfaz de salida si no se ha especificado. .IP "\fB\-dest\fP, \fB--route_dest\fP \fIdirección\fP" Host o red destino de ruta en un ICMP Redirect (\fB-red\fP). Esta opción es obligatoria si se envía un ICMP Redirect. .IP "\fB\-orig\fP, \fB--orig_host\fP \fIdirección\fP" Host origen en la cabecera IP que se envía en la parte de datos de un ICMP de \fIerror\fP. Por defecto será igual a la IP del host al que se manda el paquete ICMP. .IP "\fB\-psrc\fP, \fB--port_src\fP \fIpuerto\fP" Puerto (tcp o udp) origen a usar en la cabecera IP que se envía en la parte de datos de un ICMP de \fIerror\fP. Por defecto es 0. .IP "\fB\-pdst\fP, \fB--port_dest\fP \fIpuerto\fP" Puerto (tcp o udp) destino a usar en la cabecera IP que se envía en la parte de datos de un ICMP de \fIerror\fP. Por defecto es 0. .IP "\fB\-prot\fP, \fB--protocol\fP \fIicmp\fP|\fItcp\fP|\fIudp\fP" Protocolo a usar en la cabecera IP que se envía en la parte de datos de un ICMP de \fIerror\fP. Debe ser uno de los tres listados. Por defecto es tcp. .IP "\fB\-id\fP, \fB--echo_id\fP \fIidentificador\fP" Identificador de Echo usado en la cabecera IP que se envía cuando es un ICMP de \fIerror\fP y el protocolo de la cabecera IP (\fB-prot\fP) de los datos de error es icmp. Por defecto es 0. .IP "\fB\-seq\fP, \fB--echo_seq\fP \fIsecuencia\fP" Número de secuencia de Echo usado en la cabecera IP que se envía cuando es un ICMP de \fIerror\fP y el protocolo de la cabecera IP (\fB-prot\fP) de los datos de error es icmp. Por defecto es 0. .IP "\fB\-pat\fP, \fB--pattern\fP \fIpatrón\fP" Patrón de datos a enviar en un Echo Request (\fB-echo\fP). .IP "\fB\-gbg\fP, \fB--garbage\fP \fIbytes\fP|\fImax\fP" Cantidad de bytes basura que se enviarán en cualquier paquete ICMP. Con \fImax\fP se envía el máximo posible. .IP "\fB\-ptr\fP, \fB--pointer\fP \fIbyte\fP" Puntero a \fIbyte\fP erróneo en un paquete ICMP indicando un problema en un parámetro. Válido sólo para el tipo Parameter Problem (\fB-param\fP). .IP "\fB\-c\fP, \fB--code\fP \fIcódigo\fP|\fInum\fP|\fImax\fP" Código de ICMP enviado. Código \fIcódigo\fP válido para los tipos Destination Unreach (\fB-du\fP), Redirect (\fB-red\fP) y Time Exceeded (\fB-tx\fP). Se puede especificar un código numérico \fInum\fP 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 \fImax\fP se enviará un código ICMP superior a los admitidos. La siguiente sección \fICÓDIGOS ICMP\fP enumera los tipos de código \fIcódigo\fP válidos. .SH "CÓDIGOS ICMP" Los \fIcódigos\fP válidos para usar con los tipos Destination Unreach, Redirect y Time Exceeded son, .IP "- Para usar con el tipo \fBDestination Unreach\fP (\fB-du\fP):" .PP \fInet-unreach\fP (Net Unreachable) indica red de destino no accesible. \fIhost-unreach\fP (Host Unreachable) indica host de destino no accesible. \fIprot-unreach\fP (Protocol Unreachable) indica que el protocolo deseado no está a disposición en el host destino. \fIport-unreach\fP (Port Unreachable) indica que el puerto deseado en el host destino no está disponible. \fIfrag-needed\fP (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). \fIsroute-fail\fP (Source Route Failed) indica que no se pudo seguir la ruta deseada que se indicaba en el paquete IP. \fInet-unknown\fP (Destination Network Unknown) indica que no se conoce la red de destino. \fIhost-unknown\fP (Destination Host Unknown) indica que no se conoce el host de destino, pero sí la red. \fIhost-isolated\fP (Source Host Isolated) indica que no se puede acceder al host de destino. \fInet-ano\fP (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. \fIhost-ano\fP (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. \fInet-unr-tos\fP (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. \fIhost-unr-tos\fP (Destination Host Unreachable for Type of Service) indica que no se puede acceder al host destino con el TOS solicitado. \fIcom-admin-prohib\fP (Communication Administratively Prohibited) indica que un router no puede encaminar un paquete por filtrado administrativo. \fIhost-precedence-viol\fP (Host Precedence Violation) indica que la precedencia IP del paquete original no está permitida. \fIprecedence-cutoff\fP (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. .IP "- Para usar con el tipo \fBRedirect\fP (\fB-red\fP):" .PP \fInet\fP (Redirect Datagram for the Network) indica que el destino es una red. \fIhost\fP (Redirect Datagram for the Host) indica que el destino es un host. \fIserv-net\fP (Redirect Datagram for the Type Of Service and Network) indica que el destino es tipo de servicio y red. \fIserv-host\fP (Redirect Datagram for the Type Of Service and Host) indica que el destino es tipo de servicio y host. .PP y .IP "- Para usar con el tipo \fB\Time Exceeded\fP (\fB-tx\fP):" .PP \fIttl\fP (Time to Live exceeded in Transit) indica que el tiempo de vida en la cabecera de un paquete IP se ha agotado. \fIfrag\fP (Fragment Reassembly Time Exceeded) indica que los fragmentos de un paquete IP no han podido ser reensamblados. .SH "CÓDIGOS DE RETORNO" \fBicmpush\fP puede ser usado de una forma muy sencilla en guiones del intérprete de comandos que estemos usando (típicamente \fIbash\fP). El programa devuelve los siguientes códigos al shell que le invocó: .ti Valor Significado .ti ----- ----------- .ti 0 Programa finalizado OK. .ti 1 Número de argumentos incorrecto. .ti 2 Protocolo ICMP desconocido. .ti 3 No se pudo crear socket tipo RAW. .ti 4 Tipo de paquete ICMP incorrecto. .ti 5 Gateway incorrecto. .ti 6 Destino de ruta incorrecto. .ti 7 Código de paquete ICMP incorrecto. .ti 8 Host original incorrecto. .ti 9 Error enviando paquete. .ti 10 Protocolo no implementado todavía. .ti 11 Dirección IP o host de spoof incorrecto. .ti 12 No se pudo reservar memoria para unión data_hdr. .ti 13 Dirección IP o host destino del paquete incorrecto. .ti 14 Protocolo desconocido. .ti 16 Error leyendo socket RAW. .ti 17 Error al iniciar manejador de señal SIGALRM. .ti 18 Los datos que se quieren enviar en el paquete Echo Request son demasiado grandes. .ti 19 Puerto origen incorrecto. .ti 20 Puerto destino incorrecto. .ti 21 Valor de timeout incorrecto. .ti 22 Echo ID incorrecto. .ti 23 Número de secuencia incorrecto. .ti 24 Datos de Echo incorrectos. .ti 25 Error en IP_HDRINCL. .ti 26 Dirección de router en Router Advertisement incorrecta. .ti 27 Número de bytes basura incorrecto. .ti 28 Puntero de ICMP Parameter Problem es incorrecto. .SH "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: \fBicmpush -red -sp\fP \fIinfect.comx\fP \fB-gw\fP \fI10.12.12.12\fP \fB-dest\fP \fIdeath.es\fP \fB-c\fP \fIhost\fP \fB-prot\fP \fItcp\fP \fB-psrc\fP \fI100\fP \fB-pdst\fP \fI90 tontoligo.es\fP - 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: \fBicmpush -red -sp\fP \fIinfect.comx\fP \fB-gw\fP \fIpizza.death\fP \fB-dest\fP \fIdeath.es\fP \fB-c\fP \fIhost\fP \fB-prot\fP \fIicmp\fP \fB-id\fP \fI100\fP \fB-seq\fP \fI90 almorranas.es\fP - 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: \fBicmpush -du -sp\fP \fI10.1.1.1\fP \fB-c\fP \fIport-unreach\fP \fB-prot\fP \fItcp\fP \fB-psrc\fP \fI2100\fP \fB-pdst\fP \fI20 10.2.3.4\fP - 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: \fBicmpush -du -sp\fP \fIrouter.comx\fP \fB-c\fP \fIhost-unreach\fP \fB-prot\fP \fItcp\fP \fB-psrc\fP \fI666\fP \fB-pdst\fP \fI69\fP \fB-orig\fP \fIinferno.hell 10.2.3.4\fP - 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: \fBicmpush -sq -sp\fP \fI10.10.10.1\fP \fB-prot\fP \fIudp\fP \fB-psrc\fP \fI100\fP \fB-pdst\fP \fI200\fP \fB-orig\fP \fIldg00 ldg02.hell\fP - 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: \fBicmpush -tx -sp\fP \fIldg04.hell\fP \fB-c\fP \fIfrag\fP \fB-prot\fP \fIudp\fP \fB-psrc\fP \fI100\fP \fB-pdst\fP \fI200\fP \fB-orig\fP \fIldg00 ldg02.hell\fP - 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: \fBicmpush -mask -sp\fP \fI10.2.3.4\fP \fB-to\fP \fI10 10.0.1.255\fP - 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: \fBicmpush -tstamp --spoof\fP \fI10.2.3.1 sepultura.hell\fP - 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: \fBicmpush -info -to\fP \fI20 nominas.hell\fP - 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: \fBicmpush -rts --timeout\fP \fI20 vagos.hell\fP - 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: \fBicmpush -echo -data\fP \fIMiNombreEsGump\fP \fB-to\fP \fI2 vagos.hell\fP - 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: \fBicmpush -echo -sp\fP \fI192.168.0.255\fP \fB-data\fP \fI'D E A T H'\fP \fB-to\fP \fI0 192.168.0.255\fP - 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: \fBicmpush -du -c\fP \fImax\fP \fB-gbg\fP \fI60000 destino.death\fP - 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 \fBicmpush -rta\fP \fIrouter1.xtc/20\fP \fB-rta\fP \fIrouter2.xtc/50\fP \fB-rta\fP \fIrouter3.xtc\fP \fB-sp\fP \fIrouterpadre.xtc death.es\fP - 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: \fBicmpush -sp\fP \fIpaleto.org\fP \fB-param -ptr\fP \fI13\fP \fB-prot\fP \fIudp\fP \fB-psrc\fP \fI13\fP \fB-pdest\fP \fI53\fP \fB-gbg\fP \fImax\fP \fIdesgracias.es\fP - 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: \fBicmpush -tstamp -c\fP \fI38 www.paletos.org\fP .SH VER TAMBIÉN Postel, John, "Internet Control Message Protocol - DARPA Internet Program Protocol Specification", \fIRFC 792\fP, USC/Information Sciences Institute, September 1981. Mogul, Jeffrey and John Postel, "Internet Standard Subnetting Procedure", \fIRFC 950\fP, Stanford, USC/Information Sciences Institute, August 1985. Braden, Robert, "Requeriments for Internet Hosts - Communication Layers", \fIRFC 1122\fP, USC/Information Sciences Institute, October 1989. Deering, Stephen, "ICMP Router Discovery Messages", \fIRFC 1256\fP, Xerox PARC, September 1991. Baker, Fred, "Requeriments for IP Version 4 Routers", \fIRFC 1812\fP, Cisco Systems, June 1995. El \fIcódigo fuente de Linux\fP, en especial todo lo referente al código de red, y principalmente lo referido al protocolo ICMP. .SH AUTOR Slayer