Обнаружение публичного IP программно - PullRequest
26 голосов
/ 05 марта 2009

Я за роутером, мне нужна простая команда, чтобы обнаружить мой публичный ip (вместо того, чтобы гуглить, какой у меня ip и нажимать один из результатов)

Существуют ли стандартные протоколы для этого? Я слышал о STUN, но не знаю, как я могу его использовать?

P.S. Я планирую написать короткий скрипт на Python, чтобы сделать это

Ответы [ 15 ]

1 голос
/ 05 марта 2011

еще один дерзкий путь: если у вашего роутера есть возможность обновить свой веб-IP на DynDNS , вы можете получить свой собственный IP-адрес, например:

IP=`resolveip -s myalias.dyndns-home.com`
0 голосов
/ 06 июля 2018

Теперь размещать собственный API без сервера довольно дешево. У всех крупных облачных провайдеров есть сервис для этого. Например, для использования облачных функций Google достаточно:

exports.requestIP = (req, res) => {
    res.status(200).send(req.ip)
}

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

0 голосов
/ 06 февраля 2017

Я делюсь с вами своим методом получения публичного IP-адреса сервера без необходимости использования внешних API-интерфейсов (что, конечно, представляет угрозу безопасности)

INTERFACE=`ip route get 8.8.8.8 | grep 8.8.8.8 | cut -d' ' -f5`
HOSTIP=`ifconfig $INTERFACE | grep "inet " | awk -F'[: ]+' '{ print $4 }'`

Или в python, если вы предпочитаете:

import subprocess
public_ip = subprocess.check_output(["ifconfig `ip route get 8.8.8.8 | grep 8.8.8.8 | cut -d' ' -f5` | grep \'inet \' | awk -F'[: ]+' '{ print $4 }'"], shell=True)

Работает так:

  • определяет лучший интерфейс для доступа к серверу Google DNS
  • greps public IP из записи ifconfig для этого интерфейса
0 голосов
/ 26 января 2017

curl api.infoip.io - полная информация

curl api.infoip.io/ip - только ip-адрес

curl api.infoip.io/country - только название страны

... и более того же

Вы можете просмотреть документы на http://docs.ciokan.apiary.io/

0 голосов
/ 16 ноября 2015

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?

...