Fórumok
Van egy egyszerű kis scriptem a saját külső IP címem kinyerésére:
#! /bin/bash
wget http://checkip.org -q -O - | grep "IP\ Address" |awk -F "[ \t<>]" '{print $8}'
Most már másodjára szaladok bele abba, hogy egy-egy helyen nem működik - olyan is van ahol hónapokig működött, aztán nem?
Ha csak simán a "wget http://www.checkip.org" parancsot lefuttatom ezt kapom:
--2011-11-22 00:29:55-- http://www.checkip.org/
Resolving www.checkip.org... failed: Name or service not known.
wget: unable to resolve host address "www.checkip.org"
Ha pingelem, akkor semmi gond ...
Érti ezt valaki?
Én nem :(
Hozzászólások
Azt írja, hogy: "Name or service not known", illetve "unable to resolve host address "www.checkip.org"". Ahogy olvasható, névfeloldási probléma, tehát a DNS környékén nézz körül.
Az biztos, de hogyan? Hogy lehet hogy a ping szó nélkül megtalálja a wget meg síránkozik? Más resolv.conf -t használ?
* Én egy indián vagyok. Minden indián hazudik.
Milyen DNS szervereket használsz? Szolgáltatói vagy saját? Mindegyikről kapsz választ? Ha szolgáltatói, akkor az még mindig a hivatalosan ajánlott, és nem változott az IP-je? Nincs rövid TTL-es mágia valamelyiken? (A checkip.org és a www.checkip.org A-rekordjánal TTL-je 60.)
És mi lenne ha összedobnál magadnak egy minimal php-t ami kidobja, hogy melyik IP-ről hívták meg?
Mint pl.: http://prociweb.hu/ip
Sokkal egyszerűbb:)
"Sokkal egyszerűbb"
Ehhez ugye kellene egy olyan külső PHP-s webtárhely, amit IP alapján is meg lehetne szólítani, mert úgy biztosan nem jönne elő az "unable to resolve host address" hiba. Szerintem egyéb okok miatt is jobban jár, ha a névfeloldás anomáliájának jár utána.
PHP -ben eléggé zöld vagyok. Egy kis minimalista parancssori környezetben pedig nem éppen a PHP az első amit telepítek ahhoz hogy a saját IP címemet kinyerjem.
Egyébiránt ez is hasznos lehet. Jó hogy leírtad. Köszönöm!
* Én egy indián vagyok. Minden indián hazudik.
Ez igaz, de én inkább azt felételeztem, hogy kellő számban látogatják az említett oldalt ahhoz, hogy olykor hálózati gondokkal küszködjön, vagy a névszervük. Így ha egy saját stuffot beújít, kizárva a külső hiba.
(Persze a névfeldoldás még ott lehet:))
nekem eddig ez volt (innen a fórumról):
A tied gyorsabbnak tűnik.
wget -q checkip.dyndns.org -O- | sed -n 's/.*: \([0-9\.]\+\).*/\1/p'
wget -O - http://dns.cvk.hu 2> /dev/null | head -n 1
________________
Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz, 4 Gb ram, x86_64 3.0.6-gentoo
"Érti ezt valaki?"
Én igen. Szerintem 1000%, hogy elrontottad a serialt, ezért nem minden dns szerver cachelte be, így attól függően, hogy honnan kéred, megy vagy nem. (Ha a legutóbbi módosítást megelőzően be volt cachelve, akkor nem megy, ha nem volt még lekérve, akkor igen).
Ellenőrzés, hogy tényleg így van-e:
host -t SOA checkip.org.
host -t ANY www.checkip.org.
Ezt több helyről, egy olyanról, ahol jó, meg egy olyanról, ahol nem. A két kimenetnek egyezni kéne, de nem fog.
"Szerintem 1000%, hogy elrontottad a serialt"
Meglepne, ha a checkip.org illetve a www.checkip.org módosítását véghez tudná vinni. Akkor minden bizonnyal nem itt merülne fel ez:
Registrant Name: No-IP.com, Domain Operations
Registrant Organization: Vitalwerks Internet Solutions, LLC
Admin Name: No-IP.com, Domain Operations
Tech Name: No-IP.com, Domain Operations
Tech Organization: Vitalwerks Internet Solutions, LLC
Talán a no-ip.com képviselője nem ebben a fórumban tenné fel a kérdést.
"elrontottad a serialt, ezért nem minden dns szerver cachelte be"
Ez így ebben a formában...
Hehe, ezt jól benéztem, azt hittem, a checkip.org annak a domainnek a neve, amit csekkelni akar :-D Eszembe sem jutott, hogy létezhet...
Ettől függetlenül a dns hibát továbbra is fenntartom, biztos, hogy nem egyenletesen lett terítve a zóna, azért ez eléggé beszédes:
Resolving www.checkip.org... failed: Name or service not known.
Háááát ... úgy tűnik a DNS kiszolgálók is gyenge pontom (érdekes az utóbbi időkig ilyen gondom nem volt, pedig lassan 10 éve raktam össze és üzemeltetek néhány Linuxot és windowst). Ha valamit tudok pingelni név szerint azt eddig tudtam használni is (wget, ssh stb.), itt valami változott amiről én lemaradtam :(
Ahol most éppen nem működik a néveloldás még host parancs sincs :( Most néztem meg, a /usr/bin/host parancsot a bind9-host csomag tartalmazza a Debian világában (lehet hogy ez hiányzik?).
"Szerintem 1000%, hogy elrontottad a serialt ..."
Mi ez a serial? - amit elrontottam. Ilyet még sosem kellett beállítanom.
* Én egy indián vagyok. Minden indián hazudik.
Tipikusan akkor fordul elő, hogy az egyik helyen jól oldódik fel, máshol meg nem, ha elfelejtik növelni. A SOA rekord része, ezt csekkolja a bind, hogy eldöntse, változott-e. Pl.:
http://www.zytrax.com/books/dns/ch8/soa.html
Itt elmagyarázzák és össze is gyűjtötték a vonatkozó rfc-ket.
Talán: http://serverfault.com/questions/76421/wget-cant-resolve-host
Érdekes! Megnyugtató hogy másnál is jelentkezik ez a képtelenség. Külön köszönöm fisher -nek hogy még emlékszik, I'm Debian!
Viszont, ez a konfigurációs fájl nem is tudom mire/kinek vonatkozik? Egy olyan gépen ahol a wget feloldással nincs gondom, ez így néz ki:
Mit lehet kell ezen beállítani - mi használja ezt? Ki az a "Name Service Switch" - nincs nss nevű futó démon.
* Én egy indián vagyok. Minden indián hazudik.
Sose hallottam még ilyenről, csak beírtam a google-ba a hibaüzenetet. Sajnos ez a hermetikus tudomány csak a beavatottak számára érhető el.
http://lmgtfy.com/?q=Name+Service+Switch
hosts: files dns mdns4_minimal [NOTFOUND=return] mdns4
legalábbis a e szerint
szerk.: ami azt illeti en is belefutottam ebbe, és én így oldottam meg.:))
a wins a window$ok miatt kellet ugyi.
és azóta is így megy:)
szerk1: "Viszont, ez a konfigurációs fájl nem is tudom mire/kinek vonatkozik?"
bárkire/bármire aki - többek közt - a névfeloldást akarja használni:)) lást itt
Egy biztos, pusztán a wins bejegyzésétől nem javult meg :(
A szóban forgó eszköz, egy GSM router segítségével kapcsolódik a WEB -re, és a város szélén, egy oszlop tetején csücsül. A jelenlegi beállításokkal simán kapcsolódik a segéd szerverhez és reverse tunnelen keresztül lehet elérni a http és az ssh szolgáltatást!
Az asztalomon, szintén GSM routeren keresztül ketyeg a prototípusa és k9sz9ni szépen, minden rendben!?
Már csak azt tudom elképzelni, hogy a router beállításával nem stimmel valami :(
* Én egy indián vagyok. Minden indián hazudik.
nem a wins-t kell beírni hanem az "mdns4_minimal [NOTFOUND=return]" elé tenni a dns bejegyzést. esetleg a "mdns4_minimal [NOTFOUND=return]" bejegyzést törölni.
A wins ebben az esetben nem azt jelenti, hogy megnyeri...
"a város szélén, egy oszlop tetején csücsül."
Talan csak nem autosok "orome" ?
Áh, inkább az itt maradt madarak örömére. Ez a helyi melegedő:)
Én ezt úgy oldottam meg, hogy lekérdezek több whatismyip jellegű weboldalt, kivadászom belőlük az IP-címeket, s többségi döntéssel elhiszem, hogy az a külső IP, amit sokan mondanak. Ja, és mivel egyes oldalak utálják a scripteket, így azt hazudom a wgettel, hogy én egy Firefox vagyok, így aztán odaadják nekem az oldalt. :)
tr [:lower:] [:upper:] <<<locsemege
LOCSEMEGE
A releváns rész:
ipurl=('http://whatismyipaddress.com/' 'http://www.ip-adress.com/' 'http://www.whatsmyip.org/' 'http://www.whatismyip.org/' 'http://www.cmyip.com/' 'http://my-i-p.com/')
user_agent='Mozilla/5.0 (X11; Linux x86_64; rv:8.0) Gecko/20100101 Firefox/8.0'
iface='p10p1'
releasefile='/etc/system-release'
name="${0##*/}"
wanaddr() {
IPADDR=''
cnt=2
while [ -z "$IPADDR" -a $cnt -gt 0 ]; do
for ((j=0; j<3; j++)); do
for i in 0 3; do
IP_ADDR[j]=''
url="${ipurl[j+i]}"
[ ! -z "$url" ] && IP_ADDR[j]="`wget -l1 -U "$user_agent" -O - "$url" 2>/dev/null | grep -Eo '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}' | head -n1`"
[ ! -z "${IP_ADDR[j]}" ] && break
done
done
if [ x"${IP_ADDR[0]}" = x"${IP_ADDR[1]}" -o x"${IP_ADDR[0]}" = x"${IP_ADDR[2]}" ]; then
IPADDR="${IP_ADDR[0]}"
elif [ x"${IP_ADDR[1]}" = x"${IP_ADDR[2]}" ]; then
IPADDR="${IP_ADDR[1]}"
fi
((cnt--))
done
}
tr [:lower:] [:upper:] <<<locsemege
LOCSEMEGE
Ezt ahányszor lefuttatom annyiszor mást ad vissza. :-D
Ó, hogy dögöljenek meg! :) Különben kösz, hogy szóltál, kiveszem a címek közül.
Megnéztem, a HTML file-ba generálnak egy random értéket, ugyanakkor a CSS-ben azt mondják, ez ne jelenjen meg, s a valóságot egy javascript állítja elő. Így aztán marhaságot ad vissza ez a sor, már ha a cím a http://www.whatsmyip.org. Keresek egy másik címet ehelyett.
Egyébként a többségi döntés kiszűrte ezt a hibát. :)
tr [:lower:] [:upper:] <<<locsemege
LOCSEMEGE
Sokat javítottam rajta. Az összes címről begyűjti az IP-címeket, s amelyikre a legtöbb szavazat érkezik, az nyer. Ezzel a rafinált weblapok mennek a levesbe. :)
ipurl=( 'http://whatismyipaddress.com/' 'http://www.ip-adress.com/' 'http://ip.ezit.hu/ip.php' \
'http://www.whatismyip.org/' 'http://www.cmyip.com/' 'http://my-i-p.com/' \
'http://ifconfig.me/ip' 'http://freedns.afraid.org/dynamic/check.php' 'http://checkip.dyndns.org/' )
user_agent='Mozilla/5.0 (X11; Linux x86_64; rv:8.0) Gecko/20100101 Firefox/8.0'
iface='p10p1'
releasefile='/etc/system-release'
name="${0##*/}"
wanaddr() {
max=0
maxindex=0
IP[0]=0
for ((i=0; i<${#ipurl[@]}; i++)); do
url="${ipurl[i]}"
ip="`wget -l1 -U "$user_agent" -O - "$url" 2>/dev/null | grep -Eo '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}' | head -n1`"
[ -z "$ip" ] && continue
ready=0
j=0
while [ ${IP[j]} -ne 0 ]; do
if [ x"${IP[j+1]}" = x"$ip" ]; then
((IP[j]++))
if [ ${IP[j]} -gt $max ]; then
max=${IP[j]}
maxindex=$j
fi
ready=1
break
fi
((j+=2))
done
if [ $ready -ne 1 ]; then
if [ 1 -gt $max ]; then
max=1
maxindex=$j
fi
IP[j++]=1
IP[j++]="$ip"
IP[j]=0
fi
done
IPADDR="${IP[maxindex+1]}"
}
tr [:lower:] [:upper:] <<<locsemege
LOCSEMEGE
$ links -dump miazipm.hu | grep -m1 -Po "(\d+[\.\W])+"
78.24.191.244
-
:)
No. Hát nálam megoldódott!
A szokásos én vagyok a buta. Az /etc/resolv.conf -ban a következő bejegyzések voltak:
nameserver "egy általam használt, kevéssé ismert szerver első címe"
nameserver "egy általam használt, kevéssé ismert szerver második címe"
nameserver 172.16.3.254
A harmadik volt a GSM router mint gateway - kitöröltem a többit és voila kitört a béke!
(én úgy tudtam hogy hármat vesz figyelembe a rendszer, úgy tűnik mire az igazihopz ért addigra kifáradt)
* Én egy indián vagyok. Minden indián hazudik.
curl -ks http://ip.ezit.hu/ip.php
Just works.
--
Nem épp a téma, de miben különbözik a curl és a wget? Futólag nem sok. Akkor miért is ajánlod ezt? A wget szinte minden disztribúció alap készletében benne van, a curl viszont nem.
Még egy cím kinyerőke:
wget http://freedns.afraid.org/dynamic/check.php -O - 2>/dev/null | grep Detected | awk '{print $4}'
* Én egy indián vagyok. Minden indián hazudik.
Szerintem alapvetően nem a curl vagy wget volt a mondanivalója, hanem maga az URL, és az általa adott output egyszerűsége.
Az általad írt "cím kinyerőkére" viszont kérdés: miért kell a grep is, ha utána úgyis awkot hívsz?
Szerintem így megbízhatóbb ,de igazad van, ki is lehet hagyni :)
* Én egy indián vagyok. Minden indián hazudik.
"ki is lehet hagyni"
Félreérted. Nem a funkció kihagyásáról volt szó, hanem arról, hogy az awk alapból pattern-action szintaktikával bír.
man awk:
An AWK program consists of a sequence of pattern-action statements and optional function definitions.
pattern { action statements }
Azaz teljesen felesleges a mintaillesztéshez külön processt indítani. Hát nem egyszerűbb így?
"Szerintem így megbízhatóbb"
Megbízhatóságban nem marad el a grep+awk páros mögött.
Megint tanultam valamit :D
Kipróbáltam, működik - a Debian a gawk -ot használja az awk helyett (ezt már néhányszor megsz'vtam) de ezt még ez is tudja!
wget http://freedns.afraid.org/dynamic/check.php -O - 2>/dev/null | awk '/Detected/ [print $4]'
Így az első verziómhoz képest, sokkal takarékosabb megoldást találtunk (a freedns check.php -je sokkal kisebb és a grep -et is ki lehet ejteni).
* Én egy indián vagyok. Minden indián hazudik.
"a Debian a gawk -ot használja az awk helyett (ezt már néhányszor megsz'vtam) de ezt még ez is tudja!"
Kíváncsivá tettél. _Elméletileg_ a gawk hibája legfeljebb az lehet, hogy (sokkal és egyre) többet tud, mint a "hagyományos", amely többet tudásáról egyébként a POSIXLY_CORRECT környezeti változó létezése, vagy a --posix paraméter szoktatja le.
Openwrt-n (10.03.1 RC4, RC5) szopás van a wget-tel:
http://wiki.openwrt.org/doc/howto/wget-ssl-certs
Nem mélyedtem bele, nekem még White Russian 0.9
wget qO- http://ifconfig.me/ip
Működik.
* Én egy indián vagyok. Minden indián hazudik.
A https ami problémás lehet. (NEM az ifconfig.me -ről beszélek.)
Eddig ez a legszebb szerintem :)
Ez nagyon jó :D Gratula!
De akkor miért nem ez az alak: curl ifconfig.me
Kár hogy a curl nemszokvány mint a wget.
* Én egy indián vagyok. Minden indián hazudik.
Hogy analógiával éljek: wget/curl = grep/awk, és nyilván nem kapja elő senki az awk-t egy mezitlábas mintakeresésre.
és igen, tl;dr miatt én is linkeltem a dyndns megoldását :)
ez ugye tudod, hogy szar? :)
--
NetBSD - Simplicity is prerequisite for reliability
Mesélj, hol a hiba?
OpenWrt-ben is ezt használják a ddns szkriptben.
(Igen, azt tudom hogy ez önmagában k*rva kevés az IP detektálására. :D)
Gondolom, az a baja, hogy illeszkedik a 999.999.999.999-re is akár. Ettől függetlenül lényegében én is így vadászok az IP-címre.
tr [:lower:] [:upper:] <<<locsemege
LOCSEMEGE
Ha logban keresel IP-t, akkor nem. Oda altalaban ugyis rendes IP kerul, cserebe nagyon keves esellyel kerul be IP cim kinezetu irrelevans adat.
--
Megüt a guta!
Március 1 -től valamit beletúrt a freedns a honlapjába, így nem tudom lekérdezni a saját IP címemet: http://freedns.afraid.org/dynamic/check.php
Tudtok valami komolyabb megoldást a saját, külső IP címünk megismerésére?
* Én egy indián vagyok. Minden indián hazudik.
Google: what is my ip
----------------------
"ONE OF THESE DAYS I'M GOING TO CUT YOU INTO LITTLE PIECES!!!$E$%#$#%^*^"
http://hup.hu/node/108991?comments_per_page=9999#comment-1377889
tr [:lower:] [:upper:] <<<locsemege
LOCSEMEGE
OK Ezeket értem, de pont arra gondoltam hogy hátha van valami ami nem a wget és hasonlókon alapul. Próbáltam a ping -R és a traceoute opciókat, ezek szépen működnek a UPC hálózatán a kábeles routerekkel, viszont, nem működnek a GSM routerekkel, amivel most küzdök.
* Én egy indián vagyok. Minden indián hazudik.
Egy ilyen egyszerű megoldás miért nem jó? http://hup.hu/node/108991#comment-1377226
Mert vagy működik, vagy nem, vagy elérhető, vagy nem, vagy megváltoztatják, vagy nem. Ezért csináltam azt, hogy több helyről gyűjtöm be a címet, aztán amilyen címre a legtöbb szavazat érkezuk, azt elhiszem.
Vannak olyan oldalak, amelyek képként generálják le az IP-címet, s adják a böngészőnek, a HTML forrásba pedig fals címet adnak hidden CSS attribútummal, ezzel elérve, hogy ne lehessen script-ből egyszerűen kiszedni, ami kell. Ezért célszerű a bonyolultabb eljárás.
tr [:lower:] [:upper:] <<<locsemege
LOCSEMEGE
http://checkip.dyndns.org/
ez tuti menni fog.
Azert rajottem, hogy ez a problema nem egyszeru eset. Pl. proxy mogul vacak cimet kapsz.
--
wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'
Lehetőségem van, több UPC hálózatán, dinamikus IP című helyre felrakni egy kis gci scriptet, ami visszaadja az IP címemet (magamat csak nem próbálom meg átvágni), ezeket csak én módosítom, kezelem.
Most is az volt a megoldás, hogy a GSM hálózati eszközeim, időnként, ssh -n bejelentkeznek - frissítik az állapot adatukat, pl. az aktuális IP címüket. Így az /var/log/auth.log -ban megjelennek a kérdéses IP címek.
Kár hogy ezt az információt csak a root tudja kinyerni, az ssh szerverből ezt nem tudom kikérni, vagy mégis?
* Én egy indián vagyok. Minden indián hazudik.
A szerverbol nem, de userkent igen.
Erre scriptet irni, kb. ket perc?
--
Nagyon érdekes!
Az "állomás1" -ről belépek:
$ ssh eszköz12.dinamikus.net
A távoli eszközről:
$ ssh állomás2.dinamikus.net
Mikor beléptem kiadom a
$ echo $SSH_CLIENT
84.224.x.y 49509 22
"Visszalépek" az eszközbe, és kiadom a következő parancsot:
$ ssh állomás2.dinamikus.net "echo $SSH_CLIENT"
172.16.3.254 1123 10022
Ami az eszköz GSM router címe és portjai!?
Biztos vagyok benne hogy az állomás2 hajtotta végre az "$ echo $SSH_CLIENT" parancsot, mégis más eredményt dob?
Így már jó lesz :)
Az eszközről:
$ ssh állomás2.dinamikus.net 'echo $SSH_CLIENT'
(vagyis az előző esetben az eszköz shell -je behelyettesítette a lokális $SSH_CLIENT változót, de a második esetben az aposztrof miatt nem :)
Ez a nyerő!? Azért így is mindkettő állomást érdemes használni, hátha valamelyik épp nem üzemel!
SZERK:
Ez megint közvetett!
Vagyis nem lehet közvetlenül az IP címet a külső "interfészről" kinyerni :(
* Én egy indián vagyok. Minden indián hazudik.
Nem, nem lehet, mert #define kulso interfesz.
Egy gep mindig azt tudja ip cimenek, ami direktben a sajat ip cime. Miert kellene tudnia arrol, hogy o pl. egy router mogott acsorog? Semmi koze hozza.
Persze, meg lehet oldani, le kell kerdezni a legkulso eszkozt, hogy kekszcsokolom, mi az aktualis IP cim? Es akkor kapsz egy tobbe-kevesbe relevans valaszt. Mivel azonban ez nem mindig jarhato ut, ezert erdemes elmenni egy kulso oldalhoz, es megerdeklodni tole kedvesen, hogy szerinte mi az IP cimem. Ekkor mar tuti relevans valaszt kapok, mert o azt a cimet fogja mondani, ami hozza kapcsolodott, es ez lehet router, GSM modem, soros porti adapter, barmi, annak a cimet fogja visszaadni.
Tehat az egzakt valasz biztos, hogy a kozvetett valasz.
--
Vigasztalan vagyok :(
Az érvelésedet azonban el kell fogadnom, ilyen a TCP/IP.
Pl. ott van a traceroute a külső IP cím nem jelenik meg mint hopp csak a router belső címe. A ping -R opciójával, viszont ott van a UPC/kábel modem. A GSM routeren át viszont semmi, megkukul.
Ha a gépészetben így készülnének a fogaskerekek, még mindíg csak a dörzs áttételt tudnák megvalósítani - RFC de jó :P
* Én egy indián vagyok. Minden indián hazudik.
Azert, mert a traceroute-nal belulrol nezel kifele, es befele mindig mas latszik. Ha egy fogaskereket belulrol neznel kifele, nem ertened, miert vannak ilyen erdekes kituremkedesek, ahelyett, hogy egyenes lenne az egesz. Ott is kivulrol munkalod meg a fogaskereket, hogy szep fogai legyenek (es ne kelljen fogorvoshoz jarnia :D)
--
Mint minden hasonlat, ez is sántít, ha a fogaskerék kinézne, szép sima felületet érezne/látna - pont az a lényeg (mostanra) hogy a fogaskerék egyenletesen és folyamatosan halad - ne valami középkori vízemelő áttételre gondolj.
Ja, hogy az informatika ma éli a középkort - és én még azt képzeltem ez a felvilágosodás.
* Én egy indián vagyok. Minden indián hazudik.
De a fogaskerek csak a sima feluletet latna, es goze nem lenne arrol, hogy mekkora mihez kapcsolodik. Marpedig te valami ilyesmit szeretnel, belulrol szeretned megmondani, hogy hol vagy a vilagban.
--
http://ifconfig.me/
[feliratkozás]