一:基础知识

a:

Dns 类

提供简单的域名解析功能。

Dns 类是一个静态类,它从 Internet 域名系统 (DNS) 检索关于特定主机的信息。

在 IPHostEntry 类的实例中返回来自 DNS 查询的主机信息。 如果指定的主机在 DNS 数据库中有多个入口,则

IPHostEntry 包含多个 IP 地址和别名。

b,

Dns.GetHostByName 方法

注意:此 API 现在已过时。

获取指定 DNS 主机名的 DNS 信息。

参数

hostName

类型:System.String

主机的 DNS 名称。

返回值

类型:System.Net.IPHostEntry

一个 IPHostEntry 对象,包含对应于 hostName 中指定的地址的主机信息。

GetHostByName 方法向 Internet DNS 服务器查询主机信息。 如果传递一个空字符串作为主机名,此方法将检索本地计算

机的标准主机名。

若要异步访问 DNS 信息,请使用 BeginGetHostByName 和 EndGetHostByName 方法。

如果把 Ipv6Element.Enabled 属性设置到 true,则返回的 IPHostEntry 实例的 Aliases 属性不由该方法填充,且总为空。

c,

IPHostEntry 类

为 Internet 主机地址信息提供容器类。

IPHostEntry 类将一个域名系统 (DNS) 主机名与一组别名和一组匹配的 IP 地址关联。

IPHostEntry 类作为 Helper 类和 Dns 类一起使用。

d,

IPHostEntry.AddressList 属性

获取或设置与主机关联的 IP 地址列表。

属性值

类型:System.Net.IPAddress[]

一个 IPAddress 类型的数组,包含解析为 Aliases 属性中包含的主机名的 IP 地址。

e,

