Как определить статический IP с помощью приложения Win в C # - PullRequest
1 голос
/ 04 февраля 2011

Пожалуйста, поправьте меня, если я ошибаюсь. Есть два типа IP - Один из них - статический (фиксированный) IP-адрес, который мы назначаем для сетевой карты, а второй - от поставщика услуг.

Например IP-адрес, установленный для моей машины, - 192.168.1.10, а IP-адрес, предоставленный провайдером, - 218.64.xx.xx. (Вы можете проверить это, используя http://www.ip2location.com/)

Когда я использую ASP.net, я могу получить IP-адрес, предоставленный провайдером, используя - HttpContext.Current.Request.UserHostAddress;

Проблема: Сейчас я работаю в среде Windows Forms, но не могу получить IP-адрес, предоставленный интернет-провайдером, хотя могу получить фиксированный IP-адрес.

Кто-нибудь может мне помочь?

Спасибо, что поделились своим временем.

Ответы [ 5 ]

8 голосов
/ 04 февраля 2011

Вы пытаетесь получить внешний IP-адрес вашего маршрутизатора.

Вам необходимо отправить HTTP-запрос сторонней службе, которая ответит IP-адресом.Вы можете сделать это, используя WebClient класс.

Например:

///<summary>Gets the computer's external IP address from the internet.</summary>
static IPAddress GetExternalAddress() {
    //<html><head><title>Current IP Check</title></head><body>Current IP Address: 129.98.193.226</body></html>
    var html = new WebClient().DownloadString("http://checkip.dyndns.com/");

    var ipStart = html.IndexOf(": ", StringComparison.OrdinalIgnoreCase) + 2;
    return IPAddress.Parse(html.Substring(ipStart, html.IndexOf("</", ipStart, StringComparison.OrdinalIgnoreCase) - ipStart));
}
2 голосов
/ 04 февраля 2011

Терминология неверна;ваша машина имеет приватный IP и публичный IP (не "статический" и "динамический").

Чтобы получить публичный IP, вам нужно отскочитьобщедоступный сервер, например whatismyip.org или ваш собственный сервер.

1 голос
/ 04 февраля 2011

я нашел методы manu, одним из которых является запрос html к http://whatismyip.com

public static IPAddress GetExternalIp()
            {
                string whatIsMyIp = "http://whatismyip.com";
                string getIpRegex = @"(?<=<TITLE>.*)\d*\.\d*\.\d*\.\d*(?=</TITLE>)";
                WebClient wc = new WebClient();
                UTF8Encoding utf8 = new UTF8Encoding();
                string requestHtml = "";
                try
                {
                    requestHtml = utf8.GetString(wc.DownloadData(whatIsMyIp));
                }
                catch (WebException we)
                {
                    // do something with exception
                    Console.Write(we.ToString());
                }
                Regex r = new Regex(getIpRegex);
                Match m = r.Match(requestHtml);
                IPAddress externalIp = null;
                if (m.Success)
                {
                    externalIp = IPAddress.Parse(m.Value);
                }
                return externalIp;
            }

или используйте

IPHostEntry IPHost = Dns.GetHostEntry(Dns.GetHostName());
Console.Write(IPHost.AddressList[0].ToString());
0 голосов
/ 04 февраля 2011

попробуйте с этим (используя System.Net):

IPHostEntry he = Dns.GetHostByName(Dns.GetHostName());
var s = he.AddressList[0].ToString(); // returns IP address
0 голосов
/ 04 февраля 2011

вы можете попробовать это в пространстве имен System.Net:

Dns.GetHostAddresses(Dns.GetHostName())
...