wake-up-neo.net

Öffentliche / externe IP-Adresse abrufen?

Ich kann anscheinend keine Informationen zum Auffinden der öffentlichen IP-Adresse meines Routers erhalten oder finden. Liegt es daran, dass dies nicht auf diese Weise möglich ist und von einer Website abgerufen werden muss?

50
arbme

Mit C # ist es mit dem Webclient eine kurze.

public static void Main(string[] args)
{
    string externalip = new WebClient().DownloadString("http://icanhazip.com");            
    Console.WriteLine(externalip);
}

Befehlszeile (funktioniert sowohl unter Linux als auch unter Windows)

wget -qO- http://bot.whatismyipaddress.com

OR

curl http://ipinfo.io/ip
84
user_v
static void Main(string[] args)
{
    HTTPGet req = new HTTPGet();
    req.Request("http://checkip.dyndns.org");
    string[] a = req.ResponseBody.Split(':');
    string a2 = a[1].Substring(1);
    string[] a3=a2.Split('<');
    string a4 = a3[0];
    Console.WriteLine(a4);
    Console.ReadLine();
}

Machen Sie diesen kleinen Trick mit IP DNS überprüfen

Verwenden Sie die Klasse HTTPGet, die ich in Goldb-Httpget C # gefunden habe

69
filippakoc

Mit .Net WebRequest:

  public static string GetPublicIP()
    {
        string url = "http://checkip.dyndns.org";
        System.Net.WebRequest req = System.Net.WebRequest.Create(url);
        System.Net.WebResponse resp = req.GetResponse();
        System.IO.StreamReader sr = new System.IO.StreamReader(resp.GetResponseStream());
        string response = sr.ReadToEnd().Trim();
        string[] a = response.Split(':');
        string a2 = a[1].Substring(1);
        string[] a3 = a2.Split('<');
        string a4 = a3[0];
        return a4;
    }
36
r.zarei
string pubIp =  new System.Net.WebClient().DownloadString("https://api.ipify.org");
29
suneel ranga

Mit einem großen ähnlichen Service

private string GetPublicIpAddress()
{
    var request = (HttpWebRequest)WebRequest.Create("http://ifconfig.me");

    request.UserAgent = "curl"; // this will tell the server to return the information as if the request was made by the linux "curl" command

    string publicIPAddress;

    request.Method = "GET";
    using (WebResponse response = request.GetResponse())
    {
        using (var reader = new StreamReader(response.GetResponseStream()))
        {
            publicIPAddress = reader.ReadToEnd();
        }
    }

    return publicIPAddress.Replace("\n", "");
}
20

Theoretisch sollte Ihr Router in der Lage sein, Ihnen die öffentliche IP-Adresse des Netzwerks mitzuteilen, aber die Art und Weise, dies zu tun, ist notwendigerweise inkonsistent/unkompliziert, wenn dies mit einigen Routergeräten überhaupt möglich ist.

Die einfachste und dennoch sehr zuverlässige Methode besteht darin, eine Anfrage an eine Webseite zu senden, die Ihre IP-Adresse so zurückgibt, wie der Webserver sie sieht. Dyndns.org bietet hierfür einen guten Service:

http://checkip.dyndns.org/

Zurückgegeben wird ein extrem einfaches/kurzes HTML-Dokument mit dem Text Current IP Address: 157.221.82.39 (gefälschte IP-Adresse), die sich trivial aus der HTTP-Antwort extrahieren lässt.

13
Noldorin

Erweitere dies antworte durch @ suneel ranga :

static System.Net.IPAddress GetPublicIp(string serviceUrl = "https://ipinfo.io/ip")
{
    return System.Net.IPAddress.Parse(new System.Net.WebClient().DownloadString(serviceUrl));
}

Wo würden Sie einen Dienst mit System.Net.WebClient das zeigt einfach die IP-Adresse als Zeichenfolge und verwendet die System.Net.IPAddress Objekt. Hier einige solcher Dienstleistungen *:

* Einige Dienste wurden in dieser Frage erwähnt und von diesen Antworten von der Superuser-Site .

10
ShooShoSha

