Red de conocimiento informático - Conocimiento informático - Cómo obtener las direcciones IP y MAC de hosts locales y remotos

Cómo obtener las direcciones IP y MAC de hosts locales y remotos

Le muestra cómo obtener la dirección IP de un host. En la API de Win32, podemos usar la API de NetWork para completar este trabajo, pero en la API .Net, el método de operación real es casi el mismo que el de la API, excepto que necesita saber un poco sobre el espacio de nombres y la clase. Hay muchos artículos en este sitio, por lo que no los presentaré uno por uno sobre el espacio de nombres y las clases.

La plataforma .Net tiene el espacio de nombres System.Net y la clase DNS que contiene proporciona algunos métodos para obtener el nombre del servicio o la dirección IP del servidor. DNS es una clase estática, por lo que las instancias de clase se pueden crear directamente. Sin más preámbulos, echemos un vistazo a los procedimientos específicos:

espacio de nombres NKUtilities

{

usando System

usando System. p>

public static int Main (string [] args)

{

String strHostName = new String ("");

if (args.Length == 0)

{

// Obtener la dirección IP local

// Primero obtener el nombre de host de la máquina local

strHostName = DNS.GetHostName ();

Console.WriteLine("Máquina local"). WriteLine ("Nombre del host de la máquina local: " strHostName);<

}

else

{

strHostName = args [0];

}

// Luego use el nombre del host para obtener la lista de direcciones IP

// El host puede tener más de una dirección IP. , así que no lo hagas. Algunas personas son engañosas.

IPHostEntry ipEntry = DNS.GetHostByName (strHostName);

IPAddress [] addr = ipEntry.AddressList

for (int i = 0; i lt; addr.Length; i )

{

Console.WriteLine ("Dirección IP {0}:{1}", i, addr[i].ToString ());

}

devuelve 0;

}

}

}

Si Si desea obtener el nombre de host, puede utilizar el método GetHostName (sin parámetros) y luego pasar el nombre de host como parámetro al método GetHostByName para obtener una lista de direcciones IP. Finalmente están las direcciones IP en la lista de salida.

Cómo obtener las direcciones IP y MAC de hosts locales y remotos en programación C#

Utilice la clase dns y la especificación WMI para obtener las direcciones IP y MAC

En la programación de C#, obtener el nombre de host y la dirección IP del host es relativamente fácil. Proporciona clase Dns para obtener fácilmente nombres de host y direcciones IP.

AddressList[0].ToString(); //Supongamos que el host local tiene una única tarjeta de red

En este código, se utilizan dos clases, una es la clase Dns y la otra es la clase IPHostEntry. Ambas clases existen en el espacio de nombres System.Net.

La clase Dns obtiene información sobre un host específico del Sistema de nombres de dominio (DNS). La primera línea de código anterior obtiene el nombre del host local del DNS local.

La clase IPHostEntry asocia un DNS o nombre de host con un conjunto de direcciones IP y se utiliza junto con la clase DNS para obtener el conjunto de direcciones IP de un host.

Para obtener la dirección IP de un host remoto, proceda de manera similar.

Después de obtener la dirección IP, si necesita obtener la dirección MAC de la tarjeta de red, debe explorar más a fondo.

Aquí hay dos casos, uno es la dirección MAC local y el otro es la dirección MAC del host remoto. Los dos métodos para obtenerlos son completamente diferentes.

Para obtener la dirección MAC local, puede utilizar la especificación WMI para extraer la dirección MAC con una instrucción SELECT.

La implementación de la especificación WMI está definida en System.NET Framework de .NET Framework.

La clase ManagementObjectSearcher se utiliza para recuperar una colección de objetos administrados en función de una consulta especificada

La clase ManagementObjectCollection es una colección de objetos administrados; el siguiente ejemplo devolverá una colección de objetos administrados del objetos recuperados y sus asignados.

Ejemplo:

consulta ManagementObjectSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration");

ManagementObjectCollection queryCollection = consulta. Get();

