OBTENCION DE IP Y MAC ADDRESS DE UN CONJUNTO DE COMPUTADORAS
Gustavo Fabián Gregorio, David Melitón Prisciliano, Antonio Rojas Benito, Julio Cesar Medina Jiménez, Mario Alberto Venegas de la Cruz, Uriel Romero Montiel, Esperanza Mondragón Alvarado, Juan Antonio Mauro. y Jesús Antonio Álvarez Cedillo
INTRODUCCION
El poder manejar programas en Ubuntu y en Windows hoy en día es un privilegio, sin embargo hay que tener muy en claro las diferencias de cada sistema operativo en este articulo les mostramos un ejemplo donde obtenemos la ip y la Mac address tanto en Windows como en Ubuntu, realizado en la plataforma net beans.
DEFINICIONES
Dirección IP: Una dirección IP es un número que identifica de manera lógica y jerárquica a una interfaz de un dispositivo (habitualmente una computadora) dentro de una red que utilice el protocolo IP (Internet Protocolo), que corresponde al nivel de red del protocolo TCP/IP. Dicho número no se ha de confundir con la dirección MAC que es un número hexadecimal fijo que es asignado a la tarjeta o dispositivo de red por el fabricante, mientras que la dirección IP se puede cambiar. Esta dirección puede cambiar 2 ó 3 veces al día; y a esta forma de asignación de dirección IP se denomina una dirección IP dinámica (normalmente se abrevia como IP dinámica).
Mac address: En redes de ordenadores la dirección MAC (siglas en inglés de Media Access Control o control de acceso al medio) es un identificador de 48 bits (6 bloques hexadecimales) que corresponde de forma única a una Ethernet de red. Se conoce también como la dirección física en cuanto identificar dispositivos de red. Es individual, cada dispositivo tiene su propia dirección MAC determinada y configurada por el IEEE (los últimos 24 bits) y el fabricante (los primeros 24 bits) utilizando el OUI. La mayoría de los protocolos que trabajan en la capa 2 del modelo OSI usan una de las tres numeraciones manejadas por el IEEE: MAC-48, EUI-48, y EUI-64 las cuales han sido diseñadas para ser identificadores globalmente únicos. No todos los protocolos de comunicación usan direcciones MAC, y no todos los protocolos requieren identificadores globalmente únicos.
NetBeans: a plataforma NetBeans permite que las aplicaciones sean desarrolladas a partir de un conjunto de componentes de software llamados módulos. Un módulo es un archivo Java que contiene clases de java escritas para interactuar con las APIs de NetBeans y un archivo especial (manifest file) que lo identifica como módulo. Las aplicaciones construidas a partir de módulos pueden ser extendidas agregándole nuevos módulos. Debido a que los módulos pueden ser desarrollados independientemente, las aplicaciones basadas en la plataforma NetBeans pueden ser extendidas fácilmente por otros desarrolladores de software.
El siguiente programa muestra como se puede obtener la IP y la Mac de una red de computadoras usando el Netbeans en Linux al momento que se corre el programa este puede capturar los dos protocolos que se han dicho y el código es el siguiente:
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.text.ParseException;
import java.util.StringTokenizer;
public final class DireccionMac {
private final static String getMacAddress() throws IOException {
String os = System.getProperty(“os.name”);
try {
if (os.startsWith(“Windows”)) {
return windowsParseMacAddress(windowsRunIpConfigCommand());
} else if (os.startsWith(“Linux”)) {
return linuxParseMacAddress(linuxRunIfConfigCommand());
} else {
throw new IOException(“Sistema operativo desconocido: ” + os);
}
} catch (ParseException ex) {
ex.printStackTrace();
throw new IOException(ex.getMessage());
}
}
private final static String linuxParseMacAddress(String ipConfigResponse)
throws ParseException {
String localHost = null;
try {
localHost = InetAddress.getLocalHost().getHostAddress();
} catch (java.net.UnknownHostException ex) {
ex.printStackTrace();
throw new ParseException(ex.getMessage(), 0);
}
StringTokenizer tokenizer = new StringTokenizer(ipConfigResponse, “\n”);
String lastMacAddress = null;
while (tokenizer.hasMoreTokens()) {
String line = tokenizer.nextToken().trim();
boolean containsLocalHost = line.indexOf(localHost) >= 0;
if (containsLocalHost && lastMacAddress != null) {
return lastMacAddress;
}
int macAddressPosition = line.indexOf(“HWaddr”);
if (macAddressPosition <= 0)
continue;
String macAddressCandidate = line.substring(macAddressPosition + 6)
.trim();
if (linuxIsMacAddress(macAddressCandidate)) {
lastMacAddress = macAddressCandidate;
continue;
}
}
ParseException ex = new ParseException(
“Imposible obtener la dirección MAC ” + localHost + “ desde [”
+ ipConfigResponse + “]”, 0);
ex.printStackTrace();
throw ex;
}
private final static boolean linuxIsMacAddress(String macAddressCandidate) {
if (macAddressCandidate.length() != 17)
return false;
return true;
}
private final static String linuxRunIfConfigCommand() throws IOException {
Process p = Runtime.getRuntime().exec(“ifconfig”);
InputStream stdoutStream = new BufferedInputStream(p.getInputStream());
StringBuffer buffer = new StringBuffer();
for (;;) {
int c = stdoutStream.read();
if (c == -1)
break;
buffer.append((char) c);
}
String outputText = buffer.toString();
stdoutStream.close();
return outputText;
}
private final static String windowsParseMacAddress(String ipConfigResponse)
throws ParseException {
String localHost = null;
try {
localHost = InetAddress.getLocalHost().getHostAddress();
} catch (java.net.UnknownHostException ex) {
ex.printStackTrace();
throw new ParseException(ex.getMessage(), 0);
}
StringTokenizer tokenizer = new StringTokenizer(ipConfigResponse, “\n”);
String lastMacAddress = null;
while (tokenizer.hasMoreTokens()) {
String line = tokenizer.nextToken().trim();
if (line.endsWith(localHost) && lastMacAddress != null) {
return lastMacAddress;
}
int macAddressPosition = line.indexOf(“:”);
if (macAddressPosition <= 0)
continue;
String macAddressCandidate = line.substring(macAddressPosition + 1)
.trim();
if (windowsIsMacAddress(macAddressCandidate)) {
lastMacAddress = macAddressCandidate;
continue;
}
}
ParseException ex = new ParseException(
“Imposible obtener dirección MAC desde [” + ipConfigResponse
+ “]”, 0);
ex.printStackTrace();
throw ex;
}
private final static boolean windowsIsMacAddress(String macAddressCandidate) {
if (macAddressCandidate.length() != 17)
return false;
return true;
}
private final static String windowsRunIpConfigCommand() throws IOException {
Process p = Runtime.getRuntime().exec(“ipconfig /all”);
InputStream stdoutStream = new BufferedInputStream(p.getInputStream());
StringBuffer buffer = new StringBuffer();
for (;;) {
int c = stdoutStream.read();
if (c == -1)
break;
buffer.append((char) c);
}
String outputText = buffer.toString();
stdoutStream.close();
return outputText;
}
public final static void main(String[] args) {
try {
System.out.println(“Sistema Operativo : ”
+ System.getProperty(“os.name”));
System.out.println(“Dirección IP : ”
+ InetAddress.getLocalHost().getHostAddress());
System.out.println(“Dirección Física (MAC): ” + getMacAddress());
} catch (Throwable t) {
t.printStackTrace();
}
}
}
Conclusiones:
Con el desarrollo del programa nos pudimos dar cuenta que cada computadora tiene una dirección IP que es un numero que identifica de manera lógica a una interfaz de un dispositivo que se encuentra dentro de una red que utilice el protocolo IP este número puede crear una red dentro de internet conectándolo con alguna otra computadora con el mismo número IP, en este programa que se muestra anteriormente realiza la obtención de la dirección IP y la MAC address al momento de ejecutarlo en la plataforma de NetBeans captura los dos protocolos mostrándolos en la pantalla, en otro caso en el sistema operativo Ubuntu o Linux entrando desde lugares, terminal aparece un cuadro en el que para saber cuál es la dirección en la red por medio del IP se le da la instrucción.
#ifconfig
y automáticamente te manda el resultado que en ese momento se encuentra en la red WLAN que puede cambiar varias veces al día aquí mismo te muestra la MAC en una red LAN que es individual , cada dispositivo tiene su propia dirección MAC determinada y configurada, después para conectar dos o más computadoras en red con este número lo insertas en las computadoras donde dice http: e introduces el numero:
http://[ la dirección IP que dice la WLAN]