Ich fand, dass http://checkip.dyndns.org/ mir HTML-Tags gab, die ich verarbeiten musste, aber https://icanhazip.com/ gab mir nur ein einfache Zeichenfolge. Leider https://icanhazip.com/ gibt mir die IP6-Adresse und ich brauchte IP4. Zum Glück gibt es 2 Subdomains, aus denen Sie auswählen können, ipv4.icanhazip.com und ipv6.icanhazip.com.

        string externalip = new WebClient().DownloadString("https://ipv4.icanhazip.com/");
        Console.WriteLine(externalip);
        Console.WriteLine(externalip.TrimEnd());
7
Dowlers

Mit ein paar Codezeilen können Sie dafür Ihren eigenen HTTP-Server schreiben.

HttpListener listener = new HttpListener();
listener.Prefixes.Add("http://+/PublicIP/");
listener.Start();
while (true)
{
    HttpListenerContext context = listener.GetContext();
    string clientIP = context.Request.RemoteEndPoint.Address.ToString();
    using (Stream response = context.Response.OutputStream)
    using (StreamWriter writer = new StreamWriter(response))
        writer.Write(clientIP);

    context.Response.Close();
}

Dann können Sie dies jederzeit tun, wenn Sie Ihre öffentliche IP-Adresse kennen müssen.

WebClient client = new WebClient();
string ip = client.DownloadString("http://serverIp/PublicIP");
6
Despertar

Schnelle Möglichkeit, eine externe IP-Adresse ohne Verbindung zu erhalten Eigentlich brauchen Sie dafür keine HTTP-Verbindung

zuerst müssen Sie NATUPNPLib.dll auf Referance hinzufügen und es aus den Referenzen auswählen und im Eigenschaftenfenster Interop-Typ in False einbetten überprüfen

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NATUPNPLib; // Add this dll from referance and chande Embed Interop Interop to false from properties panel on visual studio
using System.Net;

namespace Client
{
    class NATTRAVERSAL
    {
        //This is code for get external ip
        private void NAT_TRAVERSAL_ACT()
        {
            UPnPNATClass uPnP = new UPnPNATClass();
            IStaticPortMappingCollection map = uPnP.StaticPortMappingCollection;

            foreach (IStaticPortMapping item in map)
            {
                    Debug.Print(item.ExternalIPAddress); //This line will give you external ip as string
                    break;
            }
        }
    }
}
6
Toprak

checkip.dyndns.org funktioniert nicht immer richtig. Auf meinem Computer wird beispielsweise die interne After-NAT-Adresse angezeigt:

Current IP Address: 192.168.1.120

Ich denke, es passiert, weil ich meine lokale DNS-Zone hinter NAT habe und mein Browser sendet, um seine lokale IP-Adresse zu überprüfen, die zurückgegeben wird.

Außerdem ist http ein schweres und textorientiertes TCP-basiertes Protokoll, das sich nicht besonders für die schnelle und effiziente regelmäßige Abfrage externer IP-Adressen eignet. Ich empfehle UDP-basiertes, binäres STUN, das speziell für diese Zwecke entwickelt wurde:

http://en.wikipedia.org/wiki/STUN

STUN-Server ist wie "UDP-Spiegel". Sie schauen darauf und sehen, "wie ich aussehe".

Es gibt weltweit viele öffentliche STUN-Server, auf denen Sie Ihre externe IP anfordern können. Zum Beispiel siehe hier:

http://www.voip-info.org/wiki/view/STUN

Sie können jede STUN-Client-Bibliothek aus dem Internet herunterladen, zum Beispiel hier:

http://www.codeproject.com/Articles/18492/STUN-Client

Und benutze es.

5
olegarch

Ich mache es mit HttpClient von System.Net.Http:

public static string PublicIPAddress()
{
    string uri = "http://checkip.dyndns.org/";
    string ip = String.Empty;

    using (var client = new HttpClient())
    {
        var result = client.GetAsync(uri).Result.Content.ReadAsStringAsync().Result;

        ip = result.Split(':')[1].Split('<')[0];
    }

    return ip;
}
4
Davor Zubak

