`

获取本机和远程计算机IP及MAC地址

 
阅读更多

利用dns类和WMI规范获取IP及MAC地址

在C#编程中,要获取主机名和主机IP地址,是比较容易的.它提供的Dns类,可以轻松的取得主机名和IP地址.

示例:
string strHostName = Dns.GetHostName();   //得到本机的主机名
IPHostEntry ipEntry = Dns.GetHostByName(strHostName); //取得本机IP
string strAddr = ipEntry.AddressList[0].ToString(); //假设本地主机为单网卡

在这段代码中使用了两个类,一个是Dns类,另一个为IPHostEntry类,二者都存在于命名空间System.Net中.
Dns类主要是从域名系统(DNS)中检索关于特定主机的信息,上面的代码第一行就从本地的DNS中检索出本地主机名.
IPHostEntry类则将一个域名系统或主机名与一组IP地址相关联,它与DNS类一起使用,用于获取主机的IP地址组.
要获取远程主机的IP地址,其方法也是大同小异.

在获取了IP地址后,如果还需要取得网卡的MAC地址,就需要进一步探究了.
这里又分两种情况,一是本机MAC地址,二是远程主机MAC地址.二者的获取是完全不同的.
在获取本机的MAC地址时,可以使用WMI规范,通过SELECT语句提取MAC地址.在.NET框架中,WMI规范的实现定义在System.Management命名空间中.
ManagementObjectSearcher类用于根据指定的查询检索管理对象的集合
ManagementObjectCollection类为管理对象的集合,下例中由检索对象返回管理对象集合赋值给它.

示例:
ManagementObjectSearcher query =new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration") ;
ManagementObjectCollection queryCollection = query.Get();
foreach( ManagementObject mo in queryCollection )
{
   if(mo["IPEnabled"].ToString() == "True")
   mac = mo["MacAddress"].ToString();
}

获取远程主机的MAC地址时,需要借用API函数SendARP.该函数使用ARP协议,向目的主机发送ARP包,利用返回并存储在高速缓存中的IP和MAC地址对,从而获取远程主机的MAC地址.

示例:
Int32 ldest= inet_addr(remoteIP); //目的ip
Int32 lhost= inet_addr(localIP); //本地ip

try
{
   Int64 macinfo = new Int64();
   Int32 len = 6;
   int res = SendARP(ldest,0, ref macinfo, ref len);   //发送ARP包
   return Convert.ToString(macinfo,16);
}
catch(Exception err)
{
   Console.WriteLine("Error:{0}",err.Message);
}
return 0.ToString();

但使用该方式获取MAC时有一个很大的限制,就是只能获取同网段的远程主机MAC地址.因为在标准网络协议下,ARP包是不能跨网段传输的,故想通过ARP协议是无法查询跨网段设备MAC地址的。

示例程序:

using System.Net;
using System;
using System.Management;
using System.Runtime.InteropServices;

public class getIP
{
   [DllImport("Iphlpapi.dll")]
   private static extern int SendARP(Int32 dest,Int32 host,ref Int64 mac,ref Int32 length);
   [DllImport("Ws2_32.dll")]
   private static extern Int32 inet_addr(string ip);

   //获取本机的IP
   public string getLocalIP()
   {
    string strHostName = Dns.GetHostName();   //得到本机的主机名
    IPHostEntry ipEntry = Dns.GetHostByName(strHostName); //取得本机IP
    string strAddr = ipEntry.AddressList[0].ToString();
    return(strAddr);
   }
   //获取本机的MAC
   public string getLocalMac()
   {
    string mac = null;
    ManagementObjectSearcher query =new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration") ;
    ManagementObjectCollection queryCollection = query.Get();
    foreach( ManagementObject mo in queryCollection )
    {
       if(mo["IPEnabled"].ToString() == "True")
         mac = mo["MacAddress"].ToString();
    }
    return(mac);
   }

   //获取远程主机IP
   public string[] getRemoteIP(string RemoteHostName)
   {
    IPHostEntry ipEntry = Dns.GetHostByName(RemoteHostName);
    IPAddress[] IpAddr = ipEntry.AddressList;
    string[] strAddr = new string[IpAddr.Length];
    for (int i=0;i    {
     strAddr[i] = IpAddr[i].ToString();
    }
    return(strAddr);
   }
   //获取远程主机MAC
   public string getRemoteMac(string localIP, string remoteIP)
   {
    Int32 ldest= inet_addr(remoteIP); //目的ip
    Int32 lhost= inet_addr(localIP); //本地ip
  
    try
    {
     Int64 macinfo = new Int64();
     Int32 len = 6;
     int res = SendARP(ldest,0, ref macinfo, ref len);
     return Convert.ToString(macinfo,16);
    }
    catch(Exception err)
    {
     Console.WriteLine("Error:{0}",err.Message);
    }
    return 0.ToString();
   }
  
  
   public static void Main(string[] args)
   {
    getIP gi = new getIP();
    Console.WriteLine("本地网卡信息:");
    Console.WriteLine(gi.getLocalIP() + " - " + gi.getLocalMac());
   
    Console.WriteLine("\n\r远程网卡信息:");
    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"));
   }
}

评论

相关推荐

    批处理获取本机IP+MAC+计算机名

    在这个特定的场景中,“批处理获取本机IP+MAC+计算机名”指的是创建一个批处理文件,用于获取并显示计算机的IP地址、MAC地址以及计算机名称。这些信息在系统管理和网络配置中非常有用。 IP地址是互联网协议地址的...

    Java 自动获取本机IP、MAC地址

    7. **实际应用**:这种获取本机IP和MAC地址的工具在多种场景下都有用处,例如网络调试、远程连接设置、系统监控等。对于笔记本电脑,由于可能有多个网络接口(如无线和有线),因此可能会获取到多个MAC地址。 通过...

    pb获取ip地址/mac地址

    标题中的"pb获取ip地址/mac地址"指的是在PowerBuilder(简称pb)环境下获取计算机的IP地址和MAC地址。PowerBuilder是一种流行的.NET和Java应用程序开发工具,尤其适合于创建数据库驱动的应用程序。在这个场景中,...

    跨网段获取远程主机MAC地址的方法与java实现

    然而,传统的获取远程主机MAC地址的方法,如通过IP Helper API的SendARP函数,存在明显的局限性——仅能有效在本地网段内工作,对于跨网段的主机,此方法往往只能获取到网关的MAC地址,而非目标主机的真实MAC地址。...

    获取本机的名称IP和MAC信息

    在计算机网络中,获取本机的名称、IP和MAC地址是常见的系统管理任务,这些信息对于网络通信至关重要。本文将详细讲解如何在不同的操作系统中获取这些关键数据。 首先,让我们了解这些术语的基本含义: 1. **主机名...

    通过java获取远程机器mac地址

    在对网内主机进行监控时需要通过java获取远程机器的mac地址

    通过IP地址获取对方MAC地址

    4. 调用SendArp()函数,传入目标IP地址、本机接口的IP地址、MAC地址数组以及物理地址长度参数。 5. 检查SendArp()函数的返回值,如果成功则解析MAC地址数组,否则处理错误信息。 6. 最后,将MAC地址以人类可读的格式...

    C#获取本地主机IPmac地址

    根据给定文件的信息,我们可以总结出以下详细的C#知识点及相关代码示例,这些知识点主要涉及如何在C#中获取本地主机以及远程主机的IP地址和MAC地址。 ### 一、获取本地主机IP地址 #### 1. 使用 `Dns.GetHostName()...

    用dns类和WMI规范获取IP及MAC地址

    DNS类可以方便地帮助我们获取本机的主机名与IP地址,而WMI则提供了强大的接口来查询系统的硬件信息,包括网络适配器的MAC地址。 #### 二、使用DNS类获取主机名和IP地址 DNS(Domain Name System)类位于.NET ...

    本机IP地址查看复制工具.rar

    - 使用命令行工具,如Windows的`ipconfig`命令,可以获取本机IP地址和MAC地址等信息。 - 通过图形界面工具,例如本例中的“本机IP提取.exe”,可以更直观便捷地查看这些信息,并支持一键复制,方便用户快速将信息...

    C# 获取局域网所有设备IP和MAC

    本教程将深入讲解如何使用C#来获取局域网内所有设备的IP和MAC地址。 首先,我们要理解IP和MAC地址的概念。IP(Internet Protocol)地址是互联网上的设备唯一标识,用于数据传输。而MAC(Media Access Control)地址...

    C#编程获取局域网IP及网卡MAC地址

    C#提供了System.Net.NetworkInformation命名空间,其中包含了一些类和方法,可以帮助我们获取本地或远程计算机的IP信息。 `IPHostEntry`类是C#中用于存储主机名和IP地址信息的类,我们可以使用`Dns.GetHostEntry()`...

    nbtstat及netstat命令---查对方IP mac地址 根据IP查对方计算机名

    nbtstat 及 netstat 命令---查对方 IP mac 地址 根据 IP 查对方计算机名 nbtstat 命令是用于查看当前基于 NETBIOS 的 TCP/IP 连接状态的命令,通过该命令可以获得远程或本地机器的组名和机器名。该命令的主要用途是...

    远程关机 获取远程MAC,机器名

    一旦有了IP地址,我们就可以使用特定的命令或工具来获取该设备的MAC地址和主机名。 MAC地址,即媒体访问控制地址,是网络硬件(如网卡)的物理地址。在局域网中,MAC地址用于识别设备,因为它是全球唯一的。在...

    Mac扫描器——用于批量获取远程计算机网卡的物理地址

    “MAC扫描器”是用于批量获取远程计算机网卡的物理地址一款网络管理软件。 本软件运行于网络(局域网、Internet都可以)内的一台机器上,即可监控整个网络的连接情况,实时检测各用户的IP、MAC、主机名、用户名等并...

    可以获得ip及mac地址

    5. **API接口**:对于编程人员,可以通过网络编程API,如Python的`socket`库,来获取本机或远程主机的IP地址。获取MAC地址可能需要更底层的库,比如在Python中可以使用`psutil`或`scapy`。 了解如何获取IP和MAC地址...

    获取MAC地址 计算机用户名,内外网IP,开启远程连接

    获取MAC地址 计算机用户名,内外网IP,开启远程连接,只能用于XP

    C# 通过IP或计算机名 获取信息

    在C#中,可以使用`System.Net.NetworkInformation`命名空间中的`Ping`类和`IPAddress`类来获取本地或远程计算机的IP地址。 - 例如,`Ping`类的`Send`方法可以用来向指定计算机发送一个ICMP回显请求,并返回`...

    计算机名、ip、mac查看软件

    计算机名、IP地址和MAC地址是网络通信中的关键标识符,了解如何查看这些信息对于日常的计算机管理和网络故障排查至关重要。下面将详细解释这三个概念及其查看方法。 首先,计算机名是在局域网(LAN)中识别每台...

    获取远程主机MAC地址的新思路及实现.docx

    本文主要讲述了获取远程主机MAC地址的新思路及实现方法,该方法基于NetBIOS协议和UDP协议,通过构造特殊的UDP包来获取远程主机的MAC地址。下面是详细的知识点: 一、引言 * MAC地址是网络卡上的物理地址,固化在...

Global site tag (gtag.js) - Google Analytics