Попытка получить общедоступный c IP от C# - PullRequest
0 голосов
/ 23 февраля 2020

Я пытаюсь получить общедоступный c IP-адрес пользователя, но я получаю эту ошибку:

    System.Net.IPAddress.InternalParse(string, bool)
    System.Net.IPAddress.Parse(string)
    Test.Form1.GetPublicIp(string) in Form1.cs
    Test.Form1.button2_Click(object, System.EventArgs) in Form1.cs
    System.Windows.Forms.Control.OnClick(System.EventArgs)
    System.Windows.Forms.Button.OnClick(System.EventArgs)
    System.Windows.Forms.Button.OnMouseUp(System.Windows.Forms.MouseEventArgs)
    System.Windows.Forms.Control.WmMouseUp(ref System.Windows.Forms.Message, System.Windows.Forms.MouseButtons, int)
    System.Windows.Forms.Control.WndProc(ref System.Windows.Forms.Message)
    System.Windows.Forms.ButtonBase.WndProc(ref System.Windows.Forms.Message)
    ...

Я использую этот код:

static System.Net.IPAddress GetPublicIp(string serviceUrl = "https://wtfismyip.com/text")
        {
            return System.Net.IPAddress.Parse(new System.Net.WebClient().DownloadString(serviceUrl));
        }

Все, что может Помогите? спасибо.

Ответы [ 2 ]

1 голос
/ 23 февраля 2020

проблема в том, что тот URL, который вы указали там, возвращает следующий "192.168.1.1\n", так как вы видите, что в конце есть \n, что вызывает вашу проблему, если вы добавляете .Replace("\n",""), он работает нормально.

return System.Net.IPAddress.Parse(new System.Net.WebClient().DownloadString(serviceUrl).Replace("\n", ""));
0 голосов
/ 23 февраля 2020
static string GetIPAddress()  
{  
    String address = "";  
    WebRequest request = WebRequest.Create("http://checkip.dyndns.org/");  
    using (WebResponse response = request.GetResponse())  
    using (StreamReader stream = new StreamReader(response.GetResponseStream()))  
     {  
        address = stream.ReadToEnenter code hered();  
     }  
     int first = address.IndexOf("Address: ") + 9;  
     int last = address.LastIndexOf("</body>");  
     address = address.Substring(first, last - first);  
     return address;  
} 

Проверьте это для получения более подробной информации

...