手机
当前位置:查字典教程网 >编程开发 >C#教程 >获取wince mac地址与IP地址解决方案
获取wince mac地址与IP地址解决方案
摘要:本人所使用的开发环境是VS2008,开发的系统所在移动终端版本为windowsmobile5.0。由于需要进行身份的验证,需要获取移动终端的...

本人所使用的开发环境是VS2008,开发的系统所在移动终端版本为windows mobile 5.0。由于需要进行身份的验证,需要获取移动终端的MAC地址,于是在网上进行搜索,主要看到了三种方法来实现获取MAC地址,现记录如下。

第一种方法:使用ManagementClass 来获取。

殊不知,WinCE下并没有System.Management,这种方法根本行不通。

第二种方法:通过查找注册表来获取MAC地址。

这是获取注册表地址的代码:

复制代码 代码如下:

txtMAC1.Text = reg.ReadValue(YFReg.HKEY.HKEY_LOCAL_MACHINE, @"CommDM9CE1Parms", "SoftwareMacAddress0");

其他的代码我这里就不列出来了,用这种方法我并没有获取到MAC地址。于是在网上下载了一个注册表查看工具,在移动终端中找,找遍了,发现并没有CommDM9CE1Parms路径,再找其他的路径,都没找到有SoftwareMacAddress节点的。好吧,可能这种方法能获取MAC地址,但是我这个版本的不行。

第三种方法:通过SendARP获取MAC地址。

代码如下:

复制代码 代码如下:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Collections;

using System.Diagnostics;

using System.Runtime.InteropServices;

using System.IO;

using System.Security.Cryptography;

using System.Net;

namespace WirelessRouteSystem

{

class SysInfo

{

private static string[] strEncrypt = new string[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "AA", "AB", "AC", "AD", "AE", "AF", "AG", "AH", "AI", "AJ", "AK", "AL", "AM", "AN", "AO", "AP" };

private static Int32 METHOD_BUFFERED = 0;

private static Int32 FILE_ANY_ACCESS = 0;

private static Int32 FILE_DEVICE_HAL = 0x00000101;

private const Int32 ERROR_NOT_SUPPORTED = 0x32;

private const Int32 ERROR_INSUFFICIENT_BUFFER = 0x7A;

private static Int32 IOCTL_HAL_GET_DEVICEID = ((FILE_DEVICE_HAL) << 16) | ((FILE_ANY_ACCESS) << 14) | ((21) << 2) | (METHOD_BUFFERED);

[DllImport("coredll.dll", SetLastError = true)]

private static extern bool KernelIoControl(Int32 dwIoControlCode, IntPtr lpInBuf, Int32 nInBufSize, byte[] lpOutBuf, Int32 nOutBufSize, ref Int32 lpBytesReturned);

[DllImport("Iphlpapi.dll", EntryPoint = "SendARP")]

public static extern uint SendARP(uint DestIP, uint SrcIP, byte[] pMacAddr, ref uint PhyAddrLen);

/// <summary>

/// 获取MAC地址

/// </summary>

/// <returns></returns>

public string GetMac()

{

uint ip = 0;

string mac = string.Empty;

//取本机IP列表

IPAddress[] ips = Dns.GetHostEntry(Dns.GetHostName()).AddressList;

//取本机IP

byte[] ipp = ips[1].GetAddressBytes();

ip = (uint)((ipp[0]) | (ipp[1] << 8) | (ipp[2] << 16) | (ipp[3] << 24));

//取MAC

byte[] MacAddr = new byte[6];

uint PhyAddrLen = 6;

uint hr = SendARP(ip, 0, MacAddr, ref PhyAddrLen);

if (MacAddr[0] != 0 || MacAddr[1] != 0 || MacAddr[2] != 0 || MacAddr[3] != 0 || MacAddr[4] != 0 || MacAddr[5] != 0)

{

mac = MacAddr[0].ToString("X2") + ":" + MacAddr[1].ToString("X2") + ":" + MacAddr[2].ToString("X2") + ":" + MacAddr[3].ToString("X2") + ":" + MacAddr[4].ToString("X2") + ":" + MacAddr[5].ToString("X2");

}

return mac;

}

/// <summary>

///获取本机IP

/// </summary>

/// <returns></returns>

public string GetIpAddress()

{

string strHostName = Dns.GetHostName(); //得到本机的主机名

IPHostEntry ipEntry = Dns.GetHostByName(strHostName); //取得本机IP

string strAddr = ipEntry.AddressList[1].ToString();

return strAddr;

}

}

}

通过 IP Helper API 中的 SendARP 发送 ARP 请求可以用来获取指定IP地址的MAC 地址,简单方便,缺点是不能跨越网关。

至于获取IP地址,本文已经给出了两种方法,都是通过NET下DNS类中方法获取。

【获取wince mac地址与IP地址解决方案】相关文章:

使用C#获取系统特殊文件夹路径的解决方法

C#中Web.Config加密与解密的方法

解析StreamReader与文件乱码问题的解决方法

C# 格式化字符首字母大写的方法

基于反射解决类复制的实现方法

用C#编写获取远程IP,MAC的方法

深入C# winform清除由GDI绘制出来的所有线条或图形的解决方法

.net后台获取html控件值的2种方法

c# 获取数据库中所有表名称的方法

c#获取本机的IP地址的代码

精品推荐
分类导航