- 浏览: 1079014 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (399)
- C++ (39)
- Java (74)
- Java界面开发学习笔记 (4)
- Java用户的c++之旅 (0)
- 自言自语 (12)
- DSP (1)
- MCU (0)
- CG (0)
- Jabber (0)
- Gloox (0)
- Linux (11)
- Windows (19)
- Networks (4)
- Jobs (0)
- PHP (1)
- JSP (2)
- 生活 (35)
- C (2)
- Qt4 (2)
- C# (50)
- WPF (5)
- ASP (2)
- FLEX (47)
- SQL (20)
- JavaScript (12)
- SharePoint (6)
- GWT (1)
- Dojo (9)
- HTML (11)
- Others (7)
- 如何安装配置系列 (7)
- UML (2)
- Android (3)
- alibaba (1)
最新评论
-
zxjlwt:
学习了http://surenpi.com
Firefox插件开发: Hello World! -
ylldzz:
楼主知道MVEL怎么调试么
MVEL简介及快速使用 -
blueman2012:
您好,可否提供源码下载,我把您的代码贴过来后,好多报错的,谢谢 ...
Log4J日志解析 -
svygh123:
你的游标都没有关闭呢!
MYSQL游标嵌套循环示例 -
dizh:
写的很好啊
MVEL简介及快速使用
利用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#编程中,要获取主机名和主机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
发表评论
-
策略模式
2010-10-08 16:34 1176一、概念 策略模式(Strategy):它定义了一系 ... -
C#获取返回错误码
2010-05-21 17:59 1813[DllImport("TestWin32Dl ... -
VS.NET 开发Windows服务的步骤
2010-05-20 14:25 1607在很多应用中需要做windows服务来在一些后台操作,比如监视 ... -
c# 允许服务与桌面交互
2010-05-20 14:20 2708我们写一个服务,有时候要让服务启动某个应用程序,就要修 ... -
C#单例模式的三种写法
2010-05-19 15:58 48577第一种最简单,但没有考虑线程安全,在多线程时可能会出问题, ... -
C#中获取我的文档系统文件夹路径
2010-05-17 15:29 2276本技巧使用GetFolderPath方法来获取指向由指定枚 ... -
C#自定义事件的步骤介绍
2010-05-13 17:54 3301通常C#自定义事件有下面的几个步骤: ... -
使用反射机制遍历对象中的属性名及属性值
2010-05-03 16:20 2847首先描述一种情景,当给你一个VO类(这个类是映射到数据库的表 ... -
C#的逆向工程-IL指令集
2010-04-30 10:28 1690一些 IL 语言解释: ... -
使用SqlHelper时“阅读器关闭时read的尝试无效”的解决方法
2010-04-20 14:54 1821原SqlHelper类中ExecuteReader方法体 ... -
C# 删除文件夹
2009-12-31 11:28 2570/// <summary> ... -
System.Windows.Forms.Timer和System.Timers.Timer的区别 [转]
2009-12-16 23:44 5210.NET Framework里面提供了三种Timer: ... -
关于var1=var2=something赋值语句的思考
2009-11-18 16:16 1245刚才在阅读《c#本质论》一书时,开头有提到var1=var2= ... -
C#使textbox滚动到最新一行
2009-11-16 12:33 2558方法1: textBox.Text += " ... -
Invoke()/BeginInvoke()区别
2009-11-15 17:43 7235查看MSDN如下: Control..::.Inv ... -
Invoke 和 BeginInvoke 的真正涵义
2009-11-15 17:37 1331BeginInvoke 方法真的是新开一个线程进行异步调用 ... -
编写安全的多线程C#程序
2009-11-15 01:24 1910与多线程相关的两个常见的需要解决的问题是:临界资源保护和线 ... -
线程,同步与锁——Lock你到底锁住了谁
2009-11-15 01:18 1597线程在多核时代的优势月来越明显,多线程编程的学习也提上议事日程 ... -
关于lock(this)的说明及用法
2009-11-15 01:16 5363一. 为什么要lock,lock了 ... -
远程dll注入 C#
2009-11-14 16:43 3140using System; using System. ...
相关推荐
根据给定文件的信息,我们可以总结出以下详细的C#知识点及相关代码示例,这些知识点主要涉及如何在C#中获取本地主机以及远程主机的IP地址和MAC地址。 ### 一、获取本地主机IP地址 #### 1. 使用 `Dns.GetHostName()...
本篇文章将深入探讨如何使用C#编程语言来获取局域网内计算机的IP地址以及对应的网卡物理(MAC)地址。 首先,IP地址(Internet Protocol Address)是互联网上的每个设备独一无二的数字标识,它分为IPv4和IPv6两种...
在C#中,可以使用`System.Net.NetworkInformation`命名空间中的`Ping`类和`IPAddress`类来获取本地或远程计算机的IP地址。 - 例如,`Ping`类的`Send`方法可以用来向指定计算机发送一个ICMP回显请求,并返回`...
在C#编程中,获取本机的MAC地址和IP信息是常见的需求,这些信息对于网络通信和设备识别至关重要。MAC地址是物理网络接口控制器的唯一标识,而IP地址则是网络中设备的逻辑地址。同样,获取服务器IP对于远程通信和连接...
根据提供的标题、描述、标签及部分内容,我们可以整理出以下与C#编程语言相关的知识点: ### 一、获取服务器IP 在C#中,可以通过多种方式获取服务器或客户端的IP地址,其中一种常用的方法是利用ASP.NET框架中的`...
在C#编程环境中,通过DNS类和Windows Management Instrumentation (WMI)技术来获取主机名称、IP地址以及MAC地址是非常常见的需求之一。DNS类可以方便地帮助我们获取本机的主机名与IP地址,而WMI则提供了强大的接口来...
在C#编程中,获取设备的MAC(物理)地址是一个相对复杂的过程,因为与获取主机名和IP地址相比,MAC地址通常涉及到更底层的网络通信。以下将详细讲解如何使用C#来获取本地和远程设备的MAC地址。 首先,我们讨论获取...
本文将深入探讨如何使用C#编程语言来获取远程设备的IP和MAC地址,以及实现远程访问的相关技术。 首先,让我们了解IP地址和MAC地址的基本概念。IP(Internet Protocol)地址是一个逻辑地址,用于在网络上唯一标识一...
- **网络信息获取**:可能包含获取本地或远程主机的IP地址、MAC地址、子网掩码等相关网络信息的函数。 - **辅助功能**:如IP地址的可视化显示,或提供与IP相关的用户界面控件,如IP输入框,允许用户以分段形式输入IP...
在C#编程中,获取设备的MAC(Media Access Control)地址是一项常见的任务,特别是在需要进行网络通信或者设备识别的时候。MAC地址是网络接口控制器(NIC)的一个硬件标识,它是全球唯一的,用于在网络中唯一地标识...
本项目聚焦于使用C#获取计算机的基本信息,包括IP地址、登录用户名、物理内存、MAC地址和CPU ID等核心硬件和网络信息。这些信息对于系统监控、故障排查和性能优化都是至关重要的。 首先,让我们详细了解每个知识点...
- **Python**: 使用`psutil`库可以获取本地MAC地址,而`socket`库配合`arp`命令可以尝试获取远程主机的MAC地址。 - **Java**: 可以使用`java.net.NetworkInterface`类获取MAC地址。 - **C#**: 利用`.NET`框架的`...
许多网络管理工具如Wireshark、 Angry IP Scanner 或者Nmap都提供了获取远程主机MAC地址的功能。这些工具通常通过发送ARP请求(Address Resolution Protocol)来获取目标IP对应的MAC地址。 ### 通过API或编程语言...
要发送数据到远程主机,需要指定IPv6地址和端口号。 3. **发送“魔法包”**:创建一个包含目标MAC地址的“魔法包”字符串,然后将其转换为字节数组。C#的`BitConverter`类可以完成这种转换。接着,使用`Socket....
此外,工具还可能提供更深入的网络信息,比如网络接口卡(NIC)的MAC地址和子网掩码,这些信息对于网络配置和故障诊断同样至关重要。 源码的开放性是“显示本机IP(GUI版)”工具的另一个亮点。如果这个工具包含了源...
实例439 通过IP地址获取主机名称 673 实例440 修改本机IP地址 674 实例441 得到本机MAC地址 677 实例442 获得系统打开的端口和状态 678 实例443 更改DNS地址 680 14.2 远程控制 681 实例444 远程控制...
273 实例190 获取窗口文本 273 实例191 判断文件是否正在被使用 274 实例192 在程序中调用.HLP文件 275 实例193 C#中实现文件拖放 276 实例194 文件比较 276 第7章 操作系统与Windows...
实例03 通过IP地址获取主机名称...... 673 实例04 修改本机IP地址...... 674 实例05 得到本机MAC地址...... 677 实例06 获得系统打开的端口和状态...... 678 实例07 更改DNS地址...... 680 14.2 远程控制...
综上所述,"利用魔法封包技术写的远程开机程序"是一个利用WOL技术的实用工具,它通过输入远程主机的MAC地址实现远程启动计算机的功能。了解和掌握这一技术,不仅可以提高工作效率,还能增强对网络管理的理解和实践...