LINUX.ORG.RU

bash: Сведения по адресу (ip): cтрана и имя сети. Можно ли без expect?

 , ,


0

1

Привет.

Подскажите, пожалуйста, как можно упростить получение «страны» и «имени сети» по адресу (ip). Кроме как с expect ничего не получается. Пока только так, с адресом для примера:

#! /bin/bash
ip="46.166.148.155"
prov_cn="
spawn telnet whois.ripe.net 43
expect {
    \"% See http://www.ripe.net/db/support/db-terms-conditions.pdf\" {
    send \"$ip\n\"
    }
}
interact
"
echo "    "`expect -c "$prov_cn" | grep -e "country" -e "netname" | awk -F"[ :]+" '{ print $2 }'`
Можно ли как-нибудь без expect получить необходимые данные об адресе? Спасибо



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

https://github.com/bertschneider/clj-geoip

user> (use 'clojure.pprint)
nil
user> (require ['de.bertschneider.clj-geoip.core :refer :all])
nil
user> (def mls (multi-lookup-service))
#'user/mls
user> (pprint (lookup mls "87.152.91.74"))
{:timezone "Europe/Berlin",
 :ip "87.152.91.74",
 :area-code 0,
 :dma-code 0,
 :city "Lindlar",
 :country-code "DE",
 :metro-code 0,
 :longitude 7.366501,
 :postal-code "51789",
 :region "Nordrhein-Westfalen",
 :org "AS3320 Deutsche Telekom AG",
 :latitude 51.033203,
 :country-name "Germany"}

прикручиваешь чтение stdin выхлоп в stdout компилишь в jar и пользуешь, работы на 10 минут.

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

Спасибо. Java - это круто, но я на свой buffalo terastation это дело не прикручу никак. Испытания от умельцев на «родном» форуме уже были, давно, где-то в конце 90-х - полная ерунда вышла. Да и позабыто давно. awk, grep, telnet и даже expect на моём древнем железе ещё есть, а вот с тем же perl-ом уже беда. Ну и java - туда же.. Такая печаль.

gazanit
() автор топика

telnet на netcat или socat замени и можно будет без expect. А ещё можно просто команду whois использовать и парсить её вывод.

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

Только тем, что это не везде есть. Да и если есть, то синтаксис разный. Тут работает, там не работает — это не веселит. Тот же curl выглядит симпатичнее:

# curl ipinfo.io/46.166.148.155
{
  "ip": "46.166.148.155",
  "city": "",
  "region": "",
  "country": "NL",
  "loc": "52.3824,4.8995",
  "org": "AS43350 NForce Entertainment B.V."
}
Но найти ресурс с «именем сети» мне не удалось.

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

Да, нет, конечно. )) Мне нужны только «страна» и «имя сети». Имеющийся whois по неизвестным мне причинам оказался очень ненадёжным. Практически ни по какому адресу сведения не отдаёт. Разумеется, староват. Вот так и приходится опрашивать что-нибудь в сети, чтоб то «что-нибудь» отдало мне вожделенные «страну» и «имя сети».

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

Подыми свой сервис с базой от MaxMind, там делов на 5 минут :) А базу в сети можно взять :)

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

Что же... Покажу чем не устроило. Сбросил один из своих NAS-ов, для чистоты эксперимента. И вот что получается с этим whois:

root@TS-TGLBAE:~# uname -a
Linux TS-TGLBAE 2.4.20_mvl31-ppc_terastation #36 Fri Aug 24 18:20:13 JST 2007 ppc unknown
root@TS-TGLBAE:~# /opt/bin/whois -h whois.ripe.net 46.166.148.155 | awk '$1 == "country:" || $1 == "netname:" { print($2) }'
bash: whois: command not found
root@TS-TGLBAE:~# ipkg update
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable//Packages
Updated list of available packages in /usr/lib/ipkg/lists/nslu2-cross-stable
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/unstable//Packages
Updated list of available packages in /usr/lib/ipkg/lists/nslu2-cross-unstable
Successfully terminated.
root@TS-TGLBAE:~# ipkg install whois
Installing whois (5.0.15-1) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/unstable//whois_5.0.15-1_powerpc.ipk
Configuring whois
Successfully terminated.
root@TS-TGLBAE:~# /opt/bin/whois -h whois.ripe.net 46.166.148.155 | awk '$1 == "country:" || $1 == "netname:" { print($2) }'
getaddrinfo(whois.ripe.net): Bad value for ai_flags
root@TS-TGLBAE:~# /opt/bin/whois 46.166.148.155
getaddrinfo(whois.ripe.net): Bad value for ai_flags

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

Ясно. А awk на твоем NAS'е умеет так: awk 'BEGIN { whoIs = "/inet/tcp/0/whois.ripe.net/43" ; print "46.166.148.155" |& whoIs ; while ((whoIs |& getline) > 0) if ($1 == "country:" || $1 == "netname:") print($2) ; close(whoIs); }'?

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

Да, так получается..

root@TS-TGLBAE:~# awk 'BEGIN { whoIs = "/inet/tcp/0/whois.ripe.net/43" ; print "46.166.148.155" |& whoIs ; while ((whoIs |& getline) > 0) if ($1 == "country:" || $1 == "netname:") print($2) ; close(whoIs); }'
NFORCE_ENTERTAINMENT
NL
Огромное спасибо!

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