Control de flujo – If (Si Condicional)

Control de flujo – If (Si Condicional)

No. 7 de 12 de articulos. JavaScript

El lenguaje JavaScript al igual que muchos otros lenguajes, soporta la utilización de sentencias u órdenes para el control de flujo del programa, el control de flujo permite realizar la estructura del programa y dar orden a las acciones a realizar, así como también la toma de decisiones.

En JavaScript cualquier expresión también se puede considerar una sentencia.

Sentencia de bloque

La sentencia de bloque es el tipo de sentencia más básico y se utiliza para realizar agrupaciones de sentencias, es decir nos permite delimitar un conjunto de acciones englobando las mismas dentro de un bloque compacto. Para delimitar el bloque de sentencias se han de utilizar las llaves “{ }”, al principio y al final de bloque.

El siguiente ejemplo muestra el agrupamiento de varias sentencias en un bloque.

// Ejemplo de sentencia de bloque.

{

   var paginaWeb = "www.aprendoencasa.com";
   var descripcion = "ejercicios y practicas de programacion";
   var edad = 8;

}

// Ejemplo de sentencia de bloque utilizando orden de control de flujo

   var precio = 0;
   if ( precio == 0 ) {
      console.log("ejercicios y practicas gratis");
      console.log("en tu sitio web www.aprendoencasa.com");
   }

 

Se ha de tener en cuenta que en versiones anteriores a ECMAScript 6, las variables que se hayan definido dentro de un bloque de sentencia, pertenecen a la función donde esté definido el bloque de sentencia, mientras que a partir de la versión de JavaScript especificada, las variables definidas dentro de un bloque de sentencia, pertenecen a dicho bloque y no a la función completa. Siempre y cuando no se definan de otra forma las variables creadas serán de ámbito de bloque.

Observe el siguiente ejemplo.

// Ejercicios y Prácticas de Programación JavaScript
// Ejemplo de ámbito de bloque

// Declaración de variable

var numero = 10;
var numerodos = 20;
{
   var numero = 20;
   let numerodos = 40;
}

console.log(numero);
console.log(numerodos);

El resultado del ejemplo anterior, muestra un valor 20 para número y un valor 20 para númerodos, como se puede apreciar la variable “númerodos”, no cambia su valor a 40, ya que está definida dentro de una sentencia de bloque y por tanto el ámbito de la misma es solo el bloque en el cual está definida. Mientras que la variable número, aunque se ha vuelto a definir dentro del bloque, al utilizar “var” en lugar de “let”, pertenece a la función completa y por tanto cambia su valor.

 

Sentencias condicionales

Una sentencia condicional es un conjunto de sentencias que se ejecutan en base a que una condición se cumpla o sea verdadera.

Una de las sentencias condicionales de control de flujo, es la sentencia “if”, a la cual también se le puede denominar “Si Condicional” en castellano. La otra sentencia condicional que utiliza JavaScript es “switch”.

If – Si Condicional

La sentencia if se utiliza para comprobar si la evaluación de una condición es verdadera o falsa y en base a dicha evaluación se ejecutan una serie de sentencias.

Esta sentencia tiene diferentes variantes en su sintaxis. Siendo las siguientes.

// acción simple cuando se cumple la condición
if ( condición ) acción;

// acción simple cuando se cumple la condición y acción simple
// cuando la condición no se cumple
if ( condición ) acción; else acción;

// varias acciones cuando se cumple la condición
if ( condición ) {
    acción;
    acción;
    ...
}

// varias acciones cuando se cumple la condición y varias
// acciones cuando no se cumple la condición
if ( condición ) {
    acción;
    acción;
    ...
} else {
    acción;
    acción;
    ...
}

// acción simple cuando se cumple la condición y varias
// acciones cuando no se cumple la condición
if ( condición ) acción;
else {
    acción;
    acción;
    ...
}

// varias acciones cuando se cumple la condición y
// acción simple cuando no se cumple la condición
if ( condición ) {
   acción;
   acción;
   ...
} else acción;

El funcionamiento de la sentencia es el mismo para todas las variantes de sintaxis, en resumen, se realiza la evaluación de la condición, la expresión de condición se evalúa con un resultado “true” o “false”, verdadero o falso, si el resultado es verdadero se ejecutan las sentencias del bloque pertenecientes al “if”, si el resultado es falso se ejecutan las sentencias pertenecientes al bloque “else”, que se puede traducir por sino o en caso contrario.

La condición que se especifica puede ser simple o compuesta y los operadores de comparación que se pueden utilizar son los siguientes.

Operador Significado
> Mayor que
< Menor que
>= Mayor o igual que
<= Menor o igual que
== Igualdad
!= Desigualdad
=== Estrictamente Igual
!== Estrictamente Desigual

Para especificar condiciones compuestas se pueden utilizar los operadores lógicos siguientes:

Operador Uso Significado
&& Condición && condición Operador lógico Y, devuelve “true” si ambas expresiones son verdaderas, “false” en cualquier otro caso.
|| Condición || Condición Operador lógico O, devuelve “true” si cualquier expresión es verdadero, “false” si todas las expresiones son falsas.
! !expresión Operador No, devuelve “false” si el operando no puede ser convertido a “true”, en caso contrario devuelve “false”

Utilizando los operadores anteriores se pueden realizar condiciones compuestas de tipo Y o de tipo O, e incluso mezclar ambos operadores en la misma condición. Observe el siguiente ejemplo.

// Ejemplos de Si Condicional con condiciones compuestas y simples

// Definición de variables
var vehiculo = "Coche";
var edad = 47;
var web = "www.aprendoencasa.com";

// Evaluación de condiciones
if ( vehiculo=="Coche" || vehiculo =="Moto" ) {
 console.log("El vehiculo elegido utiliza energia no renovable.");
}

if ( edad>=18 && edad<=50 ) {
 console.log("Todavia no tiene que renovar su permiso.")
}

if ( web == "www.aprendoencasa.com" ) {
 console.log("Gracias por su visita, espero que vuelva.");
}

El resultado del ejercicio anterior ha de ser similar al que se muestra a continuación.

Ejercicios para realizar prácticas de programación con JavaScript.

Intente realizar los siguientes ejercicios que se proponen a continuación. Si tiene dudas puede utilizar los comentarios para expresarlas y que el administrador del curso y otros usuarios puedan ayudarle. Un saludo y gracias por su visita.

 

j

Ejercicio 1 - Si Condicional

Realizar un ejercicio en
el cual se definan las variables necesarias para solicitar una “edad”, un “nombre”
y “país”.

Una vez definidas las
variables se ha de visualizar un mensaje en la consola que diga “Mayor de Edad”
o “Menor de Edad”, dependiendo de que la edad introducida sea mayor o menor de
18 años.

Visualizar un mensaje
que diga “Hola” y visualice también el nombre introducido en la variable,
siempre y cuando la variable sea distinta de nada.

j

Ejercicio 2 - Si Condicional

Realizar un ejercicio en el cual se definan las siguientes
variables “precio_kilometro”, “vehiculo”, “kms_recorridos”, “litros_consumidos”.

A continuación, defina y realice los cálculos para obtener
el total a pagar, teniendo en cuenta las siguientes consideraciones.

Si el vehículo es “coche”, el precio kilometro ha de ser
0.10, si es “moto” ha de ser 0.20 y si es “autobús” 0.5. si los litros
consumidos están entre 0 y 100 se ha de añadir 1 al total, si es mayor la
cantidad de litros consumidos se ha de añadir 2 al total.

j

Ejercicio 3 - Si Condicional

Intenta realizar un ejercicio en el cual se definan las
variables que consideres necesarias y utilizar el sí condicional para obtener
un resultado. Este ejercicio es de libre elección, ¡prueba tu inventiva!

Tipos – JavaScript

Tipos – JavaScript

No. 5 de 12 de articulos. JavaScript

La última versión de JavaScript que se utiliza a fecha de hoy, tiene definidos siete tipos de datos. ¡Que son los tipos de datos!, básicamente los tipos de datos de un lenguaje, son los diferentes formatos numéricos, alfanuméricos, booleanos, cadenas de texto, etc. Que puede manejar el lenguaje, para ello define una serie de palabras clave que sirven para identificar el tipo de dato y especificar de esta forma cuando se almacene el tipo de dato, en que sitio y de qué forma se realiza dicho proceso.

Existen seis tipos de datos denominados primitivos, los tipos de datos primitivos son aquellos que el lenguaje gestiona directamente, mientras que existe un tipo de dato más denominado objeto, los cuales son construidos por el usuario, utilizando los datos primitivos y formando un nuevo tipo compuesto, el cual el lenguaje no gestiona directamente, sino que lo hace el programador.

