Для тех, кто не любит много читать, пишу сразу свое решение проблемы:
wget -q -O /tmp/getmyip.php http://php.kichrum.org.ua/getmyip.php; cat /tmp/getmyip.php; echo ""; rm /tmp/getmyip.php
А уже под катом я расскажу, как эта строчка работает, как я к этому пришел, и предложу альтернативный вариант, более удобный.
Рассмотрим для начала, какие способы можно использовать в других, более заурядных случаях, ведь извращаться так каждый раз совершенно не обязательно.
Если компьютер не за NAT, то узнать свой IP можно стандартными способами: поможет команда ifconfig в linux или ipconfig (Win+R => cmd) в Windows. Эти команды не способны показать больше информации, чем им нужно. А в случае с локальной сетью, где на несколько компьютеров положен один внешний IP, через который все и ходят в интернет, стандартные команды выдадут как раз тот самый внутренний (локальный) IP адрес. По нему к тебе можно достучаться только находясь внутри твоей локальной сети, а сервера в интернете видят тебя как совершенно другого человека. Или как "несколько" других человек, если быть точным.
Если компьютер имеет GUI, то решение ещё проще. Для этого даже командная строка не понадобится. Я обычно использую для этих целей сайтик myip.ru или 2ip.ru. Последний, кстати, позволяет не только твой адрес узнать, но и много других вещей, и даже потестить скорость интернета. GUI позволяет открыть их в твоем любимом браузере (даже в шестом IE) и просто посмотреть.
Если есть полноценный доступ к командной строки или по SSH и установлен консольный браузер lynx, то по этим сайтам можно пройтись и через него. Но для меня, как не частого пользователя этим браузером, это не просто неудобно, но и даже сложновато. Попробуй через консоль найти свой IP среди кучи посторонней информации, и это еще хорошо, если не придется с кодировкой бороться.
Решение проблемы
Ясно было, что без внешнего сервера не обойтись, ведь важно получить именно тот адрес, под каким меня видят "левые" сервера. В общем, предыстория на этом заканчивается.
Дальше я зашел на сервер сервер блога и создал файлик getmyip.php, который содержит только одну строчку:
<?php echo $_SERVER['REMOTE_ADDR']; ?>
Она просто и без всяких примочек выводит тот IP, с которого ты обратишься к страничке. А нужно ли больше (например, описание сервиса)? Конечно же нет, ведь мы будем получать результат скрипта в консоль (или в другие программы), а поэтому лучше при надобности написать что угодно самостоятельно уже в программе, которая эту страничку будет использовать. Не rest api конечно, но уже что-то.
Теперь нужно в консоле посмотреть, что выводит нам эта страничка. Долго думать не пришлось: почему бы не скачать результат скрипта просто в файл? Тут же выведу его в консоль и удалю. Ниже листинг того же самого, только с комментариями.
wget -q -O /tmp/getmyip.php http://php.kichrum.org.ua/getmyip.php # - скачиваем страничку во временный файл. В файле только одна строчка - в ней и есть наш IP-адрес. Параметр -q скрывает от нас ненужную информацию о процессе скачивании страницы, а -O позволяет задать адрес временного хранения файла
cat /tmp/getmyip.php # - выводим содержимое скачанного файла в консоль
echo "" # - ну красивей, если дальше будем работать с новой строки, разумеется =)
rm /tmp/getmyip.php # - удаляем скачанный файл, дабы не мусорить
Удобство скрипта в том, что я даже не знаю, на каких nix-системах с дефолтными настройками он не будет работать. Что уж говорить об Ubuntu, которая, если не ошибаюсь, одна из самых популярных. Но его можно сделать ещё удобнее. Запусти команду, которую я днем опубликовал в свой Twitter:
echo "alias myip='wget -q -O /tmp/getmyip.php http://php.kichrum.org.ua/getmyip.php; cat /tmp/getmyip.php; echo \"\"; rm /tmp/getmyip.php'" >> ~/.bashrc
То есть просто добавляем строчку создания алиаса в скрипт конфигурации консоли. Теперь после перезапуска терминала (или при повторном входе на сервер) достаточно будет воспользоваться командой myip, чтоб быстро получить свой внешний IP-адрес прямо в консоль, находясь за NAT (и не только). Больше не придется запоминать длинные конструкции, доменные имена, смотреть рекламу на сайтах. Достаточно просто воспользоваться короткой командой myip. Давай вместе делать жизнь проще.
И наконец предостережение. Лучше создай аналогичную php-страничку самостоятельно - вдруг внезапно рекламное место на моем сервере выкупят. Реклама в терминале - это же новый уровень! ;)
29 коментарів:
А не простіше ось так: curl -s http://php.kichrum.org.ua/getmyip.php
Про вантузи не знаю, але curl є в будь-якому лінуксі та макос.
MrGALL, ты как всегда чертовски прав! Признаться, я пробовал и этот вариант (пусть и позже wget'a), но на моем debian-5.0-x86 curl почему-то не был предустановлен и я решил не рисковать с "универсальностью". Но спасибо. Большинству читателей, думаю, понравится твой вариант больше - полностью оправдано =)
Kichrum,
В моїй системі (OS X 10.7) все навпаки — curl є в комплекті а от wget треба доставляти (для прикладу, з портів).
MrGALL, сейчас проверил на работе, на убунте оказывается тоже нету curl =) Поставить не сложно, но всё же. Выходит, твое решение прокатит как стандартное для OS X, а со статьи - для линукса ;)
echo $(wget -qO- http://php.kichrum.org.ua/getmyip.php)
Vladimir Smirnoff, вот о том, что вместо имени файла можно написать знак "-", дабы отправить поток сразу в stdout не знал, спасибо. Ну я еще только учу nix, всего пару месяцев знакомства, простишь? ;)
Круто, раньше такого не знал! Работает, проверил!
Действительно работает, спасибо за совет!
большое спасибо.
Примите и от меня благодарность за статью.
отличная тема,обязательно применю.
А можт кто и под винду батничек напишет?))
Artskill, для извращенцев:
> telnet kichrum.org.ua 80
GET /getmyip.php HTTP/1.0
Host: php.kichrum.org.ua
[enter][enter]
Но зачем в винде для этого юзать консоль? Лучше тогда уже зайти через ИЕ)) или делать нормальную прогу.
Про ИЕ вообще лучше забыть (как же я его ненавижу...), как про страшный сон. Спасибо за материал, интересный подход к решению (простой?) задачи.
Интересная статья, надо опробовать все способы. :)
я обычно пользуюсь онлайн сервисами, так удобнее
Да, онлайн сервисами удобнее. Но идея красивая. Автору респект
Думаю,для моего хорошего друга данная информация пригодится,интересуется такого вида примочками.Скину этот адрес.А я уж не силен в этом.Извините!
Оригиальная идея, хотя конечно это вариант для настоящих гурманов. Большинство всё равно пользуется сервисами
Я так же нашла недавно вот эту страницу http://modern-lady.ru/ там есть еще несколько вариантов!
Мануал очень интересный. На мой взгляд, самая ценная информация – это та, которая основана на собственном опыте.
Что-то не заработало. :( Надо будет ещё раз попробовать.
Все работает)) офигенно!)
сенкс))
Всё работает, спасибо
спасибо за информацию
круто спасибо!
Ммм, весьма, весьма познавательно. Над будет попробовать.
Странно, но мне было интересно у тебя в гостях. Спасибо!
нихуя не понял :(
Дописати коментар