`

获取本机和远程计算机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"));
   }
}

评论

相关推荐

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

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

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

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

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

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

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

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

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

    远程关机(可获MAC,hostName),可以根据需要自己填写IP地址,根据IP地址自己可以获取到远程MAC地址和机器名称,然后根据远程机器的密码和帐号实现关机

    PcAnywhere控制远程计算机-使用方法图解教程

    PcAnywhere 是一种远程控制软件,允许用户从远程计算机控制家中的电脑,但前提是需要获取被控端的 IP 地址。用户可以通过动态域名解析软件获取固定 IP 地址,然后通过 PcAnywhere 实现远程控制。 PcAnywhere 的...

    NetWaker 启动远程计算机

    附录:怎样利用 NetWaker 启动远程计算机 <br/>一、硬件设置 <br/> 1.被控机的硬件需求 <br/> 实现网络开机,需要主板、网卡、电源3个设备支持。首先需要查看主板使用说明书,查看主板是否支持Wake-Up...

    mac扫描器 v3.1

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

    MAC扫描器 V3.1 破解版

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

    局域网连通性的测试.doc

    4、ping本机网卡的IP地址,以检验本机网卡是否安装正确和本机的网络配置是否合适。 5、ping本机主机名,以检验本机网卡是否安装正确和本机的网络配置是否合适。 6、先询问并获知身边某同学的IP地址。然后用ping命令...

    mac扫描器v3.1官方中文安装版

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

    IP+MAC强力扫描器【支持VLAN检测】

    此IP+MAC强力扫描器是一款用于批量获取远程计算机网卡的物理地址一款网络管理软件。通过简单设置就能扫描指定网段上的所有pc的MAC地址,是国内仅有的能与sniffer相抗衡的权威软件,超大功能,ip、MAC地址,主机名,...

    远程物理设备识别系统

    然而传统的网络标识(如IP地址、MAC地址)可以伪造,已不足以区分远程主机。利用时钟漂移率这一硬件特有的、稳定的物理特征作为“网络指纹”,可以精确地识别每一台远程主机。本作品利用TCP报文中的时间戳信息,通过...

    nbtscan v2.21中文版.rar

    MAC扫描器 是用于批量获取远程计算机网卡的物理地址(即MAC地址)的一款绿色软件。下载后解压到一个目录,直接运行即可。本软件可以在win9x/2000/xp等操作系统中 用户界面主要分为下面的几个部分: IP 范围第一个...

    C#程序开发范例宝典14

    实例441 得到本机MAC地址 677 实例442 获得系统打开的端口和状态 678 实例443 更改DNS地址 680 14.2 远程控制 681 实例444 远程控制计算机 682 实例445 远程服务控制 683 14.3 网络复制文件 686 实例...

    Visual C++程序开发范例宝典 - 第12章

    实例352 获取本机MAC地址 实例353 获得系统打开的端口和状态 12.2 局域网控制与管理 实例354 获取局域网计算机名称和IP 实例355 远程控制局域网计算机 12.3 局域网资源管理 实例356 计算机监控 实例357 实现进程间...

    ARP欺骗案例

    这时C先发送ARP包获得主机B的MAC地址,然后向B发送ARP Reply数据包,其中源IP地址为A的IP地址,但是源MAC地址却是主机C的MAC地址。主机B收到该ARP Reply后,将根据新的IP地址与MAC映射对更新ARP缓存。这以后当B给A...

    爱莎网络监视器(用于监视局域网动态)

    3-自动获取本机和网关的IP和MAC地址。 4-扫描获取指定IP段内的存活主机及相关信息:IP地址、MAC地址、工作组和主机名。 5-可以在两种扫描方式中进行选择:一般扫描(基于Netbios),高级扫描(基于Arp)。 6-监视所有...

    计算机网络课程设计报告-局域网广播系统.doc

    可实现服务器端向客户端广播信息,还可获取本地IP或远程客户机的IP和MAC地址 功能要求 实现一个局域网环境下的文件的广播以及接收系统: 一行一行读取文件然后广播,同一子网掩码下的的用户都可以接收并查看

Global site tag (gtag.js) - Google Analytics