& 运算符(C# 参考)

& 运算符既可作为一元运算符也可作为二元运算符。

一元 & 运算符返回操作数的地址(要求 unsafe 上下文)。

为整型和 bool 类型预定义了二进制 & 运算符。 对于整型,& 计算操作数的逻辑按位“与”。 对于 bool 操作数,& 计算操

作数的逻辑“与”;也就是说,当且仅当两个操作数均为 true 时,结果才为 true。

& 运算符计算两个运算符,与第一个操作数的值无关。

f,

System.Management 命名空间

提供对一组丰富的管理信息和管理事件(它们是关于符合 Windows Management Instrumentation (WMI) 基础结构的系统、

设备和应用程序的)的访问。 应用程序和服务可以使用从 ManagementObjectSearcher 和 ManagementQuery 派生的类,

查询感兴趣的管理信息(例如在磁盘上还剩多少可用空间、当前 CPU 利用率是多少、某一应用程序正连接到哪一数据库等

等);或者应用程序和服务可以使用 ManagementEventWatcher 类预订各种管理事件。 这些可访问的数据可以来自分布式

环境中托管的和非托管的组件。

g,

ManagementClass 类

表示公共信息模型 (CIM) 管理类。 管理类是一个 WMI 类,如 Win32_LogicalDisk 和 Win32_Process,前者表示磁盘驱动

器,后者表示进程(如 Notepad.exe)。 通过该类的成员,可以使用特定的 WMI 类路径访问 WMI 数据。 有关更多信息,

请参见“Windows Management Instrumentation”文档中的“Win32 Classes”(Win32 类)

h,

ManagementClass 构造函数 (String)

初始化 ManagementClass 类的一个新实例,将其初始化到给定路径。 该类表示 WMI 中的一个公共信息模型 (CIM) 管理类,如 Win32_LogicalDisk 和 Win32_Process,前者表示磁盘驱动器,后者表示进程(如 Notepad.exe)。 有关更多信息,请参见“Windows Management Instrumentation”文档中的“Win32 Classes”(Win32 类)

.NET Framework 安全性

完全信任直接调用方。 此成员不能由部分信任的代码使用。

i,

ManagementObjectCollection 类

表示通过 WMI 检索到的管理对象的不同集合。 此集合中的对象为从 ManagementBaseObject 派生的类型,包括

ManagementObject 和 ManagementClass。 通过 ManagementObjectSearcher 对象执行 WMI 查询,或者通过表示指定

类型的 ManagementClass 检索该类型管理对象的枚举,可得到此集合。 此外,这也可能是以指定方式与特定管理对象相关的

管理对象集合 — 在这种情况下,此集合可以通过诸如 GetRelated() 之类的方法检索到。 此集合可以通过

ManagementObjectCollection.ManagementObjectEnumerator 遍历,并且能够针对各种管理任务对集合中的对象进行检查

或操作。

j,

ManagementClass.GetInstances 方法

返回该类的所有实例的集合。

返回值

类型:System.Management.ManagementObjectCollection

表示该类的实例的 ManagementObject 对象的集合。

.NET Framework 安全性

完全信任直接调用方。 此成员不能由部分信任的代码使用。

k,

ManagementObject 类

表示 WMI 实例。

l,

ManagementBaseObject.Item 属性

通过 [] 符获取对属性值的访问。 此属性是 ManagementBaseObject 类的索引器。 您可以使用由某个类型定义的默认索引属

性,但不能显式定义自己的属性。 但是,在某个类上指定 expando 特性将自动提供一个类型为 Object、索引类型为 String

的默认索引属性。

参数

propertyName

类型:System.String

相关的属性的名称。

属性值

类型:System.Object

返回一个 Object 值,该值包含特定类属性的管理对象

属性值

一个对象实例,它包含所请求的属性的值。

.NET Framework 安全性

完全信任直接调用方。 此成员不能由部分信任的代码使用。

m,

Dns.GetHostEntry 方法 (String)

将主机名或 IP 地址解析为 IPHostEntry 实例。

参数

hostNameOrAddress

类型:System.String

要解析的主机名或 IP 地址。

返回值

类型:System.Net.IPHostEntry

一个 IPHostEntry 实例,包含有关 hostNameOrAddress 中指定的主机的地址信息。

GetHostEntry 方法在 DNS 服务器中查询与某个主机名或 IP 地址关联的 IP 地址。

当传递一个空字符串作为主机名时,此方法返回本地主机的 IPv4 地址。

如果未能找到主机名,则会返回值为 11001 的 SocketException 异常(Windows 套接字错误

WSAHOST_NOT_FOUND)。 如果 DNS 服务器不响应,则会返回此异常。 如果名称不是正式的主机名或别名,或者在查询的数据库中找不到它,则也会返回此异常。

如果 hostNameOrAddress 参数包含 Any 或 IPv6Any,还会返回 ArgumentException 异常。

GetHostEntry 方法假设如果 IP 字符串在应用程序所需的 hostNameOrAddress 参数中传递,则返回设置了所有属性的IPHostEntry 实例。 这些属性包括:AddressList、Aliases 和 HostName。 因此,当传递 IP 字符串时,实现GetHostEntry 方法将执行以下行为:

1.  该方法尝试分析地址。 如果 hostNameOrAddress 参数包含合法 IP 字符串,则第一阶段将成功。

2.  使用 IP 字符串的 IP 地址的进行反向查找,尝试获取主机名。 此结果设置为 HostName 属性。

3.  再次使用此反向查找到的主机名,获取与该主机名相关联、且设置为 AddressList 属性的所有可能的 IP 地址。

对于 IPv4 字符串,以上三个步骤可能全部成功。 但是,可能返回实际属于其他主机的某个 IPv4 地址的过时 DNS 记录。

这可能导致步骤 3 失败,并引发异常(该 IPv4 地址具有 DNS PTR 记录,但没有 DNS A 记录)。

对于 IPv6,上面的步骤 2 可能失败,因为大多数 IPv6 部署不注册 IPv6 地址的反向 (PTR) 记录。 因此,此方法可能将

IPv6 字符串返回为 HostName 属性中的完全限定域 (FQDN) 主机名。

根据不同的 IP 字符串,GetHostAddresses 方法有不同的行为。 如果上面的步骤 1 成功(成功分析为 IP 地址),则立即

将该地址作为结果返回, 不会尝试进行反向查找。

如果本地计算机上没有安装 IPv6,就会从 GetHostEntry 方法的结果中筛选掉 IPv6 地址。 结果,只要生成 IPv6 结果可用

于参数 hostNameOrAddress,就可能返回一个空的 IPHostEntry 实例。

返回的 Aliases 属性(属于 IPHostEntry 实例)不会由该方法填充,并且始终为空。

当应用程序中启用了网络跟踪时,此成员会发出跟踪信息。

n,

IPAddress.AddressFamily 属性

获取 IP 地址的地址族。

属性值

类型:System.Net.Sockets.AddressFamily

对于 IPv4,返回 InterNetwork;对于 IPv6,返回 InterNetworkV6。

o,

IPAddress 类

提供网际协议 (IP) 地址。

IPAddress 类包含计算机在 IP 网络上的地址。

二:截图,代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Management;// namespace MyQQ
{
public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
string s = "", mac = "";
//
//使用dns得到本地主机名
//
string hostInfo = Dns.GetHostName();//使用到dns类 lstbx_ip.Items.Add("IP地址" + " " + "MAC地址");
//得到主机名下的所有ip
IPAddress[] addressList = Dns.GetHostEntry(hostInfo).AddressList;
IPAddress localaddress = null;
foreach (IPAddress _ip in addressList)
{
if (_ip.AddressFamily.ToString().ToUpper() == "INTERNETWORK")//判断是否是ipv4其中可以是ipv6
{
localaddress = _ip;
}
} //下面方法过时了
//IPAddress[] addressList = Dns.GetHostByName (hostInfo).AddressList;
//for (int i = 0; i < addressList.Length; i++)
//{
// s += addressList[i].ToString();
// lstbx_ip.Items.Add(s);
//}
//
//获取MAC地址
// ManagementClass mc;
mc = new ManagementClass("Win32_NetworkAdapterConfiguration");//ManagementObjectCollection 类表示通过 WMI 检索到的管理对象的不同集合。
ManagementObjectCollection moc = mc.GetInstances();//ManagementClass.GetInstances 方法返回该类的所有实例的集合。 foreach (ManagementObject mo in moc)
{ if (mo["IPEnabled"].ToString() == "True")
mac = mo["MacAddress"].ToString(); }
s = localaddress.ToString();
lstbx_ip.Items.Add(s +" "+ mac); }
}
}

