Ok. That was very helpful. As i dont know how to do it i googled and found this one: But frankly i dont understand it. The program works now like it should but i want to understand the code i use. So any help would be great. First function the ip is splitted as i did it. Alright. The use 256 as it is the maximum for any digit. ok. But what is that ** and exp meaning ???? ---------------------------------------------------------- def ip_to_int(dotted_ip): exp = 3 intip = 0 for quad in dotted_ip.split('.'): intip = intip + (int(quad) * (256 ** exp)) exp = exp - 1 return(intip) --------------------------------------------------- def int_to_ip(intip): octet = '' for exp in [3,2,1,0]: octet = octet + str(intip / (256 ** exp)) + "." intip = intip % ( 256 ** exp) return (octet.rstrip(".")) Am Dienstag, den 22.12.2009, 06:32 -0500 schrieb Dave Angel: > > 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 > > > > > 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