Grundsätzlich bevorzuge ich einige zusätzliche Backups für den Fall, dass eine der IP nicht erreichbar ist. Also benutze ich diese Methode.

 public static string GetExternalIPAddress()
        {
            string result = string.Empty;
            try
            {
                using (var client = new WebClient())
                {
                    client.Headers["User-Agent"] =
                    "Mozilla/4.0 (Compatible; Windows NT 5.1; MSIE 6.0) " +
                    "(compatible; MSIE 6.0; Windows NT 5.1; " +
                    ".NET CLR 1.1.4322; .NET CLR 2.0.50727)";

                    try
                    {
                        byte[] arr = client.DownloadData("http://checkip.amazonaws.com/");

                        string response = System.Text.Encoding.UTF8.GetString(arr);

                        result = response.Trim();
                    }
                    catch (WebException)
                    {                       
                    }
                }
            }
            catch
            {
            }

            if (string.IsNullOrEmpty(result))
            {
                try
                {
                    result = new WebClient().DownloadString("https://ipinfo.io/ip").Replace("\n", "");
                }
                catch
                {
                }
            }

            if (string.IsNullOrEmpty(result))
            {
                try
                {
                    result = new WebClient().DownloadString("https://api.ipify.org").Replace("\n", "");
                }
                catch
                {
                }
            }

            if (string.IsNullOrEmpty(result))
            {
                try
                {
                    result = new WebClient().DownloadString("https://icanhazip.com").Replace("\n", "");
                }
                catch
                {
                }
            }

            if (string.IsNullOrEmpty(result))
            {
                try
                {
                    result = new WebClient().DownloadString("https://wtfismyip.com/text").Replace("\n", "");
                }
                catch
                {
                }
            }

            if (string.IsNullOrEmpty(result))
            {
                try
                {
                    result = new WebClient().DownloadString("http://bot.whatismyipaddress.com/").Replace("\n", "");
                }
                catch
                {
                }
            }

            if (string.IsNullOrEmpty(result))
            {
                try
                {
                    string url = "http://checkip.dyndns.org";
                    System.Net.WebRequest req = System.Net.WebRequest.Create(url);
                    System.Net.WebResponse resp = req.GetResponse();
                    System.IO.StreamReader sr = new System.IO.StreamReader(resp.GetResponseStream());
                    string response = sr.ReadToEnd().Trim();
                    string[] a = response.Split(':');
                    string a2 = a[1].Substring(1);
                    string[] a3 = a2.Split('<');
                    result = a3[0];
                }
                catch (Exception)
                {
                }
            }

            return result;
        }

Um die GUI-Steuerung (WPF, .NET 4.5) zu aktualisieren, verwende zum Beispiel einige Label diesen Code

 void GetPublicIPAddress()
 {
            Task.Factory.StartNew(() =>
            {
                var ipAddress = SystemHelper.GetExternalIPAddress();

                Action bindData = () =>
                {
                    if (!string.IsNullOrEmpty(ipAddress))
                        labelMainContent.Content = "IP External: " + ipAddress;
                    else
                        labelMainContent.Content = "IP External: ";

                    labelMainContent.Visibility = Visibility.Visible; 
                };
                this.Dispatcher.InvokeAsync(bindData);
            });

 }

Hoffe es ist nützlich.

Hier ist ein Beispiel für eine App, die diesen Code enthält.

4
Developer
public static string GetPublicIP()
{
    return new System.Net.WebClient().DownloadString("https://ipinfo.io/ip").Replace("\n","");
}
4
Kamil Smrčka

Beim Debuggen verwende ich Folgendes, um die extern aufrufbare URL zu erstellen. Sie können jedoch nur die ersten beiden Zeilen verwenden, um Ihre öffentliche IP-Adresse abzurufen:

public static string ExternalAction(this UrlHelper helper, string actionName, string controllerName = null, RouteValueDictionary routeValues = null, string protocol = null)
{
#if DEBUG
    var client = new HttpClient();
    var ipAddress = client.GetStringAsync("http://ipecho.net/plain").Result; 
    // above 2 lines should do it..
    var route = UrlHelper.GenerateUrl(null, actionName, controllerName, routeValues, helper.RouteCollection, helper.RequestContext, true); 
    if (route == null)
    {
        return route;
    }
    if (string.IsNullOrEmpty(protocol) && string.IsNullOrEmpty(ipAddress))
    {
        return route;
    }
    var url = HttpContext.Current.Request.Url;
    protocol = !string.IsNullOrWhiteSpace(protocol) ? protocol : Uri.UriSchemeHttp;
    return string.Concat(protocol, Uri.SchemeDelimiter, ipAddress, route);
#else
    helper.Action(action, null, null, HttpContext.Current.Request.Url.Scheme)
#endif
}
3
Ostati

