Метод jQuery ajax по умолчанию - GET, так что, может быть, это ваша проблема? Попробуйте добавить метод: «POST» к вашим опциям:
$.ajax({
method: 'POST',
... etc
Duck Duck Go предоставляет бесплатный доступ к их API в соответствии с их собственной страницей здесь: https://duckduckgo.com/api
Вот URL, на который вы нажали, если хотите указать свой IP адрес: http://api.duckduckgo.com/?q=my+ip&format=json
, который возвращает объект JSON. Атрибут Answer
содержит удобочитаемую строку с вашим IP-адресом. Пример:
{
...
"Answer": "Your IP address is ww.xx.yyy.zzz in <a href=\"http://open.mapquest.com/?q=aaaaa(bbbbb)\">aaaaa(bbbbb)</a>"
...
}
Вы можете извлечь ip-адрес из этой строки, используя split()[4]
, если вы считаете, что это безопасное предположение, что эта строка никогда не изменится, или вам нужно периодически исправлять.
В качестве альтернативы, если вы хотите иметь более перспективный метод, вы можете перебрать все, что возвращает split()
, и вернуть первый элемент, который является IP-адресом. См. Здесь для проверки IP-адресов: Как проверить IP-адрес в Python?
Ваш самый простой путь может состоять в том, чтобы спросить некоторый сервер за пределами Вашей сети.
Одна вещь иметь в виду состоит в том, что различные места назначения могут видеть другой адрес для Вас. Маршрутизатор может быть многосетевым. И действительно это, где проблемы начинаются.
Как уже упоминалось несколькими людьми, STUN действительно является правильным решением.
Всякий раз, когда я хотел сделать это, я просто царапал whatismyip.org . Когда вы заходите на сайт, он дает вам ваш открытый текстовый IP-адрес. Просто и понятно.
Просто сделайте так, чтобы ваш скрипт заходил на этот сайт и читал IP.
Я не знаю, подразумевали ли вы это в своем посте или нет, но получить общедоступный IP-адрес с вашего компьютера невозможно. Он должен исходить из внешнего источника.
2013 г. edit: этот сайт теперь возвращает изображение вместо текста, поэтому для этой цели он бесполезен.
Предназначение для www.whatsmyip.org грубо. Они просьба, чтобы не сделать это на странице.
Только система на том же уровне NAT, поскольку Ваша цель будет видеть тот же IP. Например, Ваше приложение может быть позади нескольких слоев NAT (это происходит больше, поскольку Вы переезжаете от США, где избыток дюйм/с).
ОШЕЛОМЛЯЮТ, действительно лучший метод. В целом необходимо планировать выполнить (ОШЕЛОМИТЬ) сервер куда-нибудь, что приложение можно спросить: трудно не кодируйте серверы других людей. Необходимо кодировать для отправки некоторых определенных сообщений, как описано в rfc5389.
я предлагаю хорошее чтение, и ссылки по теме. http://www.ietf.org/html.charters/behave-charter.html
можно предпочесть смотреть на IPv6 и Морского древоточца, чтобы удостовериться, что у Вас всегда есть доступ IPv6. (Microsoft Vista делает это очень легким, мне говорят)
Я сделал программу, которая соединяется с http://automation.whatismyip.com/n09230945.asp , это, записан в D получение кого-то еще сказать Вам, что они видят Ваш IP, как, вероятно, самый надежный путь:
/*
Get my IP address
*/
import tango.net.http.HttpGet;
import tango.io.Stdout;
void main()
{
try
{
auto page = new HttpGet ("http://automation.whatismyip.com/n09230945.asp");
Stdout(cast(char[])page.read);
}
catch(Exception ex)
{
Stdout("An exception occurred");
}
}
код Python Редактирования должен быть похожим:
from urllib import urlopen
print urlopen('http://automation.whatismyip.com/n09230945.asp').read()
Это может быть самым легким путем. Проанализируйте вывод следующих команд:
, Например, я нахожусь на машине Windows, но та же идея должна работать от Unix также.
> tracert -d www.yahoo.com
Tracing route to www-real.wa1.b.yahoo.com [69.147.76.15]
over a maximum of 30 hops:
1 <1 ms <1 ms <1 ms 192.168.14.203
2 * * * Request timed out.
3 8 ms 8 ms 9 ms 68.85.228.121
4 8 ms 8 ms 9 ms 68.86.165.234
5 10 ms 9 ms 9 ms 68.86.165.237
6 11 ms 10 ms 10 ms 68.86.165.242
Эти 68.85.228.121 Comcast (мой поставщик) маршрутизатор. Мы можем проверить с помощью ping-запросов это:
> ping -r 9 68.85.228.121 -n 1
Pinging 68.85.228.121 with 32 bytes of data:
Reply from 68.85.228.121: bytes=32 time=10ms TTL=253
Route: 66.176.38.51 ->
68.85.228.121 ->
68.85.228.121 ->
192.168.14.203
Вуаля! Эти 66.176.38.51 являются моим общедоступным IP.
Если в сети работает сервер UpNp, работающий на шлюзе, вы можете связаться со шлюзом и запросить у него внешний IP-адрес.