Парсинг выхлопа whois (как вытащить страну?)

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
AlexYeCu
Сообщения: 1137
ОС: fedora

Парсинг выхлопа whois

Сообщение AlexYeCu »

Знает ли кто-нибудь более-менее универсальный способ вытаскивания кода страны из выхлопа whois, с учётом всего возможного разнообразия этих выхлопов? Т.е. мне требуется, чтобы на выходе всегда был двухбуквенный код страны.
Пока пользуюсь вот такой конструкцией, но она довольно неряшлива:

Код: Выделить всё

COUNTRY=$(whois $IP | grep -i -m 1 country | cut  -c17-32)

Может у кого-то есть более аккуратное и универсальное решение?
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Парсинг выхлопа whois

Сообщение drBatty »

$

whois 109.172.13.241 | sed -rn 's/^country:\s+(\w+)\s*$/\1/p' RU


как-то так.


AlexYeCu писал(а):
21.01.2013 13:29
grep -i

а что, бывает РаЗнЫмИ буквами? Тогда добавьте перед p модификатор i.

ЗЫЖ или вместо c напишите [Cc]
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian

Re: Парсинг выхлопа whois

Сообщение rm_ »

Это просто лицорука. Зачем лезть за страной во whois?
не знаю как в вашей ОС, а у нас есть http://packages.debian.org/wheezy/geoip-bin

Код: Выделить всё

$ geoiplookup 109.172.13.241
GeoIP Country Edition: RU, Russian Federation

из этого уже регэкспом элементарно.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Парсинг выхлопа whois

Сообщение drBatty »

rm_ писал(а):
21.01.2013 18:06
$ geoiplookup 109.172.13.241

а какая разница? парсить всё равно придётся. И код будет такой-же по сложности и длине. Или я чего-то не знаю?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian

Re: Парсинг выхлопа whois

Сообщение rm_ »

drBatty писал(а):
21.01.2013 18:08
rm_ писал(а):
21.01.2013 18:06
$ geoiplookup 109.172.13.241

а какая разница? парсить всё равно придётся. И код будет такой-же по сложности и длине. Или я чего-то не знаю?

Во-первых вывод не меняющейся без вашего ведома утилиты всегда выглядит одинаково, а удалённые whois-сервера могут быть кто-их-знает какими, и выдавать ответы в непредсказуемом формате и с различным составом и названиями полей.
Во-вторых выборка информации из локально лежащей БД стран/подсетей выполняется мгновенно, в отличие от whois'а, лезти за которым нужно порой за тридевять земель.
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Парсинг выхлопа whois

Сообщение SLEDopit »

drBatty писал(а):
21.01.2013 18:08
а какая разница? парсить всё равно придётся. И код будет такой-же по сложности и длине. Или я чего-то не знаю?

Код: Выделить всё

 $ for i in me ru us co.uk de com net ae li ; do
echo -e "\ngoogle.$i" ;
whois google.$i | grep -i country ; done

google.me
Trademark Country:BX
Registrant Country/Economy:US
Admin Country/Economy:US
Tech Country/Economy:US

google.ru

google.us
Registrant Country:                          United States
Registrant Country Code:                     US
Administrative Contact Country:              United States
Administrative Contact Country Code:         US
Billing Contact Country:                     United States
Billing Contact Country Code:                US
Technical Contact Country:                   United States
Technical Contact Country Code:              US

google.co.uk

google.de
CountryCode: US
CountryCode: US

google.com

google.net

google.ae

google.li
и

Код: Выделить всё

 $ for i in me ru us co.uk de com net ae li ; do echo -e "\ngoogle.$i" ; geoiplookup google.$i  ; done

google.me
GeoIP Country Edition: US, United States

google.ru
GeoIP Country Edition: US, United States

google.us
GeoIP Country Edition: US, United States

google.co.uk
GeoIP Country Edition: US, United States

google.de
GeoIP Country Edition: US, United States

google.com
GeoIP Country Edition: US, United States

google.net
GeoIP Country Edition: US, United States

google.ae
GeoIP Country Edition: US, United States

google.li
GeoIP Country Edition: US, United States
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian

Re: Парсинг выхлопа whois

Сообщение rm_ »

SLEDopit
вы в курсе разницы между доменом и IP-адресом?

у автора в первом посте входные данные $IP, а не домен.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Парсинг выхлопа whois

Сообщение drBatty »

rm_
ладно, убедили.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Парсинг выхлопа whois

Сообщение SLEDopit »

rm_, да спасибо, что-то я упустил из вида. Тут всё получше:

Код: Выделить всё

 $ for i in me ru us co.uk de com net ae li ; do echo -e "\n$(host google.$i|sed 's/.*ess //;q')" ; geoiplookup $(host google.$i|sed 's/.*ess //;q')  ; done

74.125.232.49
GeoIP Country Edition: US, United States

74.125.232.55
GeoIP Country Edition: US, United States

74.125.232.52
GeoIP Country Edition: US, United States

74.125.232.63
GeoIP Country Edition: US, United States

74.125.232.56
GeoIP Country Edition: US, United States

173.194.47.142
GeoIP Country Edition: US, United States

74.125.232.50
GeoIP Country Edition: US, United States

74.125.232.56
GeoIP Country Edition: US, United States

74.125.232.55
GeoIP Country Edition: US, United States
vs

Код: Выделить всё

 $ for i in me ru us co.uk de com net ae li ; do echo -e "\n$(host google.$i|sed 's/.*ess //;q')" ; whois $(host google.$i|sed 's/.*ess //;q') | grep -i country ; done

74.125.232.50
Country:        US

74.125.232.63
Country:        US

74.125.232.52
Country:        US

74.125.232.63
Country:        US

74.125.232.55
Country:        US

173.194.47.169
Country:        US

74.125.232.48
Country:        US

74.125.232.55
Country:        US

74.125.232.63
Country:        US
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Парсинг выхлопа whois

Сообщение drBatty »

SLEDopit
ну я не знаю - если взять IP этих доменов, то всё работает.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
AlexYeCu
Сообщения: 1137
ОС: fedora

Re: Парсинг выхлопа whois

Сообщение AlexYeCu »

rm_ писал(а):
21.01.2013 18:06
Это просто лицорука. Зачем лезть за страной во whois?
GeoIP


Слона-то я и не приметил. Переделаю с GeoIP тогда, с whois главная проблема как раз непостоянство выхлопа — чего там только не прилетает.
Спасибо сказали: