[ Tyler Durden @ 22.09.2010. 12:03 ] @
Malo se igram sa pythonom i jedna jednostavna skripta mi ne radi.

Code (python):

#! /usr/bin/env python

import string
import socket

fo = open("neki_fajl.txt", "r")
doms = fo.read()
a = doms.replace("ServerAlias","")
b = a.replace(" ","")
c = b.split("\n")
#print type(c)
print c[4]

ip = socket.gethostbyname_ex(c[4])
print ip[2]

#for domen in c:
     #ip = socket.gethostbyname_ex("domen")
     #print domen
     #if ip[2] == "xxx.xxx.xxx.xxx":
          #print domen+"  lalal"
     #else:
          #print domen+"  lalala"

fo.close()
 


U fajlu neki_fajl.txt se nalazi lista domena (a i b promjenjive su tu samo malo da isformatiraju).
E sad, print ip[2] radi - ali ovo u for petlji ne radi. Zasto?
[ Branko @ 23.09.2010. 07:42 ] @
Zameni u petlji :

ip = socket.gethostbyname_ex("domen")

sa:

ip = socket.gethostbyname_ex(domen)

[ Tyler Durden @ 23.09.2010. 08:02 ] @
Jok, probao sam sve varijante navodnika, ista stvar.
Ovo je greska koja se javlja kad pokrenem skript.
Code:
Traceback (most recent call last):
  File "za_preb.py", line 18, in <module>
    ip = socket.gethostbyname_ex(domen)
socket.gaierror: [Errno -2] Name or service not known


I meni djeluje kao da on ne zamjeni promjenjivu domen sa njenom vrednoscu nego pokusava da uradi rezolving za string domen, sto naravno ne moze.
[ Branko @ 23.09.2010. 08:19 ] @
Možda nešto u fajlu "neki_fajl.txt".

Ja sam probao sa:
Code:

www.google.com
www.python.org
8.8.8.8
8.8.4.4
80.74.160.12
80.74.160.38


Dobijem:
Code:

80.74.160.12
['80.74.160.12']
www.google.com
www.google.com  lalala 74.125.39.99
www.python.org
www.python.org  lalala 82.94.164.162
8.8.8.8
8.8.8.8  lalala 8.8.8.8
8.8.4.4
8.8.4.4  lalala 8.8.4.4
80.74.160.12
80.74.160.12  lalala 80.74.160.12
80.74.160.38
80.74.160.38  lalala 80.74.160.38

  lalala 192.168.0.101

  lalala 192.168.0.101

  lalala 192.168.0.101
>Exit code: 0


Malo sam modifikovao kod:
Code:

#! /usr/bin/env python

import string
import socket

fo = open("neki_file.txt", "r")
doms = fo.read()
a = doms.replace("ServerAlias","")
b = a.replace(" ","")
c = b.split("\n")
#print type(c)
print c[4]

ip = socket.gethostbyname_ex(c[4])
print ip[2]

for domen in c:
    ip = socket.gethostbyname_ex(domen)
    print domen
    if ip[2] == "xxx.xxx.xxx.xxx":
        print domen+"  lalal "+ip[2][0]
    else:
        print domen+"  lalala "+ip[2][0]

fo.close()
 


[ Tyler Durden @ 23.09.2010. 09:26 ] @
Cek, aj pokreni skriptu sa iskomentarisanim print c[4] i print ip[2] da vidim sta ti vratiti.
[ Branko @ 23.09.2010. 10:18 ] @
Za fajl:
Code:

www.google.com
www.python.org
www.elitesecurity.org
www.mozilla.com


i kod:
Code:

import string
import socket

fo = open("neki_file.txt", "r")
doms = fo.read()
a = doms.replace("ServerAlias","")
b = a.replace(" ","")
c = b.split("\n")
#print type(c)
#print c[4]

#~ ip = socket.gethostbyname_ex(c[4])
#print ip[2]

for domen in c:
    ip = socket.gethostbyname_ex(domen)
    print domen
    if ip[2][0] == "xxx.xxx.xxx.xxx":
        print domen+"  lalal "+ip[2][0]
    else:
        print domen+"  lalala "+ip[2][0]

fo.close()



Ovaj put iz Ubuntu-a dobijam :

www.google.com
www.google.com lalala 74.125.39.99
www.python.org
www.python.org lalala 82.94.164.162
www.elitesecurity.org
www.elitesecurity.org lalala 217.26.67.165
www.mozilla.com
www.mozilla.com lalala 63.245.217.20
>Exit code: 0

[ Tyler Durden @ 23.09.2010. 10:34 ] @
Hm, kopirao sam sve kako si ti napisao i to radi i meni, na neki nacin. Na kraju dobijem gresku.

www.google.com
www.google.com lalala 74.125.43.106
www.python.org
www.python.org lalala 82.94.164.162
www.elitesecurity.org
www.elitesecurity.org lalala 217.26.67.165
www.mozilla.com
www.mozilla.com lalala 63.245.217.20
Traceback (most recent call last):
File "d.py", line 16, in <module>
ip = socket.gethostbyname_ex(domen)
socket.herror: [Errno 3] Unknown server error


Vjerovatno ima nesto i do verzije pythona ili biblioteka.
Ali na jednom stranom forumu sam nasao izgleda najpravilnije rijesenje. Radi se o tome u mojoj skripti kad naidje na domen koji ne moze da razrijesi on se zaglupi i izbaci error bez da prikaze sta je do tada uradio.

Code (python):
for domen in c:
try:
  ip = socket.gethostbyname_ex(domen)
  print "IP for %s is %s" % (domen, ip)
except:
  print "No reverse DNS entry for %s" % domen


I ovo radi bas kako treba.
Koliko vidim pravilan exception handling je veoma bitan u pythonu...?