获取MAC地址的几种方式

.NET 后台中

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Runtime.InteropServices;
namespace WebApplication3
{
    public partial class a1 : System.Web.UI.Page
    {
        [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);
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write(GetClientMAC());
            Response.Write("<br>");
            Response.Write(gett());
            return;
        }
        ///<summary>
        ///得到客户端ip
        ///</summary>
        ///<returns>ip</returns>
        private static string GetClientIP()
        {
            string result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
            if (null == result || result == String.Empty)
            {
                result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
            }
            if (null == result || result == String.Empty)
            {
                result = HttpContext.Current.Request.UserHostAddress;
            }
            return result;
        }

        ///<summary>
        /// 利用客户端ip得到客户端mac
        ///</summary>
        ///<param name="remoteip">客户端ip</param>
        ///<returns>int16类型的mac</returns>
        static private Int64 getremotemac(string remoteip)
        {
            Int32 ldest = inet_addr(remoteip);
            try
            {
                Int64 macinfo = new Int64();
                Int32 len = 6;
                int res = SendARP(ldest, 0, ref   macinfo, ref   len);
                return macinfo;
            }
            catch (Exception err)
            {
                throw err;
            }
            return 0;
        }

        ///<summary>
        /// int64类型的mac转换成正确的客户端mac
        ///</summary>
        ///<returns>mac</returns>
        public static string GetClientMAC()
        {
            Int64 macid = getremotemac(GetClientIP());
            if (macid == 0)
                return "0";
            string beforeMacAddr = Convert.ToString(macid, 16);
            string endMacAddr = "";
            string[] macArray = new string[6];
            for (int i = 0; i < 6; i++)
            {
                macArray[i] = beforeMacAddr.Substring(i * 2, 2);
            }
            for (int i = 0; i < 6; i++)
            {
                endMacAddr += macArray[5 - i] + "-";
            }
            endMacAddr = endMacAddr.Substring(0, endMacAddr.Length - 1);
            endMacAddr = endMacAddr.ToUpper();
            return endMacAddr;
        }
        public static string gett()
        {
            string userip = HttpContext.Current.Request.UserHostAddress;
            string strClientIP = HttpContext.Current.Request.UserHostAddress.ToString().Trim();
            Int32 ldest = inet_addr(strClientIP); //目的地的ip
            Int32 lhost = inet_addr("");   //本地服务器的ip
            Int64 macinfo = new Int64();
            Int32 len = 6;
            int res = SendARP(ldest, 0, ref macinfo, ref len);
            string mac_src = macinfo.ToString("X");
            if (mac_src == "0")
            {
                if (userip == "127.0.0.1")
                    return "正在访问Localhost!";
                else
                    return "欢迎来自IP为" + userip + "的朋友!" + "<br>";
            }

            while (mac_src.Length < 12)
            {
                mac_src = mac_src.Insert(0, "0");
            }

            string mac_dest = "";

            for (int i = 0; i < 11; i++)
            {
                if (0 == (i % 2))
                {
                    if (i == 10)
                    {
                        mac_dest = mac_dest.Insert(0, mac_src.Substring(i, 2));
                    }
                    else
                    {
                        mac_dest = "-" + mac_dest.Insert(0, mac_src.Substring(i, 2));
                    }
                }
            }

            return "欢迎来自IP为" + userip + "<br>" + ",MAC地址为" + mac_dest + "的朋友!" + "<br>";
        }

    }
}

JS 中(限IE安装插件之后):

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="a1.aspx.cs" Inherits="WebApplication3.a1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
<div style="display:none">
        <OBJECT id=locator classid=CLSID:76A64158-CB41-11D1-8B02-00600806D9B6 VIEWASTEXT></OBJECT>
<OBJECT id=foo classid=CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223></OBJECT>
        </div>
    <form id="formfoo" name="formfoo"  runat="server">
    <div>
<br/>MAC地址:<input type="text" name="macAddress">*仅IE浏览器下 显示,如果不显示 IE浏览器需要做设置允许未标记的activex
<br/>IP地址:<input type="text" name="ipAddress">
<br/>主机名:<input type="text" name="hostName">
    </div>

<script language="javascript">
var sMacAddr="";
var sIPAddr="";
var sDNSName="";
var service = locator.ConnectServer();
service.Security_.ImpersonationLevel=3;
service.InstancesOfAsync(foo, ‘Win32_NetworkAdapterConfiguration‘);
</script>
<script FOR="foo" EVENT="OnObjectReady(objObject,objAsyncContext)" LANGUAGE="JScript">
         if(objObject.IPEnabled != null && objObject.IPEnabled != "undefined" && objObject.IPEnabled == true){
                           if(objObject.IPEnabled && objObject.IPAddress(0) !=null && objObject.IPAddress(0) != "undefined")
                                         sIPAddr = objObject.IPAddress(0);
                           if(objObject.MACAddress != null &&objObject.MACAddress != "undefined")
                     sMacAddr = objObject.MACAddress;
                           if(objObject.DNSHostName != null &&objObject.DNSHostName != "undefined")
                                         sDNSName = objObject.DNSHostName;
          }