foreach( ManagementObject mes en queryCollection )

{

if(mo[" IPEnabled"].ToString() == "True" )

mac = mo["MacAddress"].ToString();

}

Para obtener la dirección MAC del host remoto, debe pedir prestada la función API SendARP. Esta función utiliza el protocolo ARP para enviar un paquete ARP al host de destino y obtiene la dirección MAC del host remoto utilizando el par de direcciones IP y MAC devuelto y almacenado en la memoria caché.

Ejemplo:

Int32 ldest= inet_addr(remoteIP); //IP de destino

Int32 lhost= inet_addr(localIP); //IP local

prueba

{

Int64 macinfo = new Int64();

Int32 len = 6

int res =; SendARP(ldest, 0, ref macinfo, ref len); //Enviar paquete ARP

return Convert.ToString(macinfo, 16); catch(Error de excepción)

{

Console.WriteLine("Error: {0}", err.Message

}

<); p> Devuelve 0.

Return 0.ToString();

Sin embargo, existe una gran limitación al utilizar este método para obtener la MAC, es decir, solo se puede obtener la MAC del host remoto. en la misma dirección de segmento de red. Debido a que los paquetes ARP no se pueden transmitir a través de segmentos de red según los protocolos de red estándar, la dirección MAC de un dispositivo no se puede consultar a través de segmentos de red mediante el protocolo ARP.

Programa de muestra:

usando System.>

clase pública getIP

{

[DllImport(" Iphlpapi.dll")]

privado estático extern int SendARP(Int32 dest, Int32 host, ref Int64 mac Int32 mac);

[DllImport("Ws2_32.DllImport("Ws2_32" )]

private static extern Int32 inet_addr(string ip);

//Obtener la IP de la máquina local

public string getLocalIP()

{

string strHostName = Dns.GetHostName(); //Obtener el nombre del host local

IPHostEntry ipEntry = Dns.GetHostByName() public string getRemoteMac(string localIP, cadena IP remota)

{

Int32 ldest= inet_addr(IP remota);

Int32 lhost= inet_ addr(IP local); p> probar

{

Int64 macinfo = new Int64();

Int32 len = 6

int res = SendARP( ldest, 0, ref macinfo, ref len);

return Convert.ToString(macinfo, 16);

}

catch(Exception err)

p>

p>

{

Console.WriteLine("Error: {0}", err.Message

}

); return 0.

return 0.ToString();

}

public static void Main(string[] args)

{

getIP gi = new getIP();

Consola.

Console.WriteLine("Información de la NIC local: "); Console.WriteLine(gi .getLocalIP() " ​​- " gi.getLocalMac());

Console.WriteLine("/nnnnnnnn");

Console.WriteLine(gi .getLocalIP() " ​​​​- " gi.getLocalMac())WriteLine("/n/r Información de NIC remota:");

string[]

temp = gi.getRemoteIP("scmobile-tj2");

for(int i=0; i {

Console.WriteLine(temp[i]);

}

Console.WriteLine(gi.getRemoteMac("192.168.0.3", "192.168.0.1"));

}

}

La clase DNS de Net se puede utilizar para obtener el nombre de host o la dirección IP de un host específico. Para usar la clase DNS en su programa, debe incluir System.Net:

Incluir sistema. Referencia de .Net

Por ejemplo, si desea obtener la dirección IP de /, el siguiente código hará el trabajo:

// Llamar a DNS.

IPHostEntry ipEntry = DNS.GetHostByName ("www.mindcracker.com");

IPAddress [] IpAddr = ipEntry.AddressList;

for (int i = 0; i lt ; IpAddr.Length; i ){

Console.WriteLine ("Dirección IP {0}:{1}", i, IpAddr[i].ToString ();

}

Además, también puedes usar GetHostName (sin parámetros) para devolver el nombre de host de la computadora local:

string strHostName = DNS.GetHostName (); > Luego pase este nombre de host como parámetro a GetHostByName para obtener información sobre la dirección IP de la computadora local

.