Cómo obtener las direcciones IP y MAC de hosts locales y remotos
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. p>
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
.