none
关于获取本机ip地址的问题。 RRS feed

  • 一般討論

  • 通过以下方法获取本机的internet ip地址。

    但是有时成功,有时失败。

    1:web service

    [WebMethod]
            public string GetIp()
            {
                string ip = Context.Request.UserHostAddress;

                return ip;
            }

    2:在客户端引用这个web service

    try
                {
                                    wsService1 = new com.mysite.www.WebService1();
                                    label2.Text = wsService1.GetIp();

                               }
                catch (Exception ex)
                {
                    string sEX = ex.ToString();
                    MessageBox.Show("Please connect internet!");
                }

    有时能成功,有时会返回错误htm标记。不知怎么解决。谢谢。

    • 已變更類型 ChenBruceModerator 2012年4月2日 上午 07:31 發問者無後續追蹤討論
    2012年3月4日 上午 09:49

所有回覆

  • 有試過這個寫法嗎:

    Context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

     
    2012年3月4日 上午 10:13
  • 有試過這個寫法嗎:

    Context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

     

    好的,谢谢。

    我去试。

    2012年3月4日 上午 10:30
  • 有試過這個寫法嗎:

    Context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

     

    把代码改成这样了,还是不行。

    如果电脑上用了vpn软件,就取不到。

    奇怪的是,不论vpn运行不运行,在web site上的asp.net 页面调用这个web service方法,能显示ip.

    代码如下:

    [WebMethod]
            public string GetIp()
            {
                //string ip = Context.Request.UserHostAddress;

                //string ip = Context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

                string ip = "";

                if (Context.Request.ServerVariables["HTTP_VIA"] != null) // 服务器, using proxy
                {
                    //得到真实的客户端地址
                  ip = Context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString(); // Return real client IP.
                }
                else//如果没有使用代理服务器或者得不到客户端的ip not using proxy or can't get the Client IP
                {

                    //得到服务端的地址
                   ip = Context.Request.ServerVariables["REMOTE_ADDR"].ToString(); //While it can't get the Client IP, it will return proxy IP.
                }

               

                return ip;
            }

    2012年3月4日 上午 11:03
  • 或許你可以試試看下面的方法。

    public string GetClientIP()
    {
    	if ((HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] == null) || (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].IndexOf("unknown") > 0))
    	{
    		return HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
    	}
    	if (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].IndexOf(",") > 0)
    	{
    		return HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].Substring(1, HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].IndexOf(",") - 1);
    	}
    	if (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].IndexOf(";") > 0)
    	{
    		return HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].Substring(1, HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].IndexOf(";") - 1);
    	}
    	return HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
    }


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年3月4日 上午 11:10
  • 或許你可以試試看下面的方法。

    public string GetClientIP()
    {
    	if ((HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] == null) || (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].IndexOf("unknown") > 0))
    	{
    		return HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
    	}
    	if (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].IndexOf(",") > 0)
    	{
    		return HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].Substring(1, HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].IndexOf(",") - 1);
    	}
    	if (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].IndexOf(";") > 0)
    	{
    		return HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].Substring(1, HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].IndexOf(";") - 1);
    	}
    	return HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
    }


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    好的,我去试一试。

    谢谢。

    2012年3月6日 上午 07:24