`

C#编程之 如何获取本地和远程主机的IP及MAC地址

    博客分类:
  • C#
阅读更多
利用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"));
   }
}

转自:http://hi.baidu.com/dongdongjiao/blog/item/10a903093db571cb3ac76340.html
分享到:
评论

相关推荐

    C#获取本地主机IPmac地址

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

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

    本篇文章将深入探讨如何使用C#编程语言来获取局域网内计算机的IP地址以及对应的网卡物理(MAC)地址。 首先,IP地址(Internet Protocol Address)是互联网上的每个设备独一无二的数字标识,它分为IPv4和IPv6两种...

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

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

    C#获取本机相关mac和ip信息以及服务器ip

    在C#编程中,获取本机的MAC地址和IP信息是常见的需求,这些信息对于网络通信和设备识别至关重要。MAC地址是物理网络接口控制器的唯一标识,而IP地址则是网络中设备的逻辑地址。同样,获取服务器IP对于远程通信和连接...

    c#中获取服务器IP

    根据提供的标题、描述、标签及部分内容,我们可以整理出以下与C#编程语言相关的知识点: ### 一、获取服务器IP 在C#中,可以通过多种方式获取服务器或客户端的IP地址,其中一种常用的方法是利用ASP.NET框架中的`...

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

    在C#编程环境中,通过DNS类和Windows Management Instrumentation (WMI)技术来获取主机名称、IP地址以及MAC地址是非常常见的需求之一。DNS类可以方便地帮助我们获取本机的主机名与IP地址,而WMI则提供了强大的接口来...

    C#如何获得设备Mac地址.docx

    在C#编程中,获取设备的MAC(物理)地址是一个相对复杂的过程,因为与获取主机名和IP地址相比,MAC地址通常涉及到更底层的网络通信。以下将详细讲解如何使用C#来获取本地和远程设备的MAC地址。 首先,我们讨论获取...

    caaa.rar_IP MAC_mac_remote access_www.caaa.c_获取远程IP

    本文将深入探讨如何使用C#编程语言来获取远程设备的IP和MAC地址,以及实现远程访问的相关技术。 首先,让我们了解IP地址和MAC地址的基本概念。IP(Internet Protocol)地址是一个逻辑地址,用于在网络上唯一标识一...

    C#ip地址组件

    - **网络信息获取**:可能包含获取本地或远程主机的IP地址、MAC地址、子网掩码等相关网络信息的函数。 - **辅助功能**:如IP地址的可视化显示,或提供与IP相关的用户界面控件,如IP输入框,允许用户以分段形式输入IP...

    C#如何获得设备Mac地址.pdf

    在C#编程中,获取设备的MAC(Media Access Control)地址是一项常见的任务,特别是在需要进行网络通信或者设备识别的时候。MAC地址是网络接口控制器(NIC)的一个硬件标识,它是全球唯一的,用于在网络中唯一地标识...

    获取计算机信息(C#)

    本项目聚焦于使用C#获取计算机的基本信息,包括IP地址、登录用户名、物理内存、MAC地址和CPU ID等核心硬件和网络信息。这些信息对于系统监控、故障排查和性能优化都是至关重要的。 首先,让我们详细了解每个知识点...

    远程获取mac地址二十一圩五十二玩玩

    - **Python**: 使用`psutil`库可以获取本地MAC地址,而`socket`库配合`arp`命令可以尝试获取远程主机的MAC地址。 - **Java**: 可以使用`java.net.NetworkInterface`类获取MAC地址。 - **C#**: 利用`.NET`框架的`...

    获取服务器mac或本机mac

    许多网络管理工具如Wireshark、 Angry IP Scanner 或者Nmap都提供了获取远程主机MAC地址的功能。这些工具通常通过发送ARP请求(Address Resolution Protocol)来获取目标IP对应的MAC地址。 ### 通过API或编程语言...

    通过IPV6唤醒远程计算机,WOL

    要发送数据到远程主机,需要指定IPv6地址和端口号。 3. **发送“魔法包”**:创建一个包含目标MAC地址的“魔法包”字符串,然后将其转换为字节数组。C#的`BitConverter`类可以完成这种转换。接着,使用`Socket....

    显示本机IP(GUI版)

    通常,这样的工具会自动检测并显示设备的本地IP地址(如IPv4或IPv6),可能还包括网络接口卡(NIC)的详细信息,如MAC地址和子网掩码。它可能还会包含有关网络连接状态的信息,例如是否连接到局域网(LAN)或互联网...

    C#程序开发范例宝典14

    实例439 通过IP地址获取主机名称 673 实例440 修改本机IP地址 674 实例441 得到本机MAC地址 677 实例442 获得系统打开的端口和状态 678 实例443 更改DNS地址 680 14.2 远程控制 681 实例444 远程控制...

    C#.net_经典编程例子400个

    273 实例190 获取窗口文本 273 实例191 判断文件是否正在被使用 274 实例192 在程序中调用.HLP文件 275 实例193 C#中实现文件拖放 276 实例194 文件比较 276 第7章 操作系统与Windows...

    C# 网络通信开发训练实例

    实例03 通过IP地址获取主机名称...... 673 实例04 修改本机IP地址...... 674 实例05 得到本机MAC地址...... 677 实例06 获得系统打开的端口和状态...... 678 实例07 更改DNS地址...... 680 14.2 远程控制...

    C#局网关机器

    这种功能通常依赖于网络发现协议,如Bonjour(Zeroconf)或者C#内置的NetworkInformation类,来检测网络中的其他设备并收集相关信息,例如IP地址、MAC地址、设备名称等。这有助于管理员监控网络状态,了解在线设备,...

Global site tag (gtag.js) - Google Analytics