Вы, вероятно, хотите использовать D. Переместите курсор в первый символ, который Вы хотите удалить, затем поразить shift-D. Все уведенное. На самом деле это находится в буфере сокращения по умолчанию, таким образом, Вы можете, P или p вставить его въезжают задним ходом.
Я использую Разность потенциалов (удалите к концу строки, затем отложите ее), переместитесь в конец некоторой другой строки, затем p снова для вставки того же текста в в конце этой другой строки. Творит чудеса в файлах конфигурации, куда необходимо поместить некоторый сложный URL в два или больше места.
Я рекомендовал бы получить его непосредственно от сервера DNS.
Большинство других ответов ниже всех включает переходящий через HTTP к удаленному серверу. Некоторые из них потребовали парсинга вывода или полагались на заголовок Агента пользователя, чтобы заставить сервер ответить в простом тексте. Они изменяются вполне часто (спуститесь, измените их имя, поднимите рекламу, мог бы изменить выходной формат и т.д.).
Используя dig
с OpenDNS как сопоставитель:
dig @resolver1.opendns.com ANY myip.opendns.com +short
Возможно, исказите его в Вашем bashrc
таким образом, легко помнить
alias wanip='dig @resolver1.opendns.com ANY myip.opendns.com +short'
Отвечает простым IP-адресом:
$ wanip
80.100.192.168 # or, 2606:4700:4700::1111
(Сокращенный из https://ss64.com/bash/dig.html):
usage: dig [@global-dnsserver] [q-type] <hostname> <d-opt> [q-opt]
q-type one of (A, ANY, AAAA, TXT, MX, ...). Default: A.
d-opt ...
+[no]short (Display nothing except short form of answer)
...
q-opt one of:
-4 (use IPv4 query transport only)
-6 (use IPv6 query transport only)
...
ANY
тип запроса возвращает или AAAA или запись. Для предпочтения IPv4 или соединения IPv6 а именно, используйте -4
или -6
опции соответственно.
Для требования ответа быть адресом IPv4 замените ЛЮБОГО A
; для IPv6, замена это с AAAA
.Note, что это может только возвратить адрес, используемый для соединения. Например, при соединении по IPv6, это не может возвратить адрес.
В дополнение к OpenDNS существуют подобные услуги DNS, предоставленные Akamai и Google:
$ dig @ns1-1.akamaitech.net ANY whoami.akamai.net +short
80.100.192.168
$ dig @ns1.google.com TXT o-o.myaddr.l.google.com +short
"80.100.192.168"
Псевдоним в качестве примера, который конкретно запрашивает адрес IPv4:
alias wanip4='dig @resolver1.opendns.com A myip.opendns.com +short -4'
$ wanip4
80.100.192.168
И для IPv6:
alias wanip6='dig @resolver1.opendns.com AAAA myip.opendns.com +short -6'
$ wanip6
2606:4700:4700::1111
Если команда не работает по некоторым причинам, может быть проблема с восходящим поставщиком, инструментом командной строки или чем-то еще. Чтобы помочь понять, почему это не работает, выполняет команду без +short
опция показать детали запроса DNS. Например:
$ dig @resolver1.opendns.com ANY myip.opendns.com
;; Got answer: ->>HEADER<<- opcode: QUERY, status: NOERROR
;; QUESTION SECTION:
;myip.opendns.com. IN ANY
;; ANSWER SECTION:
myip.opendns.com. 0 IN AAAA 2606:4700:4700::1111
;; Query time: 4 msec
;; WHEN: Fri Apr 11 00:00:01 GMT 2011
netcat icanhazip.com 80 <<< $'GET / HTTP/1.1\nHost: icanhazip.com\n\n' | tail -n1
wget icanhazip.com
работы.
– l0b0
04.04.2013, 14:23
netcat icanhazip.com 80
. Похож на него, игнорирует $http_proxy
и друзья, потому что, указывая прокси и порт с -x
просто привел к процессу зависания.
– l0b0
04.04.2013, 17:05
netcat proxy 3128 <<<$'GET http://icanhazip.com/ HTTP/1.0\n\n' | tail -n 1
для основного Прокси HTTP (принимающий это работает на порте 3128). Вы, очевидно, вернете IP-адрес прокси, все же.
– tripleee
04.07.2013, 07:07
Host:
заголовок запроса - основанный на имени виртуальный хостинг был одним из основных улучшений HTTP 1.1. Или измените запрос, чтобы указать HTTP/1.1 или удалить заголовок Хоста (я рекомендую первому).
– a CVn
04.07.2013, 10:39
Можно использовать ifconfig.me в качестве альтернативы whatismyip.org.
curl -s http://ifconfig.me
Также ifconfig.me имеет некоторых дополнительных функциональный. Для обнаружения, какую информацию можно получить, посещают веб-сайт.
<img src='ipimg.php'/>
– Yuugian
04.04.2013, 16:38
$ curl -s http://whatismyip.org | grep -o '\([[:digit:]]\{1,3\}\.\)\{3\}[[:digit:]]\{1,3\}'
– syntaxerror
01.02.2016, 04:40
curl -s http://whatismijnip.nl |cut -d " " -f 5
Замененный сайт с нидерландским языком, работающим один.
-s
опция, действительно необходимая в этом случае? Я попробовал им в своей мягкой фетровой шляпе 15 - колотят 4.2.10 (1), и это работало обоими способами.
– ztank1013
15.10.2011, 17:05
whatismyip.com
удалил бесплатный сервис проверить внешний IP. Так, я боюсь, что это больше не корректно. icanhazip.com
все еще работы.
– daSong
17.01.2013, 12:20
Так как whatsmyip.org и ifconfig.me были уже упомянуты:
curl -s icanhazip.com
curl
решения (хотя допустимый) все еще зависят от внешней библиотеки (libcurl
).
– HalosGhost
29.07.2014, 05:51
Если Вы хотите использовать HTTPS для предотвращения некоторых потенциальных ловушек:
_result=$(wget -qO- https://ipcheckit.com/)
_result="${_result##*Your IP address is<br><b>}"
printf '%s\n' "${_result%%</b></p>*}"
Вот другая альтернатива, которая зависит от хостов, кто бизнес-твердость вокруг управления динамическим IP скорее, что сайты "услуг общего пользования", которые могут уйти или изменить формат.
Для получения IP-адреса в сценарии просто сделайте:
external_ip=`dig +short xxx.no-ip.org`
Большой для использования в задании крона проверить, изменился ли динамический IP и некоторые записи конфигурации должны быть изменены.
Используйте завихрение для удара IP сервиса shtuff.it
curl -s https://shtuff.it/myip/short
Это всегда работает на меня, я использую его в своем носатом для получения моего IP-адреса.
wget -q -O - checkip.dyndns.org | sed -e 's/[^[:digit:]\|.]//g'
amazonaws
. Таким образом, если у Вас нет способа погуглить для него. (даже lynx
).
– syntaxerror
01.02.2016, 04:24
Я предпочитаю использовать curlmyip.com, Это столь же просто как:
curl curlmyip.com
Это коротко и просто помнить.
bash
— намерение OP — Вы не можете обойтись без -s
опция упоминается в других ответах.
– Serge Stroobandt
20.07.2014, 14:53
-s
переключатель делает выполняется это в "тихом" режиме, т.е. сообщения об ошибках не будут отображены. Таким образом, это сводится, как он хочет, чтобы его сценарий обработал ошибки. Сама команда возвратит IP-адрес так же надежно как использование -s
.
– Garrett Fogerlie
25.07.2014, 01:48
curl ident.me
OR
curl ifconfig.me
OR
curl tnx.nl/ip
OR
curl ipecho.net/plain
OR
curl ip.appspot.com
OR
curl whatismyip.akamai.com
OR
curl icanhazip.com
OR
curl wgetip.com
OR
curl ip.tyk.nu
OR
curl curlmyip.com
OR
curl corz.org/ip
OR
curl bot.whatismyipaddress.com
Так как я не полагаюсь ни на соединение, ни на службу, я использую следующий код, который пытается получить IP, используя различные службы (не стесняйтесь добавить больше):
# Get my ip address and put in a file
declare -a arr=("ipecho.net/plain" "ident.me" "tnx.nl/ip" "ip.appspot.com" "https://shtuff.it/myip/short/")
IP=$(curl -s --retry 3 --retry-delay 10 ipecho.net/plain)
while [ -z "$IP" ] # If no IP found yet, keep trying!
do
sleep 30
IP=$(curl -s --retry 3 --retry-delay 10 ${arr[$(( RANDOM % ${#arr[@]} ))]})
done
echo -n "$IP" > /root/clientIP.txt #puts ip address in clientIP.txt
echo "Our address is $IP"
Для добавления большей надежности (например если одна из служб изменит свой формат), вы можете проверить, что $IP
является действительным IP, используя следующую функцию :
# Verify that the parameter passed is an IP Address:
# http://zindilis.com/blog/2013/05/10/bash-check-that-string-is-ip.html
# @Author: Marios Zindilis
# @License: Creative Commons Attribution-ShareAlike 4.0 International License.
# @Date: 2013-05-10
function is_IP() {
if [ `echo $1 | grep -o '\.' | wc -l` -ne 3 ]; then
echo "Parameter '$1' does not look like an IP Address (does not contain 3 dots).";
exit 1;
elif [ `echo $1 | tr '.' ' ' | wc -w` -ne 4 ]; then
echo "Parameter '$1' does not look like an IP Address (does not contain 4 octets).";
exit 1;
else
for OCTET in `echo $1 | tr '.' ' '`; do
if ! [[ $OCTET =~ ^[0-9]+$ ]]; then
echo "Parameter '$1' does not look like in IP Address (octet '$OCTET' is not numeric).";
exit 1;
elif [[ $OCTET -lt 0 || $OCTET -gt 255 ]]; then
echo "Parameter '$1' does not look like in IP Address (octet '$OCTET' in not in range 0-255).";
exit 1;
fi
done
fi
return 0;
}
Я запускаю облачный сервис для своей семьи и сделал этот быстрый скрипт, который я запускаю в cron
каждое утро в 5, потому что я дешёвый и не куплю статический IP.
Он захватывает публичный IP и отправляет его по электронной почте моим пользователям. Сделал его электронным письмом в формате гиперссылки, чтобы моей маме не приходилось набирать порты или что-то еще. Может быть, кто-нибудь другой сможет использовать его.
#!/bin/bash
ipvariable=$(wget http://ipecho.net/plain -O - -q);
echo "Today the location is http://$ipvariable:123456/foldertheyreach" | mail -s "From your friendly cloud service provider" user1@someemail.com, user2@ect.com
У меня установить услугу, которая возвращает IP-адрес как JSON / XML или простой текст. Вы можете найти их здесь
То же самое URL с / json и / xml даст вам другие форматы
, если вы хотите, если вы хотите использовать HTTPS, вы можете использовать одни и те же URL с HTTPS префикс. Преимущество в том, что даже если вы на WiFi, вы получите общественный адрес.
Итак, простой псевдоним myip = "Curl https://ipof.in/txt " получит ваш IP
Это покажет текущий ip-адрес во всплывающем окне:
zenity --info --text "$(curl -s icanhazip.com)"
Обычный текстовый браузер w3m отлично подходит для бэша. Вы можете использовать grep
и tail
для сокращения ответа следующим образом:
w3m -no-cookie -dump "http://www.whatismyip.com/" | grep -A 1 -m 1 "Your IP:" | tail -n 1
ifcfg.me поддерживает:
curl ifcfg.me
nslookup . ifcfg.me
telnet ifcfg.me
ftp ifcfg.me
finger @ifcfg.me
IPv4 и IPv6, еще больше вещей с curl: ifcfg.me/?
ПРИМЕЧАНИЕ: Речь идет о внешнем IP-адресе (том, который виден серверам в Интернете при подключении к ним) - если вам нужен внутренний IP-адрес (тот, который используется вашим собственным компьютером для подключений, которые могут отличаться), см. ответ на этот вопрос .
dig +short myip.opendns.com @resolver1.opendns.com
или с использованием Externalip:
externalip dns
curl -s http://whatismyip.akamai.com/
или с использованием externalip:
externalip http
curl -s https://4.ifcfg.me/
или с использованием externalip:
externalip https
С помощью nc
команды:
nc 4.ifcfg.me 23 | grep IPv4 | cut -d' ' -f4
или с помощью экстернайпа:
externalip telnet
С помощью telnet
команды:
telnet 4.ifcfg.me 2>&1 | grep IPv4 | cut -d' ' -f4
echo close | ftp 4.ifcfg.me | awk '{print $4; exit}'
или с помощью экстернайпа:
externalip ftp
externalip dns
externalip http
externalip https
externalip telnet
externalip ftp
Существует множество вариантов различных серверов, обеспечивающих внешний IP, особенно через HTTP, размещенный здесь или в другом месте.
Я сделал бенчмарк, чтобы увидеть, если любой из них лучше, чем другие, и я был удивлен результатами. Например, один из наиболее рекомендуемых ifconfig.me почти всегда был самым медленным для меня, иногда на ответ уходило много секунд. Многие не работают по HTTPS или работают, но имеют недействительные сертификаты. Некоторые имеют очень непоследовательное время отклика.
Это источник моего скрипта с внешними штемпелями, который я использовал:
Вы можете запустить его самостоятельно, чтобы увидеть, какие службы, упомянутые здесь, стоит использовать:
wget https://raw.githubusercontent.com/rsp/scripts/master/externalip-benchmark
chmod a+x externalip-benchmark
./externalip-benchmark
Мои результаты, которые я получил на 2015-04-03 из Варшавы - адреса были изменены, чтобы защитить невинных:
Лучшее время отклика http:
0.086s http://ip.tyk.nu/ - answer='172.31.133.7'
0.089s http://whatismyip.akamai.com/ - answer='172.31.133.7'
0.091s http://tnx.nl/ip - answer='172.31.133.7'
0.117s http://ifcfg.me/ - answer='172.31.133.7'
0.156s http://l2.io/ip - answer='172.31.133.7'
0.317s http://ip.appspot.com/ - answer='172.31.133.7'
0.336s http://ident.me/ - answer='172.31.133.7'
0.338s http://ipof.in/txt - answer='172.31.133.7'
0.347s http://icanhazip.com/ - answer='172.31.133.7'
0.496s http://curlmyip.com/ - answer='172.31.133.7'
0.527s http://wgetip.com/ - answer='172.31.133.7'
0.548s http://curlmyip.com/ - answer='172.31.133.7'
0.665s http://bot.whatismyipaddress.com/ - answer='172.31.133.7'
0.665s http://eth0.me/ - answer='172.31.133.7'
1.041s http://ifconfig.me/ - answer='172.31.133.7'
1.049s http://corz.org/ip - answer='172.31.133.7'
1.598s http://ipecho.net/plain - answer='172.31.133.7'
Лучшее время отклика https:
0.028s https://curlmyip.com/ - answer=''
0.028s https://curlmyip.com/ - answer=''
0.029s https://l2.io/ip - answer=''
0.029s https://tnx.nl/ip - answer=''
0.072s https://whatismyip.akamai.com/ - answer=''
0.113s https://ipecho.net/plain - answer=''
0.117s https://ident.me/ - answer=''
0.207s https://ip.tyk.nu/ - answer='172.31.133.7'
0.214s https://ipof.in/txt - answer='172.31.133.7'
0.259s https://ifcfg.me/ - answer='172.31.133.7'
0.289s https://corz.org/ip - answer=''
0.436s https://ip.appspot.com/ - answer='172.31.133.7'
0.448s https://bot.whatismyipaddress.com/ - answer=''
0.454s https://eth0.me/ - answer=''
0.673s https://icanhazip.com/ - answer='172.31.133.7'
5.255s https://ifconfig.me/ - answer=''
10.000s https://wgetip.com/ - answer=''
(Примечание: есть некоторые быстрые ответы с пустым содержимым - они являются недействительными. )
Лучшее среднее время пинга:
10.210 //whatismyip.akamai.com/
36.820 //tnx.nl/ip
37.169 //ip.tyk.nu/
39.412 //ipof.in/txt
40.967 //ident.me/
41.257 //ipecho.net/plain
43.918 //ifcfg.me/
45.720 //l2.io/ip
64.749 //ip.appspot.com/
123.412 //corz.org/ip
134.245 //wgetip.com/
157.997 //icanhazip.com/
161.613 //curlmyip.com/
162.100 //curlmyip.com/
268.734 //ifconfig.me/
999999 //bot.whatismyipaddress.com/
999999 //eth0.me/
Вот результаты, которые я получил на 2015-04-03 из Амстердама:
Лучшее время отклика http:
0.021s http://ipecho.net/plain - answer='172.31.13.37'
0.027s http://tnx.nl/ip - answer='172.31.13.37'
0.035s http://whatismyip.akamai.com/ - answer='172.31.13.37'
0.039s http://ifcfg.me/ - answer='172.31.13.37'
0.045s http://l2.io/ip - answer='172.31.13.37'
0.142s http://ident.me/ - answer='172.31.13.37'
0.144s http://ipof.in/txt - answer='172.31.13.37'
0.150s http://ip.appspot.com/ - answer='172.31.13.37'
0.150s http://ip.tyk.nu/ - answer='172.31.13.37'
0.170s http://icanhazip.com/ - answer='172.31.13.37'
0.190s http://eth0.me/ - answer='172.31.13.37'
0.191s http://wgetip.com/ - answer='172.31.13.37'
0.301s http://curlmyip.com/ - answer='172.31.13.37'
0.330s http://bot.whatismyipaddress.com/ - answer='172.31.13.37'
0.343s http://curlmyip.com/ - answer='172.31.13.37'
0.485s http://corz.org/ip - answer='172.31.13.37'
3.549s http://ifconfig.me/ - answer='172.31.13.37'
Лучшее время отклика https:
0.004s https://curlmyip.com/ - answer=''
0.012s https://curlmyip.com/ - answer=''
0.012s https://tnx.nl/ip - answer=''
0.016s https://ipecho.net/plain - answer=''
0.071s https://whatismyip.akamai.com/ - answer=''
0.096s https://ifcfg.me/ - answer='172.31.13.37'
0.097s https://ident.me/ - answer=''
0.187s https://corz.org/ip - answer=''
0.187s https://ip.appspot.com/ - answer='172.31.13.37'
0.189s https://ip.tyk.nu/ - answer='172.31.13.37'
0.195s https://eth0.me/ - answer=''
0.253s https://l2.io/ip - answer=''
0.300s https://ipof.in/txt - answer='172.31.13.37'
0.324s https://bot.whatismyipaddress.com/ - answer=''
0.512s https://icanhazip.com/ - answer='172.31.13.37'
1.272s https://ifconfig.me/ - answer=''
10.002s https://wgetip.com/ - answer=''
Лучшее среднее время пинга:
1.020 //ipecho.net/plain
1.087 //whatismyip.akamai.com/
5.011 //ip.appspot.com/
6.942 //ident.me/
7.017 //ipof.in/txt
8.209 //tnx.nl/ip
11.343 //ip.tyk.nu/
12.647 //ifcfg.me/
13.828 //l2.io/ip
81.642 //icanhazip.com/
85.447 //wgetip.com/
91.473 //corz.org/ip
102.569 //curlmyip.com/
102.627 //curlmyip.com/
247.052 //ifconfig.me/
999999 //bot.whatismyipaddress.com/
999999 //eth0.me/
(999999 pings означает потерю 100% пакетов.)
Для сравнения здесь приведены времена, которые другие методы тестируют на 2015-06-16 из Варшавы и Амстердама.
Использование:
time dig +short myip.opendns.com @resolver1.opendns.com
обычно занимает (реальное время настенных часов) около:
На самом деле существует четыре резольвера, которые могут быть использованы таким образом:
Они все дают одинаковое время отклика в Варшаве и Амстердаме, но в других местах это может быть не так.
Использование 208.67.222.222 - IP resolver1.opendns.com вместо доменного имени быстрее:
, но может не работать в будущем, если IP когда-либо изменится (хотя это может быть маловероятно для хорошо известного DNS resolver - может быть, мне следует использовать IP в моем Externalip скрипте - пожалуйста, прокомментируйте).
Telnet с командой nc
или telnet
(см. выше) обычно берет:
(Заметной разницы между командами nc
и telnet
нет)
Все методы будут работать быстрее (особенно при первом запуске), когда вместо доменных имен сервисов будут использоваться IP-адреса (за исключением HTTP, который может использовать виртуальные серверы на базе хоста и не работать с голыми IP - не тестируется), но перестанут работать, когда сервисы поменяют IP-адрес, так что это может быть быстрее, но менее перспективно.
Если вы видите какие-то интересные результаты из вашего местоположения, или если вы считаете, что вместо тех, которые я выбрал, следует рекомендовать другие хосты, пожалуйста, напишите комментарий. Если какая-то важная услуга отсутствует, пожалуйста, прокомментируйте или отправьте сообщение на GitHub. Я хотел бы держать это сообщение в курсе того, какие сервисы лучше всего работают в данный момент.
В качестве альтернативы вы можете использовать STUN, который был изобретен для автоматизированного ответа на этот вопрос и широко используется в интернет-коммуникациях, например, SIP и WebRTC.
Используя stunclient (на debian/ubuntu выполните apt-get install stuntman-client
), просто сделайте:
$ stunclient stun.services.mozilla.com
Binding test: success
Local address: A.B.C.D:42541
Mapped address: W.X.Y.Z:42541
где A.B.C.D
- IP-адрес вашей машины в локальной сети, а W.X.Y.Z
- IP-адрес серверов, которые видят веб-сайты извне (и тот, который вы ищете). Используя sed
, вы можете свести приведенный выше вывод только к IP-адресу:
stunclient stun.services.mozilla.com |
sed -ne "s/^Mapped address: \(.*\):.*$/\1/p"
Для альтернативного поиска STUN с использованием только базовых инструментов командной строки см. мой ответ на AskUbuntu (предназначен для развлечения, не для производственного использования).
Amazon AWS
curl https://checkip.amazonaws.com
Образец вывода:
123.123.123.123
Мне это нравится, потому что:
Если после прочтения всех этих предложений вы захотите прочитать еще больше, вот возможно чрезмерно спроектированный сценарий Bash.
Он содержит список DNS- и HTTP-серверов, которые, похоже, работают нормально по состоянию на февраль 2017 года.
Если у вас есть dig
, он сначала пробует DNS, что почти на порядок быстрее, чем различные HTTP-сервисы.
Он выходит при первом полученном ответе.
Если у вас нет dig
или если все DNS-серверы вышли из строя, он затем пытается использовать службы HTTP, пока не получит ответ.
Серверы перечислены в алфавитном порядке, но перед использованием перемешиваются, чтобы не использовать всегда один и тот же сервер.
#!/bin/bash
## Get my external IP
timeout=2 # seconds to wait for a reply before trying next server
verbose=1 # prints which server was used to STDERR
dnslist=(
"dig +short myip.opendns.com @resolver1.opendns.com"
"dig +short myip.opendns.com @resolver2.opendns.com"
"dig +short myip.opendns.com @resolver3.opendns.com"
"dig +short myip.opendns.com @resolver4.opendns.com"
"dig +short -t txt o-o.myaddr.l.google.com @ns1.google.com"
"dig +short -4 -t a whoami.akamai.net @ns1-1.akamaitech.net"
"dig +short whoami.akamai.net @ns1-1.akamaitech.net"
)
httplist=(
4.ifcfg.me
alma.ch/myip.cgi
api.infoip.io/ip
api.ipify.org
bot.whatismyipaddress.com
canhazip.com
checkip.amazonaws.com
eth0.me
icanhazip.com
ident.me
ipecho.net/plain
ipinfo.io/ip
ipof.in/txt
ip.tyk.nu
l2.io/ip
smart-ip.net/myip
tnx.nl/ip
wgetip.com
whatismyip.akamai.com
)
# function to shuffle the global array "array"
shuffle() {
local i tmp size max rand
size=${#array[*]}
max=$(( 32768 / size * size ))
for ((i=size-1; i>0; i--)); do
while (( (rand=$RANDOM) >= max )); do :; done
rand=$(( rand % (i+1) ))
tmp=${array[i]} array[i]=${array[rand]} array[rand]=$tmp
done
}
## if we have dig and a list of dns methods, try that first
if hash dig 2>/dev/null && [ ${#dnslist[*]} -gt 0 ]; then
eval array=( \"\${dnslist[@]}\" )
shuffle
for cmd in "${array[@]}"; do
[ "$verbose" == 1 ] && echo Trying: $cmd 1>&2
ip=$(timeout $timeout $cmd)
if [ -n "$ip" ]; then
echo $ip
exit
fi
done
fi
# if we haven't succeeded with DNS, try HTTP
if [ ${#httplist[*]} == 0 ]; then
echo "No hosts in httplist array!" >&2
exit 1
fi
# use curl or wget, depending on which one we find
curl_or_wget=$(if hash curl 2>/dev/null; then echo "curl -s"; elif hash wget 2>/dev/null; then echo "wget -qO-"; fi);
if [ -z "$curl_or_wget" ]; then
echo "Neither curl nor wget found. Cannot use http method." >&2
exit 1
fi
eval array=( \"\${httplist[@]}\" )
shuffle
for url in "${array[@]}"; do
[ "$verbose" == 1 ] && echo Trying: $curl_or_wget "$url" 1>&2
ip=$(timeout $timeout $curl_or_wget "$url")
if [ -n "$ip" ]; then
echo $ip
exit
fi
done
Пример использования (я назвал сценарий myip
):
$ myip
Trying: dig +short -t txt o-o.myaddr.l.google.com @ns1.google.com
"151.101.65.69"
$ ip=$(myip); echo "IP = '$ip'"
Trying: dig +short myip.opendns.com @resolver1.opendns.com
IP = '151.101.65.69'
Закомментируйте подробную переменную
в верхней части сценария, чтобы не печатать используемый сервер.
Обновление: этот скрипт теперь также находится на Github, где я могу обновлять его при необходимости:
https://github.com/mivk/myip
Использование DNS-запроса даже за NAT-маршрутизатором, транслирующим DNS-адреса, может работать:
$ dig +short -t txt o-o.myaddr.l.google.com @ns1.google.com | cut -d'"' -f2
x.y.z.t
или вместо этого вы можете использовать метод HTTP-запроса:
$ curl -s ipinfo.io/ip
x.y.z.t
Если у кого-то из вас есть веб-сервер -с выходом в Интернет, вы можете просто создать простую страницу, на которой будет отображаться IP-адрес запрашивающей стороны, например. в PHP:
<?php
echo $_SERVER['REMOTE_ADDR'];
?>
Разверните это на своем сервере. например. в http://mydomain.com/whatismyip.php
Затем используйте стандартный трюк с завитком, чтобы получить его:
curl -s http://mydomain.com/whatismyip.php
Обратите внимание, что если ваш сервер выполняет какие-либо перенаправления (, например, с HTTP на HTTPS ), вы получите ответ о перенаправлении, а не ваш IP-адрес. Поэтому правильно обращайтесь с запросом на завивание.
Преимущество такого подхода в том, что сервис не будет двигаться или исчезать из-под вас, как это часто бывает с бесплатными сервисами. Недостаток, очевидно, в том, что он, скорее всего, будет медленнее, если только у вас нет высококлассного -хостинга.
Только ip.tyk.nu вернул правильный IP по http, без https. Вот еще несколько http-сайтов, которые возвращают наш общедоступный IP-адрес и могут использовать https. Я узнал здесь, что использование https вместо http для беспроводной связи позволит обойти изменение IP-адреса провайдером, как сказали несколько человек. Эрвин Хоффман добавил «кривые» зашифрованные DNS в dnscache, что я мог бы попробовать с помощью dig, так как он у меня есть.
myip ()Функция оболочки для просмотра списка http-сайтов или использования https:
# ~/bin/.bash/.ifaces https://pastebin.com/DiPUdqPJ
myip() {
[[ "$1" =~ -s ]] && s='https://' || s=''
( for site in ipaddr.pub/cli ipecho.net/plain icanhazip.com ifconfig.me \
ipconfig.in/ip ident.me bot.whatismyipaddress.com diagnostic.opendns.com/myip \
checkip.amazonaws.com trackip.net/ip api.ipify.org tnx.nl/ip ip.tyk.nu \
l2.io/ip wgetip.com
do echo "$site "
wget -qO- ${s}$site
echo
done
wget -qO- ${s}checkip.dyndns.org |\
sed -n -E '/IP Address/s/^.*:[\t ]+([^<]+).*$/checkip.dyndns.org \n\1/p' ) |\
sed -n -E '/^$/d;H;${g;s/^[\n]+//;s/( )\n/ /g;p;}'
wget -qO- ${s}ipinfo.io | sed '1s/.*/ipinfo.io:/;$d;'
}
myip (without https):
ipaddr.pub/cli 166.137.143.2
ipecho.net/plain 166.137.143.2
icanhazip.com 166.137.143.2
ifconfig.me 166.137.143.2
ipconfig.in/ip 166.137.143.2
ident.me 166.137.143.2
bot.whatismyipaddress.com 166.137.143.2
diagnostic.opendns.com/myip 166.137.143.2
checkip.amazonaws.com 166.137.143.2
trackip.net/ip 166.137.143.2
api.ipify.org 166.137.143.2
tnx.nl/ip 166.137.143.2
ip.tyk.nu 107.77.201.2 (without https but this one gets it)
l2.io/ip 166.137.143.2
wgetip.com 166.137.143.2
checkip.dyndns.org 166.137.143.2
ipinfo.io:
"ip": "166.137.143.2",
"hostname": "mobile-166-137-143-2.mycingular.net",
"city": "Dallas",
"region": "Texas",
"country": "US",
"loc": "32.7831,-96.8067",
"org": "AS20057 AT&T Mobility LLC",
"postal": "75270",
"timezone": "America/Chicago",
"readme": "https://ipinfo.io/missingauth"
myip -s (with https):
ipaddr.pub/cli 107.77.201.2
ipecho.net/plain 107.77.201.2
icanhazip.com 107.77.201.2
ifconfig.me 107.77.201.2
ipconfig.in/ip 107.77.201.2
ident.me 107.77.201.2
bot.whatismyipaddress.com 107.77.201.2
diagnostic.opendns.com/myip 107.77.201.2
checkip.amazonaws.com 107.77.201.2
trackip.net/ip 107.77.201.2
api.ipify.org 107.77.201.2
tnx.nl/ip 107.77.201.2
ip.tyk.nu 107.77.201.2
l2.io/ip 107.77.201.2
wgetip.com 107.77.201.2
ipinfo.io:
"ip": "107.77.201.2",
"hostname": "mobile-107-77-201-2.mobile.att.net",
"city": "Dallas",
"region": "Texas",
"country": "US",
"loc": "32.7831,-96.8067",
"org": "AS20057 AT&T Mobility LLC",
"postal": "75270",
"timezone": "America/Chicago",
"readme": "https://ipinfo.io/missingauth"
вы можете сделать это, используя только bash вот так
exec 3<>/dev/tcp/icanhazip.com/80
echo -e 'GET / HTTP/1.0\r\nhost: icanhazip.com\r\n\r' >&3
while read i
do
[ "$i" ] && myip="$i"
done <&3
echo "$myip"
bash открывает TCP-сокет для icanhazip и отправляет HTTP-запрос, IP-адрес возвращается в последней непустой -строке возвращаемых данных. (предыдущие строки являются заголовками http)
Это позволяет избежать использования HTTP-клиента, такого как wget или curl.
Все приведенные выше ответы предполагают, что локальный компьютер имеет доменное имя, которое может быть разрешено DNS-сервером.
Этот ответ поможет, если
Это можно использовать в сценарии оболочки:
# Determine relevant network interface (e.g. eth0 on Linux, en0 on Mac)
INTERFACE=`ifconfig | grep -Eo '^e[a-z]+0: flags=.*' | grep -Eo '^e[a-z]+0'`
# Determine the external ip on this interface
HOSTIP=`ifconfig $INTERFACE | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*'`
Однако не работает в Windows.
myip.opendns.com
в Гуглит Общественность DNS? – Kannan Mohan 26.10.2014, 07:11curl http://canhazip.com
. Посмотрите, что askubuntu.com/a/427092/2273 – Adam Monsen 10.03.2015, 23:09