Juego ejercicios [Python]

Iniciado por Masita, 21 Diciembre 2009, 03:04 AM

0 Miembros y 1 Visitante están viendo este tema.

Novlucker

Nueva consulta ... el rango de IP que formato lleva?
Cualquiera de estos?

Citar127.0.0.1/127.0.0.255
127.0.0.1/127.120.250.255
127.0.0.1/64
127.0.0.1/255.255
127.0.0.1/127.0.1.255

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Masita

En mi caso ingreso primero una de las ip en este formato 127.0.0.1  y despues pido la siguiente con el mismo formato. Por ejemplo 128.0.0.1 ( lo unico es que con este rango tardaria eones en terminar el scaneo ) Tu utiliza el formato que desees.
En el cielo estan suspendidas las palabras que cantamos en nuestros sueños....

Novlucker

#92
El ejercicio anterior :P

Código (python) [Seleccionar]
import http.client

def NextIP(rango):
           rango = rango.split('.')
           for i in range(len(rango)-1,-1,-1):
                       if(int(rango[i]) < 255):
                                  rango[i] = str(int(rango[i]) + 1)
                                  break
                       else:
                                  rango[i] = '0'
           return '.'.join(rango)

def ServerinIPRange(strRange):
           RIPs = strRange.split('/')
           sIPstr = RIPs[0]
           eIP = RIPs[1].split('.')
           eIP = sIPstr.split('.')[:-len(eIP)] + eIP
           eIPstr = '.'.join(eIP)
           ShoWebServer(sIPstr)
           while(sIPstr != eIPstr):
                       sIPstr  = NextIP(sIPstr)
                       ShoWebServer(sIPstr)

def ShoWebServer(URLIP):
           try:
                       conn = http.client.HTTPConnection(URLIP,timeout=5)
                       conn.request("GET", "/index.html")
                       r = conn.getresponse()
                       print(URLIP,r.getheader('Server'))
           except:
                       print(URLIP,'Server not found')
           finally:
                       conn.close()
           
try:
   iprange = input("Ingrese un rago de IP (ej: 200.3.25.1/26.255): ")
   ServerinIPRange(iprange)
except:
   print("El rango de IP ingresado no es válido")


Para quienes usan Python 2.6 hay que modificar el script, ya que la librería a importar es la httplib

Una muestra de la salida:
Citar>>>
Ingrese un rago de IP (ej: 200.3.25.1/200.3.25.255): 207.46.192.250/193.1
207.46.192.250 Server not found
207.46.192.251 Server not found
207.46.192.252 Server not found
207.46.192.253 Microsoft-IIS/7.5
207.46.192.254 Microsoft-IIS/7.5
207.46.192.255 Server not found
207.46.193.0 Server not found
207.46.193.1 Server not found
>>>


Tener en cuenta que el script tiene configurado un timeout de 5 segundos (tiempo que demora en "decidir" si un host es inaccesible o no), y que no se verifica que el rango hasta sea mayor que el inicio, por lo que si nos equivocamos queda en un bucle infinito :silbar:

Ultima nota: los headers que muestra el servidor se pueden modificar, así que no es raro ver algunos extraños, como el gws para google

Saludos

[Edito]
Le bajé el timeout de 10 a 5 segundos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Masita

 ;-) Cada vez que veo uno de tus codigos me doy cuenta de todo lo que falta por aprender.... Aqui dejo lo que habia conseguido hacer yo. Es bastante menos legible y muchisimo mas largo xDD

Código (python) [Seleccionar]

import socket
def rango(): #Recoge el rango de ip
while True:
a = (raw_input("introduzca primera ip:  "))
b = (raw_input("introduzca segunda ip:  "))
c=b
a, b = a.replace("."," "), b.replace("."," ")
try:
int(a.replace(" ",""))
int(b.replace(" ",""))

a, b = a.split(), b.split()
return a,b,c
except:
print "El rango ip introducido no es valido"
def listaip(): #Genera una lista con todas las ip en el rango
aux=[]
ip = []
a, b, c = rango()
a1, a2, a3, a4 = int(a[0]), int(a[1]), int(a[2]), int(a[3])
b1, b2, b3, b4 = int(b[0]), int(b[1]), int(b[2]), int(b[3])
while True:
while a1 != 255:
while a2 != 255:
while a3 != 255:
while a4 != 255:
aux=[]
aux.append(str(a1))
aux.append(str(a2))
aux.append(str(a3))
aux.append(str(a4))
aux = (".".join(aux))
ip.append(aux)
a4 +=1
if aux == c:
return ip
aux=[]
aux.append(str(a1))
aux.append(str(a2))
aux.append(str(a3))
aux.append(str(a4))
aux = (".".join(aux))
ip.append(aux)
a4 = 0
a3 +=1
if aux == c:
return ip
aux=[]

