MK wrote:
Hi there,

i have some logical problem. I dont get it done to write my for loops in
that way that the ip address range which is given as arguments are
correct processed. Meaning that only the ips are printed which the
user defines as argument. I tried to make an if statement to stop
at the end_adress but it didnt work as it will stop at the end range
every time.
Here is my program so far:

---------------------------------------------------------
sai = start_adress.split(".")
eai = end_adress.split(".")

# Prüfen auf gültige IP
if eai < sai:
        help_here()

#print sai,eai

sa1=int(sai[0])
sa2=int(sai[1])
sa3=int(sai[2])
sa4=int(sai[3])
ea1=int(eai[0])
ea2=int(eai[1])
ea3=int(eai[2])
ea4=int(eai[3])

#print sa1,sa2,sa3,sa4
#print ea1,ea2,ea3,ea4

e1=ea1+1 # muß um 1 erhöht werden da sonst nur bis ea1-1
e2=ea2+1
e3=ea3+1
e4=ea4+1

ip=""
for i in range(sa4,255):
        ip=sai[0]+"."+sai[1]+"."+sai[2]+"."+str(i)
        print ip
print "-------4--------"      
                                        
for i in range(sa3+1,255):
        for i2 in range(1,255):
                ip=sai[0]+"."+sai[1]+"."+str(i)+"."+str(i2)
                print ip
print "-------3--------"              

sa3=sa3+1
for i in range(sa2+1,e2):
        for i2 in range(1,255):
                for i3 in range(1,255):
                        ip=sai[0]+"."+str(i)+"."+str(i2)+"."+str(i3)
                        print ip
print "-------2--------"                      
                        
for i in range(sa1+1,e1):
        for i2 in range(1,255):
                for i3 in range(1,255):
                        for i4 in range(1,255):
                                ip=str(i)+"."+str(i2)+"."+str(i3)+"."+str(i4)
                                print ip                
print "-------1--------"

---------------------------------------------------------

The start_adress and end_adress are the ip-range.

For example:
printdomains.py -s 192.168.178.0 -e 193.170.180.4

This should make all ips and stop at the end_adress.

Maybe you can help.

Thank you.

Mac


Trying to write nested loops as you have done is going to be very difficult, as the start and end conditions for each nested loop depends on the state of the outer loop.

There are several ways you could accomplish the desired loop, but the easiest would probably be to write two functions. The first converts from the four integers in the ip address into a single, larger one. And the other function converts back. Then the main loop is simply a non-nested loop.

def to_integer(ip_string):
    #convert the ip string into a single 32-bit integer

def  to_string(ip_int):
#convert the integer back into a string of four values, with periods between

sai = to_integer(start_address)
eai = to_integer(end_address)
for ip in xrange(sai, eai):
    result = to_string(ip)
    print result

If you need help writing the two functions, I'm sure many people here could help. But try it for yourself. Note that the int you're looking for in the first function will be gotten by multiplying the various parts of the IP address by different powers of 256.

And note that whatever valid IP address you plug into the first function, if you then apply the second function you should get back the string you started with. So it should be easy to test while you're working on it.

DaveA

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to