LINUX.ORG.RU
решено ФорумAdmin

Как узнать свой внешний ip-адресс или помогите с регуляркой

 


4

1

Нужно через консоль узнать свой ip адресс. Вначале я реализовал это как то так

ip=$(curl ifconfig.me/ip)
echo $ip
Но выяснив что сервис очень медленный а иногда и вовсе отказывается грузится я начал искать следующее решение.

Спустя несколько минут у меня получилось нечто такое

ip=$(curl http://internet.yandex.ru/ | grep -P '([0-9]{1,3}\.){3}[0-9]{1,3}')
echo $ip

Но на выхлопе я получаю :Мой IPv4: 8.8.8.8

Внимание вопрос: Как получить исключительно цифры, без первых двух слов?

Нужно как то вклеить \< означающию начало слова, но у меня что то не получается.

P.s. вся проблема кроется в том что я прочитал только первые 30 страниц книги о регулярках

★★★★★

Сам в регулярках не силен, но знаю параметры grep

ip=$(curl http://internet.yandex.ru/ | grep -o -E '([0-9]{1,3}\.){3}[0-9]{1,3}')
echo $ip
На выходе 8.8.8.8 без слов

menzoberronzan
()
Ответ на: комментарий от snaf
grey$ time dig +short myip.opendns.com @resolver1.opendns.com
1.69.51.1

real	0m0.054s
user	0m0.003s
sys	0m0.003s
grey$ time curl curlmyip.com
1.69.51.1

real	0m0.478s
user	0m0.004s
sys	0m0.004s 

Но не самый быстрый

GreyDoom ★★★★
()
Последнее исправление: GreyDoom (всего исправлений: 1)
Ответ на: комментарий от GreyDoom

Но не самый быстрый

А в моём случае еще придётся устанавливать curl или dnsutils. Сейчас проведу тэсты и найду самый быстрый способ)

snaf ★★★★★
() автор топика
Ответ на: комментарий от snaf

А в моём случае еще придётся устанавливать curl или dnsutils.

Можно и без них обойтись. Посредством башевских /dev/tcp или /dev/udp..

naszar
()
Ответ на: комментарий от GreyDoom

Хм, у меня наоборот:

dig +short myip.opendns.com @resolver1.opendns.com  0.01s user 0.01s system 0% cpu 5.264 total

curl curlmyip.com  0.00s user 0.01s system 0% cpu 0.907 total

float
()
Ответ на: комментарий от float

повторные запросы сделай, когда кэширование прошло уже

GreyDoom ★★★★
()
Ответ на: комментарий от snaf

Как-то так:

exec 3<>/dev/tcp/curlmyip.com/80 && echo -e "GET /\n" >&3 && tail -n 1 <&3 && exec 3<&-
вместо курла
 printf '%d.%d.%d.%d\n' `exec 3<>/dev/udp/208.67.222.222/53 && echo -n -e '\\x30\\xa1\\x01\\x20\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x01\\x04\\x6d\\x79\\x69\\x70\\x07\\x6f\\x70\\x65\\x6e\\x64\\x6e\\x73\\x03\\x63\\x6f\\x6d\\x00\\x00\\x01\\x00\\x01\\x00\\x00\\x29\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00' >&3 && head -c 50 <&3|od -N 4 -An -t x1|sed  's/ //g'|sed  -r 's/(..)/0x\1 /g' && exec 3<&-`
завместо дига, кстати быстрее первого 0.246s супротив 0.640s

naszar
()
Последнее исправление: naszar (всего исправлений: 1)

Не мучай попу с яндексом и используй http://checkip.dyndns.org/ — единственное, для чего он остался годен.

beastie ★★★★★
()
Ответ на: комментарий от snaf

Какя «штука»? Баш? curlmyip.com? resolver1.opendns.com? Последние два, точно нет, про баш не знаю. Вроде в гугле дают много всяких показывателей твоего IPv6 адреса. Если бяда с курлом и баш не умеет IPv6, то можно заюзать, например netcat.

naszar
()
Ответ на: комментарий от snaf

Дык, я же сказал, что нет. Как то к чему нельзя обратится по IPv6 может узнать твой IPv6 адрес (для resolver1.opendns.com нету ААА записи)? Кстати если IPv6 не нативный, а через всякие тоннели, то есть правила по которым адрес образуется и его можно высчитать из IPv4.

naszar
()

lynx --source http://echoip.com

Lavos ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.