Test Foro de elhacker.net SMF 2.1

Programación => Scripting => Mensaje iniciado por: .:UND3R:. en 6 Abril 2015, 04:50 AM

Título: [Python]Transformar rangos de IP
Publicado por: .:UND3R:. en 6 Abril 2015, 04:50 AM
Hola a todos, entenderán soy nuevo en Python  >:( a ver si me resuelven una dudilla que tengo, habrá algún módulo/librería que me permita obtener los rangos de IP:

Entrada:

Citar190.168.0.1/24

Salida:
Citar190.168.0.0
190.168.0.1
190.168.0.2
...
.
190.168.0.255

Espero que se entienda, saludos
Título: Re: [Python]Transformar rangos de IP
Publicado por: tincopasan en 6 Abril 2015, 05:11 AM
la verdad es que no entiendo muy bien, pero si sabés la dirección 190.168.1.24
el rango seria como iniciar los valores después del último punto desde 0  190.168.1.0 e incrementar en  1 hasta 255 y en todo caso caso usando os haces un ping a la dirección ip que quieras:  os.system("ping "+ip)
perdón sino es ni cerca de lo que preguntas.
Título: Re: [Python]Transformar rangos de IP
Publicado por: engel lex en 6 Abril 2015, 05:40 AM
4 funciones

primero
Código (python) [Seleccionar]
import socket, struct

def ip2long(ip):#convierte octetos a long
 return struct.unpack("!L", socket.inet_aton(ip))[0]

def long2ip(ip):#convierte long en octetos
 return socket.inet_ntoa(struct.pack("!L",ip))

def ipmask(bits):#crea un mascara de la cantidad bits en formato long
 return ((1<<(bits))-1)<<(32-bits)

def iprange(ip,mask):#entrega una tupla con la primera y ultima ip del rango
 return [ip&ipmask(mask),ip|(ipmask(mask)^(1<<32)-1)]


allí tienes todo lo necesario para jugar con IPs

para hacer un rango

Código (python) [Seleccionar]
longIP = ip2long("127.0.0.1")#creamos el long
extremos = iprange(longIP,24)#entregamos long y mascara
rango = range(extremos[0],extremos[1]+1)#creamos un array

for i in rango: #lo que sea
  print long2ip(i)
Título: Re: [Python]Transformar rangos de IP
Publicado por: .:UND3R:. en 18 Mayo 2015, 05:53 AM
Acabo de implementar el script que me has proporcionado y no tengo nada que decir, funciona excelente  ;-)

Muchas gracias por ayudarme, saludos.