Мои компьютеры сидят за маршрутизатором/брандмауэром. Как программно узнать, что такое внешний IP-адрес. Я могу использовать http://www.whatsmyip.org/ для специальных запросов, но TOS не разрешает автоматические проверки.
Любые идеи?
Мои компьютеры сидят за маршрутизатором/брандмауэром. Как программно узнать, что такое внешний IP-адрес. Я могу использовать http://www.whatsmyip.org/ для специальных запросов, но TOS не разрешает автоматические проверки.
Любые идеи?
http://ipecho.net/plain представляется приемлемая альтернатива, поскольку whatismyip.com теперь требует членства для их автоматическое соединение. Они очень любезно выглядят предлагая эту услугу бесплатно, поэтому, пожалуйста, не злоупотребляйте им.
К сожалению, нет простого способа сделать это.
Я бы использовал сайт, например 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>
Это должно быть очень легко разобрать. Кроме того, сайт существует около десяти лет. Есть надежда, что это будет на какое-то время.
Если у вас есть доступ к веб-серверу с помощью modphp, вы можете выполнить его собственный:
<?php print $_SERVER['REMOTE_ADDR']; ?>
Если вы не хотите, чтобы это злоупотребляло, вам придется хранить его в секрете или добавлять ограничения на запрос.
Я использую один на своем сервере в течение многих лет.
Явное:
Создайте файл whatismyip.php в своей папке public_html на своем веб-сайте. Его можно назвать чем угодно и быть в любом месте вашего веб-сайта.
Добавьте строку выше, а затем запросите свой сервер:
curl http://example.com/whatismyip.php
например.
К сожалению, начиная с 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-адрес клиента в сообщении об ошибке.
Если маршрутизатор, за которым вы находитесь, говорит UPnP, вы всегда можете использовать библиотеку UPnP для любого языка, который вы разрабатываете, чтобы запросить маршрутизатор для его внешнего ip.
curl ifconfig.me
или
curl ifconfig.me/ip
Если у вас нет завитка,
wget ifcondig.me/ip 2>/dev/null && cat ip
Надеюсь, что это поможет.
http://myexternalip.com предоставляет такую информацию. к вы получаете свой IP-адрес, у вас есть много вариантов:
Другим способом является доступ к облачной электронной почте (yahoo, google, hotmail), отправьте электронное письмо. Затем просмотрите заголовки, и вы увидите свой IP-адрес.
Я бы посмотрел точную область, но заголовки могут отличаться от каждой имплантации. Ищите получателя и следуйте за ним, пока не получите что-то похожее на отправленный
EDIT: Это отвечает на вопрос, как найти IP-адрес, а не через PROGRAMMATIC-подход
Мой маршрутизатор 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
В качестве альтернативы вы можете просто использовать опцию --insecure, чтобы обойти проверку сертификата, что, вероятно, имеет больше смысла в данных обстоятельствах.
Поскольку этот вопрос был задан некоторое время назад, теперь имеется свободно доступный веб-сервис, специально разработанный для того, чтобы вы могли программно определить ваш IP-адрес под названием ipify.
$ curl 'https://api.ipify.org?format=json'
Результаты в
{"ip": "1.2.3.4" /* your public IP */}
whatismyip.com или ipchicken.com очень легко разбираются.
Если у вас есть веб-хост или vps, вы также можете определить его, не опасаясь, что он будет случайно опущен, оставив вас застрявшими.
ifcfg.me позволяет искать через
Nslookup
телнет
FTP
и http
работает даже с IPv6
Простой, но не элегантный для этого использования. Я установил некоторые камеры видеонаблюдения, а мой поставщик кабелей - 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