Los seis tipos de datos primitivos son:

  • Boolean :               un tipo de dato booleano es un dato lógico el cual solo puede contener los valores true (verdadero) o false (falso).
  • null             :               un valor null representa una referencia que apunta casi siempre de forma intencionada, a un objeto invalido o a una dirección de referencia inexistente.
  • undefined :               un valor primitivo, asignado automáticamente a las variables definidas, pero no inicializadas.
  • Number :               en JavaScript Number, es un tipo de dato numérico, el cual se corresponde con un valor de doble precisión de 64 bits. En otros lenguajes existen tipos diferenciados como enteros, flotantes, dobles, etc. En javascript solo se especifica este tipo y dependiendo del valor el lenguaje lo trata automáticamente.
  • String                 :               en cualquier lenguaje de programación el tipo string, se denomina cadena de texto y su valor es una secuencia de caracteres usados para representar un texto.
  • Symbol :            es un tipo de datos cuyos valores son únicos e immutables. Dichos valores pueden ser utilizados como identificadores (claves) de las propiedades de los objetos.

El otro tipo de dato es el tipo Object, el tipo object se refiere a una estructura de datos que contiene datos e instrucciones para trabajar con los datos.

Conversión de tipos

El lenguaje JavaScript es un lenguaje de tipo dinámico, es decir no hace falta indicar el tipo de dato de una variable cuando se crea su declaración, y los datos se convierten automáticamente de un tipo a otro dependiendo de las necesidades del código que se está ejecutando.

El siguiente ejemplo muestra como el lenguaje realiza automáticamente la conversión de tipos entre número y cadena de texto, al utilizar los datos en una instrucción, independientemente de haber declarado inicialmente las variables según un tipo.

// Declaración de variable

var antiguedadWeb = 12;

// conversión automática

antiguedadWeb = "es bastante joven";


 

En conversiones en las cuales intervenga cadenas de texto con valores numéricos y el operador de suma +, javascript realiza la conversión de los tipos numéricos a cadenas de texto. En conversiones en las cuales intervengan otros operadores que no sea la suma, javascript no realiza la conversión a cadena de texto y mantiene el valor numérico.

// Declaración de variables

var numeroA = 100;
var numeroB = 120;
var mensaje1 = "Hola Mundo Soy ";
var mensaje2 = " Adios Mundo Soy ";

var resultadoA = mensaje1 + numeroA;
var resultadoB = mensaje1 + numeroB + mensaje2;

console.log(resultadoA);
console.log(resultadoB);

 

 

Conversión de string (cadena de texto) a números

Función parseInt()

La función parseInt(), permite realizar la conversión de un string a número, con esta función se realiza la conversión a un tipo de dato entero. La sintaxis de la función es la siguiente.

parseInt( string , base )

Los parámetros especificados son los siguientes:

string                     :               el valor a convertir, que ha de ser una cadena de texto (string).

base (radix)       :               también se denomina radix, es la base matemática de conversión que se quiere aplicar. Normalmente para especificar la base de numeración decimal, se ha de especificar el valor 10.

La función devuelve como resultado un valor numérico de tipo entero, si no se puede realizar la conversión de la cadena de texto a número se devuelve como resultado NaN.

El siguiente ejemplo muestra el uso de la función:

// Declaración de variables
var A = "100";
var B = "Hola";
var C = "200 Unidades";

var D = 0;
var E = 0;
var F = 0;

D = parseInt(A,10);
E = parseInt(B,10);
F = parseInt(C,10);

console.log("D Contiene : " + D );
console.log("E Contiene : " + E );
console.log("F Contiene : " + F );

 

 


Función parseFloat()

La función parseFloat(), permite realizar la conversión de un string a número con decimales, con esta función se realiza la conversión a un tipo de dato flotante o decimal. La sintaxis de la función es la siguiente.

parseFloat( string )

Los parámetros especificados son los siguientes:

string                     :               el valor a convertir, que ha de ser una cadena de texto (string).

La función devuelve como resultado un valor numérico de tipo flotante, si no se puede realizar la conversión de la cadena de texto a número se devuelve como resultado NaN.

El siguiente ejemplo muestra el uso de la función:

// Declaración de variables
var A = "100.342";
var B = "FF2";
var C = "3.14";

var D = 0;
var E = 0;
var F = 0;

D = parseFloat(A);
E = parseFloat(B);
F = parseFloat(C);

