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