</script>

<script FOR="foo" EVENT="OnCompleted(hResult,pErrorObject, pAsyncContext)" LANGUAGE="JScript">
formfoo.macAddress.value=sMacAddr;
formfoo.ipAddress.value=sIPAddr;
formfoo.hostName.value=sDNSName;
</script>
    </form>
</body>
</html>
时间: 2024-10-13 12:10:51

获取MAC地址的几种方式的相关文章

C#获取MAC地址的几种方法

首先需要用到的一些方法和类: public enum NCBCONST { NCBNAMSZ = 16, MAX_LANA = 254, NCBENUM = 0x37, NRC_GOODRET = 0x00, NCBRESET = 0x32, NCBASTAT = 0x33, NUM_NAMEBUF = 30, } [StructLayout(LayoutKind.Sequential)] public struct ADAPTER_STATUS { [MarshalAs(UnmanagedTy

Python windows下获取MAC地址的一种方法

我最近有一个项目,使用Python在win32下开发一个COM组建,该COM组建其中一个方法是获取本地电脑的MAC地址. 需求很简单,虽然我是Python新手中的新手,但我还是会使用搜索引擎进行搜索. 百度一下,发现大部分都介绍使用import UUID获取MAC地址,或使用os.popen("ipconfig /all")的方式获取.而后者容易受到操作系统中英文环境影响. 如这篇文章:http://www.cnblogs.com/Jerryshome/archive/2011/11/

【转载】获取MAC地址方法大全

From:http://blog.csdn.net/han2814675/article/details/6223617 Windows平台下用C++代码取得机器的MAC地址并不是一件简单直接的事情.到目前为止,作者尚未发现有任何一个通用的100%的适用于所有Windows平台的方法可以稳定的取得MAC地址.而有些应用(比如MMORPG)则需要稳定的得到机器的MAC地址,解决方案往往是通过多种方法依次使用来提高成功率. 说明: 以下方法只会返回多网卡的第一个MAC地址. 网上有很多文章和源码来解

android获取Mac地址和IP地址

获取Mac地址实际项目中测试了如下几种方法:(1)设备开通Wifi连接,获取到网卡的MAC地址(但是不开通wifi,这种方法获取不到Mac地址,这种方法也是网络上使用的最多的方法) //根据Wifi信息获取本地Mac public static String getLocalMacAddressFromWifiInfo(Context context){ WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_

iOS 蓝牙获取MAC地址

援引:http://www.jianshu.com/p/1d6a8fc8134f iOS要获取蓝牙设备的MAC地址有两种:一是硬件工程师开通的服务特征下有MAC的信息,我们就从通道中获取:二是硬件工程师在扫描中设备信息中放置MAC信息,我们从有RSSI的函数中获取 1.形如你所在其他网站上看到的在某写板子模块上的服务如:"A180"的,其下均有获取到MAC的特征.此处我们略过,因为其他地方说的很清楚了,援引处也有.需要硬件配和加入服务特征. 2.就是在有RSSI的函数中获取. 首先先让

获取web路径的几种方式

1.string str1 = Request.ApplicationPath.ToString();           返回路径为:\HolterClientWeb 2.HttpServerUtility.MapPath 方法 解释:返回对应于 Web 服务器上指定的虚拟路径的物理文件路径. string path=Server.MapPath(Request.ApplicationPath + "/UpLoad/ReportFile"); 调试后: string str3= Se

android 获取MAC地址

由于WiFi 的Mac address 是一个被动咨询.一般在开机后,不会主动上到的系统里.要等待WiFi硬件启动后,才会把有关Mac address资料记载入系统去. 所以一般android系统获取Mac address时候会出现以下几种情况: 1.在WiFi打开的时候可以获取到Mac地址 2.关闭WiFi,不重启系统,也可以获取到Mac address 3.系统重启后,不打开WiFi,获取不到Mac address 4.系统重启后,不开开WiFi,打开2G.3G网络,获取不到Mac addr

【转载】取得系统中网卡MAC地址的三种方法

From:http://blog.csdn.net/zhangting1987/article/details/2732135 网卡地址这个概念有点混淆不清.因为实际上有两个地址,mac地址和物理地址,一般说网卡地址我是指物理地址,不知道别人怎么看?物理地址指的是网卡上的存放地址的ROM里的地址,mac地址是这块卡工作的时候用的地址,一般情况下这两个地址是一样的,所以很多人都混用了,甚至不知道有区别  -_-# 网卡工作的时候,一个以太网帧60到1514(不包括crc),帧的crc是网卡自动加的

C# 获取mac地址 本机或者 远程的

/// 获取本机网卡mac地址代码 /// </summary> /// <returns></returns> /// /// <summary> public string GetNetworkAdpaterID() { try { string mac = ""; System.Management.ManagementClass mc = new System.Management.ManagementClass("Wi