none
asp.net c# 怎样获取本机真实地址 RRS feed

  • 问题

  • asp.net c# 怎样获取本机真实地址? 不是类似192.168.。。这样的局域网ip,而是要获得internet ip!!!

    啥都不懂

    2012年4月9日 9:01

答案

  • 這樣簡單的訪問用WebClient會比較方便:

                WebClient wc = new WebClient();
                string result = wc.DownloadString("http://api.hostip.info/get_html.php");
                string IP = result.Substring(result.IndexOf("IP: ") + 4).Trim();
                Console.WriteLine(IP);

    2012年4月10日 3:38
  • 這樣簡單的訪問用WebClient會比較方便:

                WebClient wc = new WebClient();
                string result = wc.DownloadString("http://api.hostip.info/get_html.php");
                string IP = result.Substring(result.IndexOf("IP: ") + 4).Trim();
                Console.WriteLine(IP);

    补充:

    IndexOf:获取“IP”这个字符串的起始位置。

    +4:表示从IP的“I”这个字符往后算4个字符(即除去P、冒号和空格)。

    SubString:获取一个字符串中部分字符串(因为你result是获取包含国家什么的整个字符串,我现在自然就得到了其中一部分IP,所以要substring)。

    现在给出获取国家等信息完整代码:

    namespace MyTest
    {
        public class Program
        {
            static void Main(string[] args)
            {
                //声明固定的内容,方便输出
               string[] NAMINGS = new string[]{ "国家","城市","IP"};
                //定义变量,循环用
               int i = 0;
    
                WebClient wc = new WebClient();
                string result = wc.DownloadString("http://api.hostip.info/get_html.php");
                
                //先根据回车换行进行分裂字符串,共4行
                string[] values = result.Split(new string[]{"\n"},StringSplitOptions.RemoveEmptyEntries);
    
                //输出国家、城市和真实IP
                foreach (var item in values)
                {
                    Console.WriteLine(NAMINGS[i++]);
                    Console.WriteLine(item.Split(new string[]{": "},StringSplitOptions.RemoveEmptyEntries)[1]);
                }
                
            }
        }
    }


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年4月10日 5:18

全部回复

  • 你只要用HttpWebRequest連到你在外網設置的網頁, 那網頁的內容就簡單的回傳Http Header的REMOTE_ADDRESS參數就可以了.

    不想自己寫的話也可以用別人寫的. 這網站也提供JSONP版本供AJAX代碼呼叫.

    2012年4月10日 3:02
  • Country: (Unknown Country?) (XX) City: (Unknown City?) IP: 182.87.246.71

    谢谢。本人比较小白。 只取IP咋弄?


    啥都不懂

    2012年4月10日 3:08
  • 這樣簡單的訪問用WebClient會比較方便:

                WebClient wc = new WebClient();
                string result = wc.DownloadString("http://api.hostip.info/get_html.php");
                string IP = result.Substring(result.IndexOf("IP: ") + 4).Trim();
                Console.WriteLine(IP);

    2012年4月10日 3:38
  • 恩。太谢谢了。。不过,string IP = result.Substring(result.IndexOf("IP: ") + 4).Trim();
    这句话,看不懂。。麻烦解释下,为什么是4.。。substring啥的也没用过。。。新人。


    啥都不懂

    2012年4月10日 3:44
  • 這樣簡單的訪問用WebClient會比較方便:

                WebClient wc = new WebClient();
                string result = wc.DownloadString("http://api.hostip.info/get_html.php");
                string IP = result.Substring(result.IndexOf("IP: ") + 4).Trim();
                Console.WriteLine(IP);

    补充:

    IndexOf:获取“IP”这个字符串的起始位置。

    +4:表示从IP的“I”这个字符往后算4个字符(即除去P、冒号和空格)。

    SubString:获取一个字符串中部分字符串(因为你result是获取包含国家什么的整个字符串,我现在自然就得到了其中一部分IP,所以要substring)。

    现在给出获取国家等信息完整代码:

    namespace MyTest
    {
        public class Program
        {
            static void Main(string[] args)
            {
                //声明固定的内容,方便输出
               string[] NAMINGS = new string[]{ "国家","城市","IP"};
                //定义变量,循环用
               int i = 0;
    
                WebClient wc = new WebClient();
                string result = wc.DownloadString("http://api.hostip.info/get_html.php");
                
                //先根据回车换行进行分裂字符串,共4行
                string[] values = result.Split(new string[]{"\n"},StringSplitOptions.RemoveEmptyEntries);
    
                //输出国家、城市和真实IP
                foreach (var item in values)
                {
                    Console.WriteLine(NAMINGS[i++]);
                    Console.WriteLine(item.Split(new string[]{": "},StringSplitOptions.RemoveEmptyEntries)[1]);
                }
                
            }
        }
    }


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年4月10日 5:18
  • String.IndexOf()會回傳需要尋找的目標在本字串內第一個字符的位置. String.SubString()當只有一個參數的時候, 會回傳指定位置以後的所有字元. +4是因為需要獲得的字串在"I"的後4個位置開始.

    String.Trim()會移除本字串的開首/結尾位置的所有空白字元(包括space, carrage return, newline等). 我會使用這方法主要是為了移除後面的'\n'字元. 當然, 你也可以用  result.Substring(0, result.length-1).Substring(result.IndexOf("IP: " + 4); 代替.



    2012年4月10日 5:20