TECNOLOGICO DE ESTUDIOS SUPERIORES DE JOCOTITLAN
REDES DE COMPUTADORAS: Ing. Juan Alberto
Presentan: 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.
OBTENCION DE IP Y MAC ADDRESS
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 ejemplos 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 computadora 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 linmac {
private final static String linuxRunIfConfigCommand() throws IOException {
Process yu = Runtime.getRuntime().exec("ifconfig");
InputStream stdoutStream = new BufferedInputStream(yu.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 yu = Runtime.getRuntime().exec("ipconfig /all");
InputStream stdoutStream = new BufferedInputStream(yu.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();
}
}
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 boolean linuxIsMacAddress(String macAddressCandidate) {
if (macAddressCandidate.length() != 17)
return false;
return true;
}
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;
}
}
coment
Mié, 26/05/2010 - 05:57 — AnónimoLo voy a probar a ver si funciona gracias