Ich habe die Antwort von @Academy of Programmer auf kürzeren Code überarbeitet und so geändert, dass sie nur https:// URLs:

    public static string GetExternalIPAddress()
    {
        string result = string.Empty;

        string[] checkIPUrl =
        {
            "https://ipinfo.io/ip",
            "https://checkip.amazonaws.com/",
            "https://api.ipify.org",
            "https://icanhazip.com",
            "https://wtfismyip.com/text"
        };

        using (var client = new WebClient())
        {
            client.Headers["User-Agent"] = "Mozilla/4.0 (Compatible; Windows NT 5.1; MSIE 6.0) " +
                "(compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";

            foreach (var url in checkIPUrl)
            {
                try
                {
                    result = client.DownloadString(url);
                }
                catch
                {
                }

                if (!string.IsNullOrEmpty(result))
                    break;
            }
        }

        return result.Replace("\n", "").Trim();
    }
}
3
Mitch Wheat

Antworten, die auf der Verwendung externer Webdienste basieren, sind nicht genau richtig, da sie die angegebene Frage nicht beantworten:

... Informationen zum Finden meiner Router öffentlicher IP


Erläuterung

Alle Onlinedienste geben die externe IP-Adresse zurück , dies bedeutet jedoch nicht, dass diese Adresse dem Router des Benutzers zugewiesen ist.

Dem Router kann eine andere lokale IP-Adresse eines ISP-Infrastrukturnetzwerks zugewiesen werden. Praktisch bedeutet dies, dass der Router keine im Internet verfügbaren Dienste hosten kann. Dies ist möglicherweise gut für die Sicherheit der meisten Heimanwender, aber nicht gut für Computerfreaks, die Server zu Hause hosten.

So überprüfen Sie, ob der Router eine externe IP-Adresse hat:

trace route to web server behind ISP

Laut Wikipedia Artikel reicht die IP-Adresse von 10.0.0.0 – 10.255.255.255, 172.16.0.0 – 172.31.255.255 und 192.168.0.0 – 192.168.255.255 werden für private, d. h. lokale Netzwerke verwendet.

Sehen Sie, was passiert, wenn Sie die Route zu einem Remote-Host verfolgen, dem der Router eine externe IP-Adresse zugewiesen hat:

trace route to web server with external IP address

Erwischt! Erster Sprung beginnt mit 31.* jetzt. Dies bedeutet eindeutig, dass sich zwischen Ihrem Router und dem Internet nichts befindet.


Lösung

  1. Ping an eine Adresse mit Ttl = 2
  2. Bewerten Sie, woher die Antwort kommt.

TTL = 2 muss nicht ausreichen, um den Remote-Host zu erreichen. Hop # 1 Host wird "Reply from <ip address>: TTL expired in transit." enthüllt seine IP-Adresse.

Implementierung

try
{
    using (var ping = new Ping())
    {
        var pingResult = ping.Send("google.com");
        if (pingResult?.Status == IPStatus.Success)
        {
            pingResult = ping.Send(pingResult.Address, 3000, "ping".ToAsciiBytes(), new PingOptions { Ttl = 2 });

            var isRealIp = !Helpers.IsLocalIp(pingResult?.Address);

            Console.WriteLine(pingResult?.Address == null
                ? $"Has {(isRealIp ? string.Empty : "no ")}real IP, status: {pingResult?.Status}"
                : $"Has {(isRealIp ? string.Empty : "no ")}real IP, response from: {pingResult.Address}, status: {pingResult.Status}");

            Console.WriteLine($"ISP assigned REAL EXTERNAL IP to your router, response from: {pingResult?.Address}, status: {pingResult?.Status}");
        }
        else
        {
            Console.WriteLine($"Your router appears to be behind ISP networks, response from: {pingResult?.Address}, status: {pingResult?.Status}");
        }
    }
}
catch (Exception exc)
{
    Console.WriteLine("Failed to resolve external ip address by ping");
}

Kleiner Helfer wird verwendet, um zu überprüfen, ob die IP zum privaten oder öffentlichen Netzwerk gehört:

