zoukankan      html  css  js  c++  java
  • asp.net获取客户端IP,Mac

        public class GetClientInfo
        {
            [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);
    
            #region 取IP
            /// <summary>
            /// 
            /// </summary>
            public static string GetClientIP()
            {
                string getip;
                if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null) // using proxy
                {
                    getip = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();  // Return real client IP.
                }
                else// not using proxy or can't get the Client IP
                {
                    getip = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString(); //While it can't get the Client IP, it will return proxy IP.
                }
                return getip;
            }
            #endregion
    
            public static string GetClientMacAddress()
            {
                try
                {
                    string strClientIP = System.Web.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 (strClientIP == "127.0.0.1")
                            return GetServerMacAddress();
                        else
                            return null;
                    }
    
                    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 mac_dest;
                }
                catch
                {
                    return null;
                }
            }
    
            public static string GetServerMacAddress()
            {
                ManagementClass mAdapter = new ManagementClass("Win32_NetworkAdapterConfiguration");
                ManagementObjectCollection mo = mAdapter.GetInstances();
                foreach (ManagementBaseObject m in mo)
                {
                    if ((bool)m["IpEnabled"] == true)
                    {
                        return m["MacAddress"].ToString();
                    }
                }
                mo.Dispose();
                return null;
    
    
            }
    

      

  • 相关阅读:
    java两个栈实现一个队列&&两个队列实现一个栈
    Java HashSet和ArrayList的查找Contains()时间复杂度
    Java KMP算法代码
    利用集合求取字符串里每个字符的个数
    快速失败and安全失败
    Java 巴什博弈(取石子报数问题)
    [知识点][施工中] 1.1 部分IDE介绍
    [知识点] 4.4 动态规划进阶模型——树形/DAG/数位DP
    [知识点] 4.3 动态规划基础模型——区间DP/LIS/LCS
    [课堂小笔记] 数字电子技术
  • 原文地址:https://www.cnblogs.com/anbylau2130/p/3158538.html
Copyright © 2011-2022 走看看