console.log("D Contiene : " + D );
console.log("E Contiene : " + E );
console.log("F Contiene : " + F );

 

Resolviendo dudas ….

Hola a todos, como podéis ver ya vuelvo a empezar a escribir de una forma regular en el blog, de hecho este articulo es para comentaros que esta va a ser una sección de preguntas y respuestas relacionadas con temas informáticos, podéis preguntar cualquier cosa, siempre que este dentro de mis posibilidades la respuesta, la publicare y podréis consultarla para resolver vuestros pequeño problemas técnicos. Un saludo y gracias a todos por visitar vuestro blog www.aprendoencasa.com.

Utiliza los comentarios para realizar tu pregunta….

 

esta sección también sera accesible utilizando el menú superior desde la opción Resolviendo dudas….

 

Ejercicios y Prácticas de Programación en C (13)

No. 10 de 57 de articulos. Practicas C

Siguiendo con los ejercicios propuestos por nuestro querido visitante, hoy vamos a plantear el siguiente enunciado:

Realizar un programa que solicite una matriz A y una matriz B por teclado y almacene sus valores, teniendo en cuenta que las matrices han de ser de 3×4. El programa ha de utilizar funciones para realizar la captura de datos de las dos matrices, así como posteriormente presentar el resultado de la suma, resta y traspuestas de las matrices, utilizando para todo ello funciones también.

Pulse el enlace denominado “LEER EL ARTICULO COMPLETO” a continuación para ver la resolución del ejercicio.