C#怎么得到主机名,IP,MAC的更多相关文章

  1. 根据IP查主机名和MAC地址

    根据IP查主机名: nbtstat -a XXX.XXX.XXX.XXX根据IP查MAC地址: arp -a XXX.XXX.XXX.XXXXXX.XXX.XXX.XXX指代要查的主机的IP

  2. 如何高效实现扫描局域网IP、主机名、MAC和端口

    近几年工作经常使用RFID识读器,智能家居网关,温湿度传感器.串口服务器.视频编码器等,一般是有串口和网口,由于现场原因一般较少使用串口,大多使用网口.连接方法是IP地址和端口,有的设备带搜索软件,有 ...

  3. python 实现获取电脑IP、主机名、Mac地址

    import socket import uuid # 获取主机名 hostname = socket.gethostname() #获取IP ip = socket.gethostbyname(ho ...

  4. python实现获取电脑IP、主机名、Mac地址

    import socket import uuid # 获取主机名 hostname = socket.gethostname() #获取IP ip = socket.gethostbyname(ho ...

  5. 查看局域网内所有的主机名、MAC地址和IP地址

    查看所有 IP at MAC $ arp -a ? (10.125.49.187) at 18:81:e:eb:ef:c0 on en0 ifscope [ethernet] ? (10.125.50 ...

  6. linux修改主机名-IP

    1.查看当前主机名  hostname 2. ifconfig   显示所有网络接口的信息  ifconfig eth0   显示网卡eth0的信息 3.临时修改主机名 hostname rusky. ...

  7. 【Hadoop 分布式部署 二:分布式环境预备工作(主机名 IP地址等设置)】

    1.首先使用工具连接上  这三台虚拟主机 2.配置主机名   切换到  root 用户 第一种方式 可以使用命令       hostname   [要更改的主机名]     但是这种更改主机名的方式 ...

  8. vbs 脚本 获取机器名/IP/MAC

    strComputer = "."strMesseage="" Set objWMIService = GetObject("winmgmts:{im ...

  9. java 获取局域网中的全部主机名和IP地址

    DOS命令 命令 意义 net view 获取局域网中的全部主机名 ipconfig -all 获取本地IP,主机名,MAC地址 arp -a 获取本局域网中的全部IP地址和物理地址 ping -a ...

随机推荐

  1. CSS3 颜色值HSL表示方式&简单实例

    HSL色彩模式:就是色调(Hue).饱和度(Saturation).亮度(Lightness)三个颜色通道的改变以及它们相互之间的叠加来获得各种颜色,色调(Hue)色调最大值360,饱和度和亮度有百分 ...

  2. opencar二次开发常用代码

    <?php //创建Registry对象 //注册所有公共类 //创建Front类对象,作为请求分发器(Dispatcher) //根据用户请求(url)创建控制器对象及其动作. // 在Fro ...

  3. oracle-绑定变量学习笔记(未完待续)

    --定义变量SQL> var a number; --给绑定变量赋值SQL> exec :a :=123; PL/SQL procedure successfully completed. ...

  4. angular.js 数字

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script sr ...

  5. github 分支 合并

    Git如何进行分支管理?      1.创建分支      创建分支很简单:git branch <分支名>      2.切换分支      git checkout <分支名&g ...

  6. linux下gdal的python包的安装

    由于python包是从C++包编译出来的,所以需要先下载源码进行编译安装.1. gdal下载http://download.osgeo.org/gdal/CURRENT/sudo ./configur ...

  7. uboot总结:uboot配置和启动过程3(config.mk分析)

    说明:文件位置:在uboot的目录下,文件名为:config.mk.是一个makefile文件,以后会被主Makefile调用. 它的主要作用的是: (1)具体的设置交叉编译工具链接(主Makefil ...

  8. api1

    http://www.android-doc.com/reference/android/app/Fragment.html

  9. JavaScript的组成—ECMAScript、BOM和DOM

      JavaScript 是一种基于 ECMAScript 规范的脚本语言,并在此基础上进行了自己的封装.ECMAScript 不是一种编程语言,仅仅是一种脚本语言规范,由欧洲计算机协会制定和发布,任 ...

  10. c# appdomain

    http://www.cnblogs.com/Terrylee/archive/2005/11/28/285809.html