Получить публичный / внешний IP-адрес? - PullRequest
49 голосов
/ 15 июля 2010

Кажется, я не могу получить или найти информацию о нахождении публичных IP-адресов моих маршрутизаторов?Это потому, что этого нельзя сделать таким образом, и его нужно будет получить с веб-сайта?

Ответы [ 25 ]

83 голосов
/ 14 февраля 2014

Используя C #, у веб-клиента это короткий.

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

Командная строка (работает как в Linux, так и в Windows)

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

OR

curl http://ipinfo.io/ip
69 голосов
/ 20 октября 2011
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();
}

Сделайте этот маленький трюк с Проверьте IP DNS

Используйте HTTPGet класс, который я нашел на Goldb-Httpget C #

35 голосов
/ 19 апреля 2013

С помощью .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;
    }
28 голосов
/ 18 июня 2015
string pubIp =  new System.Net.WebClient().DownloadString("https://api.ipify.org");
18 голосов
/ 29 августа 2012

Подобный сервис

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

            request.UserAgent = "curl"; // this simulate curl linux 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", "");
        }
13 голосов
/ 15 июля 2010

Теоретически ваш маршрутизатор должен иметь возможность сообщать вам публичный IP-адрес сети, но способ сделать это обязательно будет непоследовательным / непростым, если это возможно даже с некоторыми устройствами маршрутизатора.

Самый простой и все же очень надежный метод - это отправить запрос на веб-страницу, которая возвращает ваш IP-адрес так, как его видит веб-сервер. Dyndns.org предоставляет хороший сервис для этого:

http://checkip.dyndns.org/

Возвращается очень простой / короткий HTML-документ, содержащий текст Current IP Address: 157.221.82.39 (поддельный IP), который тривиально извлечь из ответа HTTP.

9 голосов
/ 10 декабря 2015

Расширение этого ответа @ suneel ranga :

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

Где бы вы использовали службу с System.Net.WebClient, которая просто показывает IP-адрес в виде строки и использует объект System.Net.IPAddress. Вот несколько таких услуг *:

* Некоторые службы были упомянуты в этом вопросе и из этих ответов с сайта суперпользователя .

6 голосов
/ 19 июля 2014

Быстрый способ получить Внешний ip без какого-либо соединения. На самом деле для этого не требуется никакого соединения Http

. Сначала вы должны добавить NATUPNPLib.dll на ссылку и выбрать его из ссылок и проверить в окне свойств.

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 голосов
/ 30 сентября 2012

С помощью нескольких строк кода вы можете написать собственный Http-сервер для этого.

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();
}

Тогда в любое время вам нужно знать ваш публичный ip, вы можете сделать это.

WebClient client = new WebClient();
string ip = client.DownloadString("http://serverIp/PublicIP");
5 голосов
/ 21 июля 2017

Я обнаружил, что http://checkip.dyndns.org/ давал мне html-теги, которые мне пришлось обработать, но https://icanhazip.com/ просто давал мне простую строку.К сожалению https://icanhazip.com/ дает мне адрес ip6, и мне нужен ip4.К счастью, есть 2 субдомена, которые вы можете выбрать, ipv4.icanhazip.com и ipv6.icanhazip.com.

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