获取客户端IP、mac、主机名称

复制代码
public class WebHelper
    {
        [DllImport("Iphlpapi.dll")]
        private static extern int SendARP(int dest, int host, ref long mac, ref int length);
        [DllImport("Ws2_32.dll")]
        private static extern int inet_addr(string ip);

        /// <summary>
        /// 获取客户端IP
        /// </summary>
        /// <returns></returns>
        public static string GetClientIP()
        {
            string result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
            if (string.IsNullOrEmpty(result))
            {
                result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
            }
            if (string.IsNullOrEmpty(result))
            {
                result = HttpContext.Current.Request.UserHostAddress;
            }
            return result;
        }
        /// <summary>
        /// 获取客户端MAC地址
        /// </summary>
        /// <returns></returns>
        public static string GetClientMACAddress()
        {

            string mac_dest = string.Empty;

            try
            {
                string strClientIP = HttpContext.Current.Request.UserHostAddress.Trim();
                int ldest = inet_addr(strClientIP); //目的地的ip 
                inet_addr("");//本地服务器的ip 
                long macinfo = new long();
                int len = 6;
                SendARP(ldest, 0, ref macinfo, ref len);
                string mac_src = macinfo.ToString("X");

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

                    for (int i = 0; i < 11; i++)
                    {
                        if (0 == (i % 2))
                        {
                            mac_dest = i == 10
                                ? mac_dest.Insert(0, mac_src.Substring(i, 2))
                                : "-" + mac_dest.Insert(0, mac_src.Substring(i, 2));
                        }
                    }
                }
            }
            catch
            {
                //igone
            }
            return mac_dest;
        }

        public static string GetClientHostName()
        {
            string result = HttpContext.Current.Request.ServerVariables["SERVER_NAME"];
            if (string.IsNullOrEmpty(result))
            {
                result=HttpContext.Current.Request.UserHostName;
            }
            return result;
        }
        /// <summary>
        /// 判断是否为AJAX请求
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public static bool IsXHR(HttpRequestBase request)
        {
            bool ret = false;
            if (request != null)
            {

                if (request.Headers["X-Requested-With"] != null && request.Headers["X-Requested-With"].Trim().Length > 0)
                {
                    ret = true;
                }
            }
            return ret;
        }

        
    }
复制代码

 

posted @   caolingyi  阅读(204)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示