aux.append(str(a1))
aux.append(str(a2))
aux.append(str(a3))
aux.append(str(a4))
aux = (".".join(aux))
ip.append(aux)
a4 = 0
a3 = 0
a2 +=1
if aux == c:
return ip
aux=[]
aux.append(str(a1))
aux.append(str(a2))
aux.append(str(a3))
aux.append(str(a4))
aux = (".".join(aux))
ip.append(aux)
a4 = 0
a3 = 0
a2 = 0
a1 +=1
if aux == c:
return ip
def soc(host):
try:
s=socket.socket()
s.settimeout(0.1)
s.connect((host,80))
s.send("HEAD / HTTP/1.1\n\n")
f=s.recv(3000)
s.close()
return f
except:
return False
def comparar(cabecera,servidor):
x = cabecera.find(servidor)
if x != -1:
return True
else:
return False
def gen(ips):
coincidencias = []
indice = 0
for i in ips:
try:
y = soc(i)
if comparar(y,x):
print "Servidor encontrado en: ", i
coincidencias.append(i)
indice +=1
else:
print i
except:
print "Ningun servidor web en: ", i
continue
return coincidencias
#Main
print "######################################"
print "  Buscador de cadenas en headers http"
print "######################################\n"
x = raw_input("Introduzca el servidor a buscar:"  )
ips = listaip()
print "Empezando escaneo"
coin = gen(ips)
print "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
print "Un total de %d servidores detectados: " % (len(coin))
for i in coin:
print "Servidor encontrado en: ", i


Y su salida


[Masita@Hartigan Documentos]$ python ip.py
######################################
  Buscador de cadenas en headers http
######################################

Introduzca el servidor a buscar:Apache/2.2.13
introduzca primera ip:  212.92.50.9
introduzca segunda ip:  212.92.50.18
Empezando escaneo
Servidor encontrado en:  212.92.50.9
212.92.50.10
212.92.50.11
Ningun servidor web en:  212.92.50.12
.....
.....
Un total de 1 servidores detectados:
Servidor encontrado en:  212.92.50.9


Siguiente ejercicio!
En el cielo estan suspendidas las palabras que cantamos en nuestros sueños....

Novlucker

Aaaah, había que ingresar además el tipo de servidor :P


Igual esta muy bien, yo también inicie con los muchos while e if, pero luego encontre la manera de optimizarlo.

En principio también me había planteado retornar una lista con las IP dentro del rango, tal y como hace tu función rango(), pero luego lo deje de lado porque si se ingresa un rango demasiado extenso entonces se carga mucho en memoria, aunque hacer eso es lo mejor y más "correcto", porque de ese modo se separa realmente las dos funciones y se pueden reutilizar mejor a la hora de pasarlas a otro code, pero bueno, eso se cambia con solo agregar una lista y cambiar el return ;D

Debo de decir que también había comenzado el script con sockets, pero luego recorde las otras librerías, que de por si tienen funciones para retornar los headers.

En resumen, bien hecho! ;)

Voy a ver que planteo para el siguiente ejercicio ....
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Masita

Lo del socket lo intente primero busque si se podia hacer con urllib, pero como no me aceptaba ip's decidi hacerle la peticion de forma manual. Buscare info sobre esas librerias por que sabia que existian pero no se me ocurrio usarlas.

Gracias por la valoracion  ;D
En el cielo estan suspendidas las palabras que cantamos en nuestros sueños....

Novlucker

#96
Ahora si ;D

Es relativamente sencillo, para que quienes no han podido con estos, intenten con este otro ..

"Crear un script por medio del cual:

  • El usuario ingrese el nombre de una imagen
  • Se busque imagenes en google según lo ingresado por el usuario
  • Se descargue todos los thumbnails que aparecen en la primera página de coincidencias a un directorio por defecto (a criterio del programador)"
Ej de búsqueda:
google.es ---> http://images.google.es/images?hl=es&source=hp&q=elhacker.net&um=1&ie=UTF-8&sa=N&tab=wi&gbv=1&ei=_4VGS_vpJ8yVtgefnqHwAQ (url ejemplo con imagenes). Se deben de almacenar esas imagenes pequeñas.

[Edito]
Por como muestra los resultados google, con que sean 10 imagenes descargadas alcanza :P

Saludos

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

CaronteGold

#97
-


 No sé si funcionará porque no tengo el intérprete para probarlo, y hasta hoy por la noche creo que no podré entrar de nuevo.

  Me basé en algo que ví en una web, así que no estoy 100% seguro.

Código (python) [Seleccionar]

import httplib
a = "www.google.es"
part1 = "/images?gbv=2&hl=en&sa=1&q="
part2 = "&btnG=Search&aq=f&oq=&start=0"
b = raw_input("Fotos a buscar: ")
c = part1+b+part2

conexion = httplib.HTTPConnection(a)
conexion.request ("GET", c)
d = conexion.getresponse()
directorio = file( "C:\Python", "wb" )
directorio.write(d.read())
directorio.close()

   
  EDITO:

No funciona, al final fui a clase y me echaron porque está nevando, ( que suerte  :P ) , así que puedo conectarme, voy a intentar el code..  ;D ;D ;D.


   Saludos.






Novlucker

Me cachis!  >:(

No hay manera de que me tire lo que busco! pensé que quizás google había cambiado la manera en la que muestra resultados (y no eran accesibles), pero acabo de probar con otro lenguaje (vbs) y no tengo problemas en listar las imagenes!, pero en este caso, ponga lo que le ponga (cambiando user-agent y demás) me sigue pateando con un error 403!

Arghhhhh  >:(
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Masita

Yo estoy fuera todo el finde asi que me imagino que cuando vuelva ya estara resuelto. Aunque cuando vuelva lo intento que me parece bastante interesante.
En el cielo estan suspendidas las palabras que cantamos en nuestros sueños....