Как мне узнать, какой у меня внешний IP-адрес? - PullRequest
40 голосов
/ 18 июля 2009

Мои компьютеры находятся за маршрутизатором / брандмауэром. Как программно узнать, какой у меня внешний IP-адрес. Я могу использовать http://www.whatsmyip.org/ для специальных запросов, но TOS не допускает автоматических проверок.

Есть идеи?

Ответы [ 13 ]

46 голосов
/ 18 июля 2009

http://ipecho.net/plain представляется работоспособная альтернатива, поскольку whatismyip.com теперь требует членства их автоматическая ссылка. Они очень любезны предлагая эту услугу бесплатно, поэтому, пожалуйста, не злоупотребляйте этим.

12 голосов
/ 18 июля 2009

К сожалению, нет простого способа сделать это.

Я бы использовал сайт типа www.whatsmyip.org и проанализировал бы вывод.

checkip.dyndns.com возвращает очень простой файл HTML, который выглядит следующим образом:

<html>
  <head>
    <title>Current IP Check</title>
  </head>
  <body>
    Current IP Address: 84.151.156.163
  </body>
</html>

Это должно быть очень легко разобрать. Причем сайт существует уже около десяти лет. Есть надежда, что это будет какое-то время.

11 голосов
/ 18 июля 2009

Если у вас есть доступ к веб-серверу с помощью modphp, вы можете свернуть свой собственный:

<?php print $_SERVER['REMOTE_ADDR']; ?>

Если вы не хотите, чтобы этим злоупотребляли, вам придется держать это в секрете или добавлять лимиты запросов.

Я использую один на моем сервере в течение многих лет.

Явное:

Создайте файл whatismyip.php в вашей папке public_html на вашем веб-сайте. Он может называться как угодно и находиться где угодно в вашем руте.

Добавьте строку выше и запросите свой сервер:

curl http://example.com/whatismyip.php

например.

6 голосов
/ 26 июля 2013

К сожалению, с 2013 года Whatismyip.com взимает плату за услугу.

http://www.icanhazip.com продолжает расти, 3 года спустя. Просто выводит IP в виде текста, абсолютно ничего.

http://checkip.dyndns.org все еще работает.

Вы также можете использовать Google, если хотите быть уверенным, что он не выйдет из строя, но он все равно может заблокировать вас за нарушения TOS.

https://www.google.ie/search?q=whats+is+my+ip

Но даже когда они блокируют меня, они все равно сообщают мне IP-адрес моего клиента в сообщении об ошибке.

3 голосов
/ 15 ноября 2013
curl ifconfig.me

или

curl ifconfig.me/ip

Если у вас не установлен curl,

wget ifconfig.me/ip 2>/dev/null && cat ip

Надеюсь, это поможет.

2 голосов
/ 09 июня 2016

Поскольку этот вопрос был задан некоторое время назад, теперь существует свободно доступный веб-сервис, специально разработанный для того, чтобы вы могли программно определять свой IP-адрес, называемый ipify .

$ curl 'https://api.ipify.org?format=json'

Результаты в

{"ip": "1.2.3.4" /* your public IP */}
2 голосов
/ 08 декабря 2014

http://myexternalip.com предоставляет такую ​​информацию. к восстановить ваш IP у вас есть много вариантов:

2 голосов
/ 18 июля 2009

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

1 голос
/ 03 августа 2013

Мой маршрутизатор WRT54G сообщает мне об этом через функцию доступа к локальному маршрутизатору (интерфейс администрирования http (s)), и я предполагаю, что нечто подобное можно было бы сделать со многими другими устройствами. В этом случае страница ввода дает октеты IPv4-адреса в четырех строках, содержащих эту фразу:

class = num maxLength = 3 size = 3 value = ' i ' name = 'wan_ipaddr_ N ' id = 'wan_ipaddr_ N '

Где i - значение октета, а N - номер октета. Этот кусок собачки извлекает и анализирует его, любезно предоставленный Cygwin:

#! /usr/bin/env perl
use strict;
use warnings 'all';

my( $account, $password ) = @ARGV;

open QUERY,
    "curl --sslv3 --user '$account:$password' https://Linksys/ --silent |"
    or die "Failed to connect to router";

my @ipaddr = ('x','x','x','x');

while( <QUERY> ) {
    $ipaddr[$2] = $1 if /value='(\d+)' name='wan_ipaddr_([0-3])/;
}
close QUERY;
print join('.', @ipaddr);

Нет гарантии, что это будет работать со всеми версиями прошивки маршрутизатора.

Если ваш маршрутизатор настроен на использование http для этого интерфейса, удалите опцию --sslv3 curl, и вы можете использовать десятичную запись с точками для адресации маршрутизатора. Чтобы использовать https с указанными выше параметрами curl, я также сделал это:

  1. Использовал браузер для получения самозаверяющего сертификата маршрутизатора (сохраненного как Linksys.crt).

  2. Добавил его в свой CA-пакет:

    openssl x509 -in Linksys.crt -text >> /usr/ssl/certs/ca-bundle.crt
    
  3. Добавлен 'Linksys' в мой файл hosts (C: \ Windows \ System32 \ Drivers \ etc \ HOSTS на моем компьютере с Win8) в качестве псевдонима для адреса маршрутизатора. Если вместо этого псевдонима дается десятичная запись с точками, а не этот псевдоним, соединение отклоняется из-за несоответствия имени субъекта сертификата.

В качестве альтернативы, вы можете просто использовать опцию --insecure, чтобы обойти проверку сертификата, что, вероятно, имеет больше смысла в данных обстоятельствах.

1 голос
/ 18 июля 2009

Другой способ - если у вас есть доступ к облачной электронной почте (Yahoo, Google, Hotmail), отправьте себе электронное письмо. Затем просмотрите заголовки, и вы увидите там свой IP-адрес.

Я бы посмотрел точную область, но заголовки могут отличаться в зависимости от каждой имплементации. Ищите полученные и следуйте им, пока не доберетесь до того, что выглядит как отправленное

РЕДАКТИРОВАТЬ: Это ответ на вопрос, как найти IP-адрес, а не через подход PROGRAMMATIC

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...