public static bool IsLocalIp(IPAddress ip) {
    var ipParts = ip.ToString().Split(new [] { "." }, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToArray();

    return (ipParts[0] == 192 && ipParts[1] == 168) 
        || (ipParts[0] == 172 && ipParts[1] >= 16 && ipParts[1] <= 31) 
        ||  ipParts[0] == 10;
}
3

Die meisten Antworten haben http://checkip.dyndns.org in Lösung erwähnt. Für uns hat es nicht gut geklappt. Wir haben viel Zeit mit Timemouts verbracht. Es ist wirklich beunruhigend, wenn Ihr Programm von der IP-Erkennung abhängig ist.

Als Lösung verwenden wir die folgende Methode in einer unserer Desktopanwendungen:

    // Returns external/public ip
    protected string GetExternalIP()
    {
        try
        {
            using (MyWebClient client = new MyWebClient())
            {
                client.Headers["User-Agent"] =
                "Mozilla/4.0 (Compatible; Windows NT 5.1; MSIE 6.0) " +
                "(compatible; MSIE 6.0; Windows NT 5.1; " +
                ".NET CLR 1.1.4322; .NET CLR 2.0.50727)";

                try
                {
                    byte[] arr = client.DownloadData("http://checkip.amazonaws.com/");

                    string response = System.Text.Encoding.UTF8.GetString(arr);

                    return response.Trim();
                }
                catch (WebException ex)
                {
                    // Reproduce timeout: http://checkip.amazonaws.com:81/

                    // trying with another site
                    try
                    {
                        byte[] arr = client.DownloadData("http://icanhazip.com/");

                        string response = System.Text.Encoding.UTF8.GetString(arr);

                        return response.Trim();
                    }
                    catch (WebException exc)
                    { return "Undefined"; }
                }
            }
        }
        catch (Exception ex)
        {
            // TODO: Log trace
            return "Undefined";
        }
    }

Ein guter Teil ist, dass beide Sites IP im einfachen Format zurückgeben. So werden String-Operationen vermieden.

Um Ihre Logik in der catch -Klausel zu überprüfen, können Sie Timeout reproduzieren, indem Sie auf einen nicht verfügbaren Port klicken. zB: http://checkip.amazonaws.com:81/

2
ThePCWizard

Die IPIFY-API ist nett, da sie in Rohtext und JSON antworten kann. Es kann auch Rückrufe usw. ausführen. Das einzige Problem ist, dass es in IPv4 und nicht in 6 antwortet.

2
carefulnow1

Beste Antwort, die ich gefunden habe

So erhalten Sie die Remote-IP-Adresse auf dem schnellstmöglichen Weg. Sie müssen einen Downloader verwenden oder einen Server auf Ihrem Computer erstellen.

Der Nachteil bei der Verwendung dieses einfachen Codes ist, dass das Abrufen der Remote-IP-Adresse 3 bis 5 Sekunden dauert, da der WebClient bei der Initialisierung immer 3 bis 5 Sekunden benötigt, um Ihre Proxy-Einstellungen zu überprüfen.

 public static string GetIP()
 {
            string externalIP = "";
            externalIP = new WebClient().DownloadString("http://checkip.dyndns.org/");
            externalIP = (new Regex(@"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"))
                                           .Matches(externalIP)[0].ToString();
            return externalIP;
 }

Hier ist, wie ich es behoben habe .. (das erste Mal dauert noch 3-5 Sekunden), aber danach wird es immer Ihre Remote-IP-Adresse in 0-2 Sekunden bekommen, abhängig von Ihrer Verbindung.

public static WebClient webclient = new WebClient();
public static string GetIP()
{
    string externalIP = "";
    externalIP = webclient.DownloadString("http://checkip.dyndns.org/");
    externalIP = (new Regex(@"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"))
                                   .Matches(externalIP)[0].ToString();
    return externalIP;
}
2
SSpoke
public string GetClientIp() {
    var ipAddress = string.Empty;
    if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null) {
        ipAddress = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
    } else if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_CLIENT_IP"] != null &&
               System.Web.HttpContext.Current.Request.ServerVariables["HTTP_CLIENT_IP"].Length != 0) {
        ipAddress = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_CLIENT_IP"];
    } else if (System.Web.HttpContext.Current.Request.UserHostAddress.Length != 0) {
        ipAddress = System.Web.HttpContext.Current.Request.UserHostName;
    }
    return ipAddress;
} 

funktioniert perfekt

1
kayabaku
using System.Net;

private string GetWorldIP()
{
    String url = "http://bot.whatismyipaddress.com/";
    String result = null;

    try
    {
        WebClient client = new WebClient();
        result = client.DownloadString(url);
        return result;
    }
    catch (Exception ex) { return "127.0.0.1"; }
}

Loopback als Fallback verwendet, damit die Dinge nicht tödlich verlaufen.

1
Speedz

Sie können Telnet verwenden, um Ihren Router programmgesteuert nach der WAN IP abzufragen.

Der Telnet-Teil

Der Telnet-Teil kann zum Beispiel mit diesem minimalistischen Telnet-Code als API ausgeführt werden, um einen Telnet-Befehl an Ihren Router zu senden und die Antwort des Routers zu erhalten. In der restlichen Antwort wird davon ausgegangen, dass Sie auf die eine oder andere Weise so eingerichtet sind, dass Sie einen Telnet-Befehl senden und die Antwort in Ihrem Code zurückerhalten.

Einschränkungen des Ansatzes

Ich werde im Vorfeld sagen, dass ein Nachteil der Abfrage des Routers im Vergleich zu anderen Ansätzen darin besteht, dass der von Ihnen geschriebene Code wahrscheinlich ziemlich spezifisch für Ihr Routermodell ist. Dies kann jedoch ein nützlicher Ansatz sein, der sich nicht auf externe Server stützt, und Sie möchten möglicherweise auch zu anderen Zwecken von Ihrer eigenen Software aus auf Ihren Router zugreifen, z. B. um ihn zu konfigurieren und zu steuern.

Beispiel für einen Router-Befehl und eine Antwort

Das folgende Beispiel ist nicht für alle Router geeignet, zeigt jedoch den prinzipiellen Ansatz. Sie müssen die Angaben ändern, um sie an die Befehle und Antworten Ihres Routers anzupassen.

Die Möglichkeit, Ihren Router zum Anzeigen der WAN IP zu bewegen, kann beispielsweise der folgende Telnet-Befehl sein:

connection list

Die Ausgabe kann aus einer Liste von Textzeilen bestehen, eine pro Verbindung, mit der IP-Adresse bei Offset 39. Die Zeile für die WAN Verbindung kann irgendwo im Word "Internet" identifiziert werden die Linie:

  RESP: 3947  17.110.226. 13:443       146.200.253. 16:60642     [R..A] Internet      6 tcp   128
<------------------  39  -------------><--  WAN IP -->

Die Ausgabe füllt möglicherweise jedes IP-Adresssegment mit drei Zeichen mit Leerzeichen auf, die Sie entfernen müssen. (Das heißt, im obigen Beispiel müssten Sie "146.200.253. 16" in "146.200.253.16" umwandeln.)

Durch Experimentieren oder Lesen der Referenzdokumentation für Ihren Router können Sie den für Ihren spezifischen Router zu verwendenden Befehl festlegen und festlegen, wie die Antwort des Routers interpretiert werden soll.

Code zum Abrufen der WAN IP

(Angenommen, Sie haben eine Methode sendRouterCommand für den Telnet-Teil - siehe oben.)

Mit dem oben beschriebenen Beispielrouter erhält der folgende Code die WAN IP:

private bool getWanIp(ref string wanIP)
{
    string routerResponse = sendRouterCommand("connection list");

    return (getWanIpFromRouterResponse(routerResponse, out wanIP));
}

private bool getWanIpFromRouterResponse(string routerResponse, out string ipResult)
{
    ipResult = null;
    string[] responseLines = routerResponse.Split(new char[] { '\n' });

    //  RESP: 3947  17.110.226. 13:443       146.200.253. 16:60642     [R..A] Internet      6 tcp   128
    //<------------------  39  -------------><---  15   --->

    const int offset = 39, length = 15;

    foreach (string line in responseLines)
    {
        if (line.Length > (offset + length) && line.Contains("Internet"))
        {
            ipResult = line.Substring(39, 15).Replace(" ", "");
            return true;
        }
    }

    return false;
}
1
Reg Edit