当前位置:编程学习 > C#/ASP.NET >>

不用JS,如何获取客户端IP和计算机名?

--------------------编程问答--------------------
/// <summary>
        /// 获得客户端IP
        /// </summary>
        public static string ClientIP
        {
            get
            {
                string ip;
                string[] temp;
                bool isErr = false;
                if (HttpContext.Current.Request.ServerVariables["HTTP_X_ForWARDED_For"] == null)
                    ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString();
                else
                    ip = HttpContext.Current.Request.ServerVariables["HTTP_X_ForWARDED_For"].ToString();
                if (ip.Length > 15)
                    isErr = true;
                else
                {
                    temp = ip.Split('.');
                    if (temp.Length == 4)
                    {
                        for (int i = 0; i < temp.Length; i++)
                        {
                            if (temp[i].Length > 3) isErr = true;
                        }
                    }
                    else
                        isErr = true;
                }

                if (isErr)
                    return "1.1.1.1";
                else
                    return ip;
            }
        }
--------------------编程问答-------------------- asp.net 在局域网内获得ip比较容易,计算机名就不好获得了。

但如果用ARP广播的方式,mac地址也是可以取到的。 --------------------编程问答--------------------
引用 2 楼 fangxinggood 的回复:
asp.net 在局域网内获得ip比较容易,计算机名就不好获得了。

但如果用ARP广播的方式,mac地址也是可以取到的。


同意 --------------------编程问答-------------------- 二楼的朋友。按你的方法,同一局域网内2台机子得出的IP是一样的。 --------------------编程问答-------------------- 还有一个问题。我的外网在IP138下是218.20.201.1XX,但用二楼的方法查出的是172.25.19.2XX,而且每台都是这个。但我每台机子分配的IP都是192.168.0.1XX这样的。为什么呢? --------------------编程问答-------------------- 求教。自己UP ,在线等。。。 --------------------编程问答--------------------
引用 5 楼 jacksonhf 的回复:
还有一个问题。我的外网在IP138下是218.20.201.1XX,但用二楼的方法查出的是172.25.19.2XX,而且每台都是这个。但我每台机子分配的IP都是192.168.0.1XX这样的。为什么呢?


代理 --------------------编程问答-------------------- 代码贴出:
/// <summary>
    ///判断是否是IP格式 
    ///判断是否是IP地址格式 0.0.0.0 
    /// </summary>
    public bool IsIPAddress(string str1)
    {
        if (str1 == null || str1 == string.Empty || str1.Length < 7 || str1.Length > 15) return false;
        string regformat = @"^\d{1,3}[\.]\d{1,3}[\.]\d{1,3}[\.]\d{1,3}$";
        Regex regex = new Regex(regformat, RegexOptions.IgnoreCase);
        return regex.IsMatch(str1);
    }


    /// <summary>     
    /// 取得客户端真实IP。如果有代理则取第一个非内网地址     
    /// </summary>     
    public static string IPAddress
    {
        get
        {
            string result = String.Empty;
            result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
            if (result != null && result != String.Empty)
            {
                //可能有代理     
                if (result.IndexOf(".") == -1)    //没有"."肯定是非IPv4格式     
                    result = null;
                else
                {
                    if (result.IndexOf(",") != -1) //有",",估计多个代理。取第一个不是内网的IP。
                    {
                        result = result.Replace(" ", "").Replace("\"", "");
                        string[] temparyip = result.Split(",;".ToCharArray());
                        for (int i = 0; i < temparyip.Length; i++)
                        {
                            if (IsIPAddress(temparyip[i]) && temparyip[i].Substring(0, 3) != "10." && temparyip[i].Substring(0, 7) != "192.168" && temparyip[i].Substring(0, 7) != "172.16.")
                            {
                                return temparyip[i];    //找到不是内网的地址     
                            }
                        }
                    }
                    else if (IsIPAddress(result)) //代理即是IP格式     
                        return result;
                    else
                        result = null;    //代理中的内容 非IP,取IP     
                }
            }
            string IpAddress = (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null && HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != String.Empty) ? HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] : HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
            if (null == result || result == String.Empty)
                result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
            if (result == null || result == String.Empty)
                result = HttpContext.Current.Request.UserHostAddress;
            return result;
        }
    }



代理好像已经处理了。如何获得入192.168.X.XXX这样的IP?最好同时获得公网IP。 --------------------编程问答--------------------
都回家过年了吗?没人了。。。。 --------------------编程问答-------------------- [img=http://t3.gstatic.com/images?q=tbn:ANd9GcSkAAL890RSqG_IcDyKYSgccWrutGLArUCLHaf4MJseGsHw2-Z2wG2-xV0][/img]

没有。 --------------------编程问答-------------------- [img=http://t3.gstatic.com/images?q=tbn:ANd9GcSkAAL890RSqG_IcDyKYSgccWrutGLArUCLHaf4MJseGsHw2-Z2wG2-xV0][/img]

什么,csdn这样了?
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,