[ad#336x280g2010]

(más…)

Prácticas y ejercicios de programación en c ( 11 )

Prácticas y ejercicios de programación en c ( 11 )

No. 8 de 57 de articulos. Practicas C

[ad#468x60aec2009mime]

2º Programa que lea dos números por teclado y calcule el valor de la suma, resta producto y división.

Solución 1.

 

 

 

// Inclusion de librerias

#include <stdio.h>

#include <stdlib.h>

 

// Funcion principal

int main(int argc, char *argv[])

{

  // Definicion de variables

  int A;

  int B;

  long int Suma;

  int Resta;

  float Division;

  long int Multiplicacion;

 

  // Solicitud de datos por consola

  printf(“Numero A ……: “);

  scanf(“ %d”,&A);

  printf(“Numero B ……: “);

  scanf(“ %d”,&B);

  // Realizar calculos

   Suma=A+B;

   Resta=A-B;

  Division=A/B;

  Multiplicacion = A*B;

  // Visualización de resultados

  printf(“\nLa suma es igual a %d”,Suma);

  printf(\nLa resta es igual a %d”,Resta);

  printf(“\nLa division es %.2f”,Division);

  printf(“\nLa multiplicacion es %d”,Multiplicacion);

  system(“PAUSE”);

  return 0;

}

Si observas detenidamente el programa en su ejecución podrás observar que la división es posible no salga correctamente y eso es debido a que una división entre enteros produce un entero, por lo tanto quizás para resolver mejor este programa deberías emplear otro tipo de dato para los números y que la resolución del mismo sea mas adecuada.

 

[ad#386x280aec2009]

[ad#enlaces2][ad#enlaces2]

Seguridad sistemas y redes (10)

No. 9 de 9 de articulos. Seguridad Sistemas

Cadenas identificativas y otros recursos (6)

Rastrear redes
Escaneo de puertos con UDP

Este tipo de escaneo se realiza utilizando paquetes de tipo UDP  (User Datagram Protocol) en vez de utilizar paquetes TCP. Los puertos UDP abiertos no realizan contestacion con el flag ACK activado a diferencia de los puertos TCP. Los puertos cerrados UDP no están obligados a responder con un paquete RST activado, pero responden con un mensaje de tipo ICMP_PORT_UNREACHABLE. Al igual que en los dos últimos tipos de escaneos tcp comentados se utiliza para realizar mapeos inversos y deducir así que puertos están abiertos.

Envio con el puerto cerrado

Equipo A ————> UDP ————–> Equipo B

Equipo A <———— ICMP UNREACHABLE <——- Equipo B

Ejemplo con NMAP:

root@ubuntu:~# nmap -sU 192.0.2.1

Starting Nmap 5.00 ( http://nmap.org ) at 2010-05-03 11:35 CEST
Interesting ports on 192.0.2.1:
Not shown: 999 closed ports
PORT   STATE         SERVICE
53/udp open|filtered domain
MAC Address: 00:30:DA:XX:XX:XX (Comtrend CO.)

Nmap done: 1 IP address (1 host up) scanned in 1085.72 seconds

Ejemplo con Hping:

root@ubuntu:~# hping3 -V -c 4 -2 -p 2049 192.0.2.1
using eth0, addr: 192.0.2.245, MTU: 1500
HPING 192.0.2.1 (eth0 192.0.2.1): udp mode set, 28 headers + 0 data bytes
ICMP Port Unreachable from ip=192.0.2.1 name=UNKNOWN
status=0 port=1274 seq=0
ICMP Port Unreachable from ip=192.0.2.1 name=UNKNOWN
status=0 port=1275 seq=1
ICMP Port Unreachable from ip=192.0.2.1 name=UNKNOWN
status=0 port=1276 seq=2
ICMP Port Unreachable from ip=192.0.2.1 name=UNKNOWN
status=0 port=1277 seq=3

--- 192.0.2.1 hping statistic ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.6/250.6/1000.5 ms

Entre las ventajas de este método se puede destacar que es fácil detectar si una maquina esta activa y que puertos udp tiene abiertos, por el contrario se ha de tener privilegios de superusuario para realizar este tipo de escaneo, son bastante lentos y los paquetes que se envían no tienen porque garantizar respuestas positivas, ya que puede ser que se pierdan los paquetes al enviarlos o recibirlos.

[ad#336x280g2010]

Escaneo utilizando el puerto ECHO

El puerto ECHO (No. 7) es un tipo de conexión que los sistemas linux actualmente lo traen cerrado ya que no se utiliza, pero en otros sistemas vienen por defecto activado. Se utiliza para realizar comprobaciones de conexión, es decir si la maquina esta activa o no, actualmente se utiliza ping. Se puede utilizar TCP o UDP para realizar la conexión a este puerto. En cualquiera de los casos la función de este puerto ECHO (Eco) es devolver lo que se le envía, de ahí su nombre. En el caso de TCP se puede utilizar el programa telnet para probar si la maquina esta activa, de hecho la conexión a la maquina destino implica una negociación completa en tres pasos (Treeway-handshaking), lo cual significa que la maquina destino se encuentra en la red.

Ejemplo tcp con telnet:

#telnet 192.168.1.1   7

Trying 192.168.1.1…

Connected to 192.168.1.1.

Escape character is ‘^]’.

Envio de eco

Envio de ecotelnet>close

Ejemplo udp con netcat:

#nc –v –u 192.168.1.1 echo

192.168.1.1: inverse host lookup failed: Unknown host

(UNKNOWN) [192.168.1.1] 7 (echo) open

Envio de prueba

Envio de prueba
Envio de ICMP de tipo ECHO

El protocolo ICMP (Internet Control Message Protocol) es el que informa de posibles errores en la capa de red.  Este tipo de escaneo se puede considerar como la forma mas simple de saber si un equipo responde, ya que se utiliza para realizarlo el conocido comando ping, que genera un mensaje ICMP de tipo echo, al cual también se le llama de tipo 8 o simplemente ping. Al realizar el ping la maquina responde con un mensaje también de tipo ICMP pero esta vez de tipo REPLY, también denominado pong.

Ejemplo utilizando el comando ping:

root@ubuntu:~# ping -c 4 192.0.2.1
PING 192.0.2.1 (192.0.2.1) 56(84) bytes of data.
64 bytes from 192.0.2.1: icmp_seq=1 ttl=255 time=0.559 ms
64 bytes from 192.0.2.1: icmp_seq=2 ttl=255 time=0.562 ms
64 bytes from 192.0.2.1: icmp_seq=3 ttl=255 time=0.553 ms
64 bytes from 192.0.2.1: icmp_seq=4 ttl=255 time=0.566 ms

--- 192.0.2.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2998ms
rtt min/avg/max/mdev = 0.553/0.560/0.566/0.004 ms
Envio ICMP tipo broadcast

Este tipo de envíos o escaneos realizan una petición ICMP de tipo 8 o ping a broadcast , al realizar este tipo de envió al broadcast se esta solicitando respuesta a toda la red de forma que todos los equipos que la componga enviaran respuesta.  Es un tipo de escaneo peligroso también denominado smurf broadcast, ya que puede dar lugar a un bloqueo de la red por colapso.

Ejemplo utilizando el comando hping:

root@ubuntu:~# hping3 -1 -c 5 192.0.255.255
HPING 192.0.255.255 (eth0 192.0.255.255): icmp mode set, 28 headers + 0 data bytes
len=46 ip=192.0.255.255 ttl=32 id=39545 icmp_seq=0 rtt=0.3 ms
DUP! len=46 ip=192.0.3.201 ttl=255 id=25118 icmp_seq=0 rtt=0.4 ms
len=46 ip=192.0.3.201 ttl=255 id=25119 icmp_seq=1 rtt=0.2 ms
DUP! len=46 ip=192.0.255.255 ttl=32 id=39547 icmp_seq=1 rtt=0.2 ms
len=46 ip=192.0.3.201 ttl=255 id=25120 icmp_seq=2 rtt=0.4 ms

--- 192.0.255.255 hping statistic ---
3 packets transmitted, 5 packets received, -66% packet loss
round-trip min/avg/max = 0.2/0.3/0.4 ms

Una de las ventajas a destacar es que en la mayoría de redes Unix/Linux suelen responder a este tipo de petición, por el contrario en redes Windows este tipo de escaneo es omitido por defecto, en redes unix se puede llegar a producir el colapso de la red debido a este tipo de petición, es recomendable configurar o asegurar la red para que no responda a este tipo de peticiones.

envio ICMP tipo 10 o router

Este tipo de envió es el que realizan los routers para que las maquinas de la red detecten su presencia. El router envía mediante multicast o multidifusión (el envió de información en una red a múltiples destinos simultáneamente), una trama ICMP, de esta forma equipos en la red que no hubieran localizado su router darán con el suyo. Este tipo de envió se ha de generar con una aplicación especial, en este caso esta aplicación se denomina icmpush y es bastante fácil de localizar en cualquier distribución linux.

Ejemplo utilizando el comando icmpush:

nacho@ubuntu:~$ sudo icmpush -vv -rts 192.0.3.10
 -> Outgoing interface = 192.0.2.245
 -> ICMP total size = 8 bytes
 -> Outgoing interface = 192.0.2.245
 -> MTU = 1500 bytes
 -> Total packet size (ICMP + IP) = 28 bytes
ICMP Router Solicitation packet sent to 192.0.3.10 (192.0.3.10) 

Receiving ICMP replies ...
icmpush: Program finished OK
Envio ICMP de tipo 13 o marcas de tiempo

Las marcas de tiempo se utilizan como protección para evitar la falsificación de paquetes TCP que alteren la secuencia de conexión, existe un limite de tiempo de espera entre cada paquete de una misma conexión de forma que si se supera este limite de tiempo la conexión queda cancelada. Las marcas de tiempo o timestamps permiten obtener información de las maquinas activas, ya que si se envía una petición de tipo 13 a una maquina esta indicara si esta activa y resolverá también su zona horaria con lo que se puede determinan la zona geográfica a la cual pertenece dicha maquina. Para realizar este tipo de envíos se utiliza también la herramienta mencionada anteriormente denominada icmpush. Los sistemas Unix suelen responder a este tipo de peticiones mientras que los equipos windows no.

Ejemplo utilizando el comando icmpush:

nacho@ubuntu:~$ sudo icmpush -vv -tstamp 192.0.2.1
 -> Outgoing interface = 192.0.2.245
 -> ICMP total size = 20 bytes
 -> Outgoing interface = 192.0.2.245
 -> MTU = 1500 bytes
 -> Total packet size (ICMP + IP) = 40 bytes
ICMP Timestamp Request packet sent to 192.0.2.1 (192.0.2.1)

Receiving ICMP replies ...
192.0.2.1       -> Timestamp Reply transmited at 01:00:00
icmpush: Program finished OK
Envio ICMP de tipo 15

Este envió ya es obsoleto pero algunas versiones de sistema Unix antiguas todavía siguen respondiendo al mismo, al realizar el envió la maquina destino respondía con su dirección de red.

Ejemplo utilizando el comando icmpush:

nacho@ubuntu:~$ sudo icmpush -vv -mask 192.0.2.1
 -> Outgoing interface = 192.0.2.245
 -> ICMP total size = 16 bytes
 -> Outgoing interface = 192.0.2.245
 -> MTU = 1500 bytes
 -> Total packet size (ICMP + IP) = 36 bytes
ICMP Address Mask Request packet sent to 192.0.2.1 (192.0.2.1)

Receiving ICMP replies ...
icmpush: Program finished OK

[ad#enlaces2]

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies