Как узнать, каким является мой внешний IP-адрес?
Мои компьютеры сидят за маршрутизатором/брандмауэром. Как программно узнать, что такое внешний IP-адрес. Я могу использовать http://www.whatsmyip.org/ для специальных запросов, но TOS не разрешает автоматические проверки.
Любые идеи?
Ответы
Ответ 1
http://ipecho.net/plain представляется приемлемая альтернатива, поскольку whatismyip.com теперь требует членства для их автоматическое соединение. Они очень любезно выглядят предлагая эту услугу бесплатно, поэтому, пожалуйста, не злоупотребляйте им.
Ответ 2
К сожалению, нет простого способа сделать это.
Я бы использовал сайт, например 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>
Это должно быть очень легко разобрать.
Кроме того, сайт существует около десяти лет.
Есть надежда, что это будет на какое-то время.
Ответ 3
Если у вас есть доступ к веб-серверу с помощью modphp, вы можете выполнить его собственный:
<?php print $_SERVER['REMOTE_ADDR']; ?>
Если вы не хотите, чтобы это злоупотребляло, вам придется хранить его в секрете или добавлять ограничения на запрос.
Я использую один на своем сервере в течение многих лет.
Явное:
Создайте файл whatismyip.php в своей папке public_html на своем веб-сайте. Его можно назвать чем угодно и быть в любом месте вашего веб-сайта.
Добавьте строку выше, а затем запросите свой сервер:
curl http://example.com/whatismyip.php
например.
Ответ 4
К сожалению, начиная с 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-адрес клиента в сообщении об ошибке.
Ответ 5
Если маршрутизатор, за которым вы находитесь, говорит UPnP, вы всегда можете использовать библиотеку UPnP для любого языка, который вы разрабатываете, чтобы запросить маршрутизатор для его внешнего ip.
Ответ 6
curl ifconfig.me
или
curl ifconfig.me/ip
Если у вас нет завитка,
wget ifcondig.me/ip 2>/dev/null && cat ip
Надеюсь, что это поможет.
Ответ 7
http://myexternalip.com предоставляет такую информацию. к
вы получаете свой IP-адрес, у вас есть много вариантов:
Ответ 8
Другим способом является доступ к облачной электронной почте (yahoo, google, hotmail), отправьте электронное письмо. Затем просмотрите заголовки, и вы увидите свой IP-адрес.
Я бы посмотрел точную область, но заголовки могут отличаться от каждой имплантации. Ищите получателя и следуйте за ним, пока не получите что-то похожее на отправленный
EDIT: Это отвечает на вопрос, как найти IP-адрес, а не через PROGRAMMATIC-подход
Ответ 9
Мой маршрутизатор 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 выше, я также сделал это:
-
Используется браузер для получения самозаверяющего сертификата маршрутизатора (сохраняется как Linksys.crt).
-
Добавил его в мой комплект СА:
openssl x509 -in Linksys.crt -text >> /usr/ssl/certs/ca-bundle.crt
- Добавлен "Linksys" в мой файл hosts (C:\Windows\System32\Drivers\etc\HOSTS в моем окне Win8) в качестве псевдонима для адреса маршрутизатора. Если десятиточечная нотация указывается на curl вместо этого псевдонима, он отклоняет соединение из-за несоответствия имени субъекта сертификата.
В качестве альтернативы вы можете просто использовать опцию --insecure, чтобы обойти проверку сертификата, что, вероятно, имеет больше смысла в данных обстоятельствах.
Ответ 10
Поскольку этот вопрос был задан некоторое время назад, теперь имеется свободно доступный веб-сервис, специально разработанный для того, чтобы вы могли программно определить ваш IP-адрес под названием ipify.
$ curl 'https://api.ipify.org?format=json'
Результаты в
{"ip": "1.2.3.4" /* your public IP */}
Ответ 11
whatismyip.com или ipchicken.com очень легко разбираются.
Если у вас есть веб-хост или vps, вы также можете определить его, не опасаясь, что он будет случайно опущен, оставив вас застрявшими.
Ответ 12
ifcfg.me
позволяет искать через
Nslookup
телнет
FTP
и http
работает даже с IPv6
Ответ 13
Простой, но не элегантный для этого использования. Я установил некоторые камеры видеонаблюдения, а мой поставщик кабелей - Wide Open West или WOWWAY потребовал 10 долларов в месяц, чтобы настроить статический IP-EXTORTION для резервирования DHCP... поэтому я создал файл VBS со следующим кодом, чтобы отбросить результат dropbox и google drive... должны удалить файл для нового, чтобы синхронизировать, хотя по какой-то причине.
Это работает на компьютере в моем доме. Мой компьютер настроен на возобновление работы при отключении электроэнергии, и задача будет запускаться каждый день один раз (обратите внимание, если вы его часто запускаете, сайт блокирует ваши запросы).
Теперь я могу получить свой IP-адрес на дороге и посмотреть, как люди украдут мои вещи:-)
get_html "http://ipecho.net/plain", "C:\Users\joe\Google Drive\IP.html"
get_html "http://ipecho.net/plain", "C:\Users\joe\Dropbox\IP.html"
sub get_html (up_http, down_http)
dim xmlhttp : set xmlhttp = createobject("msxml2.xmlhttp.3.0")
xmlhttp.open "get", up_http, false
xmlhttp.send
dim fso : set fso = createobject ("scripting.filesystemobject")
dim newfile : set newfile = fso.createtextfile(down_http, true)
newfile.write (xmlhttp.responseText)
newfile.close
set newfile = nothing
set xmlhttp = nothing
end sub