获取wince mac地址与IP地址解决方案

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

第一种方法:使用ManagementClass 来获取。
殊不知,WinCE下并没有System.Management,这种方法根本行不通。

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


代码如下:

txtMAC1.Text = reg.ReadValue(YFReg.HKEY.HKEY_LOCAL_MACHINE, @"Comm\DM9CE1\Parms", "SoftwareMacAddress0");

其他的代码我这里就不列出来了,用这种方法我并没有获取到MAC地址。于是在网上下载了一个注册表查看工具,在移动终端中找,找遍了,发现并没有Comm\DM9CE1\Parms路径,再找其他的路径,都没找到有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类中方法获取。

(0)

相关推荐

  • asp.net根据计算机MAC地址限定每台机子只能领取一次账号

    下面开始吧: 首先写一个简单的前台代码: 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "

  • 获取同一网段下所有机器MAC地址的shell脚本

    复制代码 代码如下: #!/bin/bash for ((i = 1; i < 254; i++)) do arping -I eth0 192.168.0.$i -c 1 done arp -a > /tmp/mactable.txt 那个/tmp/mactable.txt文件即同一网段下所有机器IP/MAC对应地址

  • java通过ip获取客户端Mac地址的小例子

    复制代码 代码如下: package com.yswc.dao.sign; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.regex.Matcher; import java.util.regex.Pattern; /** *  * 获取MAC地址 *  * @author *  * 2011-12 *  */ public class GetMacAddress { publi

  • 获取客户端网卡MAC地址和IP地址实现JS代码

    在做B/S结构的系统时,我们常常需要获取客户端的一些信息,如IP和MAC,以结合身份验证.要获取服务器端的MAC很容易,但是要获取客户端的MAC的地址确要花费一翻心思,通常的做法是调用Win32API或直接调用nbtstat命令,这样做有很多问题,而另一种方法就是直接用客户端脚本,我们这里用Javascript,这样做的好处是不需要服务器端进行处理,有客户端自行获取,传递到服务器端,且速度和可靠性都比在服务器端获取好. 具体实现的html和javascript如下: 复制代码 代码如下: <HT

  • js mac地址 正则表达式

    复制代码 代码如下: function CheckForm2() { //mac地址正则表达式 var reg_name=/[A-F\d]{2}:[A-F\d]{2}:[A-F\d]{2}:[A-F\d]{2}:[A-F\d]{2}:[A-F\d]{2}/; if(!reg_name.test(document.form2.mac.value)){ alert("mac地址格式不正确!mac地址格式为00:24:21:19:BD:E4"); document.form2.mac.foc

  • PHP获取MAC地址的函数代码

    复制代码 代码如下: <?php /** 获取网卡的MAC地址原码:目前支持WIN/LINUX系统 获取机器网卡的物理(MAC)地址 **/ class GetMacAddr{ var $return_array = array(); // 返回带有MAC地址的字串数组 var $mac_addr; function GetMacAddr($os_type){ switch ( strtolower($os_type) ){ case "linux": $this->for

  • python获取本机mac地址和ip地址的方法

    本文实例讲述了python获取本机mac地址和ip地址的方法.分享给大家供大家参考.具体如下: import sys, socket def getipaddrs(hostname): result = socket.getaddrinfo(hostname,None,0,socket.SOCK_STREAM) return [x[4][0] for x in result] # the name of the local machine hostname = socket.gethostnam

  • MAC地址与IP地址绑定策略的破解

    一引言 对"IP地址盗用"的解决方案绝大多数都是采取MAC与IP地址绑定策略,这种做法是十分危险的,本文将就这个问题进行探讨.在这里需要声明的是,本文是处于对对MAC与IP地址绑定策略安全的忧虑,不带有任何黑客性质. 1.1 为什么要绑定MAC与IP 地址 影响网络安全的因素很多,IP地址盗用或地址欺骗就是其中一个常见且危害极大的因素.现实中,许多网络应用是基于IP的,比如流量统计.账号控制等都将IP地址作为标志用户的一个重要的参数.如果有人盗用了合法地址并伪装成合法用户,网络上传输的

  • asp.net 获取客户端浏览器访问的IP地址的实例代码

    本文介绍了asp.net 获取客户端浏览器访问的IP地址的实例代码,分享给大家,自己也留个笔记 1.js方法 <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>Document</title> <script src="http://pv.sohu.com/cityjson?ie=utf-8"></scr

  • C#实现生成mac地址与IP地址注册码的两种方法

    本文实例讲述了C#实现生成mac地址与IP地址注册码的两种方法,分享给大家供大家参考之用.具体方法如下: 方法一: using System; using System.Management; using System.Security.Cryptography; using System.IO; using System.Collections.Generic; using System.Text; namespace xingming_reg { class Program { static

  • 捆绑MAC地址和IP地址实例

    在网络管理中,IP地址盗用现象经常发生,不仅对网络的正常使用造成影响,同时由于被盗用的地址往往具有较高的权限,因而也对用户造成了大量的经济上的损失和潜在的安全隐患.有没有什么措施能最大限度地避免此类现象的发生呢?为了防止IP地址被盗用,可以在代理服务器端分配IP地址时,把IP地址与网卡地址进行捆绑. 对于动态分配IP,做一个DHCP服务器来绑定用户网卡MAC地址和IP地址,然后再根据不同IP设定权限.对于静态IP,如果用三层交换机的话,你可以在交换机的每个端口上做IP地址的限定,如果有人改了自己

  • 详解如何获取docker容器(container)的ip地址

    1. 进入容器内部后 cat /etc/hosts 会显示自己以及(– link)软连接的容器IP 2.使用命令 docker inspect --format '{{ .NetworkSettings.IPAddress }}' <container-ID> 或 docker inspect <container id> 或 docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' c

  • Java实现获取内网的所有IP地址

    目录 题目描述 代码详解 效果展示 题目描述 在进行网络编程时,有时需要对局域网的所有主机进行遍历,为此需要获得内网的所以IP地址 题目实现:获得内网的所有IP地址的小应用. 解题思路 创建一个类:GainAlllpFrame,继承JFrame窗体类 定义一个gainAlllp()方法:用于获得所有IP,并显示在文本域中的方法 定义一个内部类Pinglp Thread,且是线程类.用于判断给定IP是否为内网IP的线程对象 线程类的执行逻辑是对指定的IP进行ping 访问 获得本机的IP地址和网段

  • 获取wince mac地址与IP地址解决方案

    本人所使用的开发环境是VS2008,开发的系统所在移动终端版本为windows mobile 5.0.由于需要进行身份的验证,需要获取移动终端的MAC地址,于是在网上进行搜索,主要看到了三种方法来实现获取MAC地址,现记录如下. 第一种方法:使用ManagementClass 来获取. 殊不知,WinCE下并没有System.Management,这种方法根本行不通. 第二种方法:通过查找注册表来获取MAC地址. 这是获取注册表地址的代码: 复制代码 代码如下: txtMAC1.Text = r

  • Android获得设备状态信息、Mac地址、IP地址的方法

    前言 在APP开发时,经常会遇到要获取手机状态信息的场景,像升级时获取版本号,像发生异常时要收集手机信息等等.有些软件还要根据Mac地址来判定当前用户以前是否登录过.下面将一一介绍获取这些手机状态信息的方法. 1 通过build获取手机硬件信息 运用反射获取Build信息,然后从build中得到对应字段的值.这种情况适用于获取所有的build信息. 或者直接调用Build类直接拿里面的字段名,如:android.os.Build.MODEL; // 手机型号 .这是为了获取单独某个手机信息的方法

  • c#获取本机在局域网ip地址的二种方法

    复制代码 代码如下: /// <summary>/// 获取本机在局域网的IP地址/// </summary>/// <returns></returns>private string GetLocalIPAddress(){    System.Net.IPAddress[] addressList = Dns.GetHostEntry(Dns.GetHostName()).AddressList;    string strNativeIP = &quo

随机推荐