elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Creando nuestro port Scanner en python!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Creando nuestro port Scanner en python!  (Leído 1,341 veces)
alearea51

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Creando nuestro port Scanner en python!
« en: 28 Febrero 2015, 17:08 pm »

Hola nuevamente. En esta entrada me gustaría mostrarles como crear un scanner de puertos sencillo. Como reza el título, lo haré en Python. El código se encuentra en el libro "Violent Python" , igualmente (para el que no quiera bajarse el PDF) colocaré el enlace al script al final del artículo. Para que se entienda el funcionamiento, voy a mostrar el script por porciones e iré explicando que acciones va realizando.

Para este script usaremos las librerias "optparse" y "socket"

optparse: Nos sirve para parsear opciones de línea de comando (quizás ahora suene extraño pero ya comprenderemos su funcionamiento al utilizarlo).

Código:
Warning! ---> Deprecated since version 2.7: The optparse module is deprecated and will not be developed further; development will continue with the argparsemodule. (no importa, sirve a nuestros fines jeje)

socket: Esta librería, como se imaginarán, nos permite manejar los sockets; ponerlos a la escucha, recibir, enviar,data etc.


Descripción aquí ---> http://docs.Python.org/library/socket.html

En la descripción veremos todas las funciones que posee esta librería. Las que nos interesan para nuestro port scanner son las siguientes:


Citar
socket.gethostbyname(hostname) – This function takes a hostname such
as www.google.com and returns an IPv4 address format such as
69.163.177.2.

socket.gethostbyaddr(ip address) – This function takes an IPv4 address
and returns a triple containing the hostname, alternative list of
host names, and a list of IPv4/v6 addresses for the same interface
on the host.

socket.socket([family[, type[, proto]]]) – This function creates an
instance of a new socket given the family. Options for the socket
family are AF_INET, AF_INET6, or AF_UNIX. Additionally, the socket
can be specified as SOCK_STREAM for a TCP socket or SOCK_DGRAM for
a UDP socket. Finally, the protocol number is usually zero and is
omitted in most cases.

socket.create_connection(address[, timeout[, source_address]]) – This
function takes a 2-tuple (host, port) and returns an instance of a
network socket. Additionally, it has the option of taking a timeout
and source address.

Comenzamos..

Como mencionamos arriba, utilizaremos las librerias optparse y socket, así que a darle al import:

Código
  1. import optparse
  2. import   socket
  3. from socket import *
  4.  
  5. Luego,  definimos la función que se conectará al host:
  6.  
  7. def connScan(tgtHost, tgtPort):   #definimos la función y le pasamos los parámetros
  8.    try:
  9.         connSkt = socket(AF_INET, SOCK_STREAM) '''definimos la familia de socket e indicamos que es un socket TCP'''
  10.  
  11.         connSkt.connect((tgtHost, tgtPort)) #Nos conectamos al host y puerto elegidos
  12.         connSkt.send('Hi') #Enviamos algo al destino
  13.         results = connSkt.recv(100) #Guardamos la respuesta
  14.         print '[+]%d/tcp open'% tgtPort
  15.         print '[+] ' + str(results) #Mostramos los resultados
  16.         connSkt.close()
  17.    except:
  18.         print '[-]%d/tcp closed'% tgtPort    '''si nos devuelve un error, mostramos en pantalla que el puerto esta cerrado'''
  19.  
  20.  
  21. def portScan(tgtHost, tgtPort):  #definimos la función que escaneará el puerto
  22.   try:
  23.         tgtIP = gethostbyname(tgtHost) '''utilizamos la función gethostbyname para resolver el host'''
  24.   except:
  25.         print "[-] Cannot resolve '%s': Unknown host"%tgtHost
  26.         return
  27.   try:
  28.      tgtName = gethostbyaddr(tgtIP) #Resolvemos el hostname pasandole la ip
  29.      print '\n[+] Scan Results for: ' + tgtName[0] #Mostramos el hostname resuelto
  30.   except:
  31.      print '\n[+] Scan Results for: ' + tgtIP
  32.      setdefaulttimeout(1)
  33.   print 'Scanning port ' + str(tgtPort)
  34.   connScan(tgtHost, int(tgtPort)) '''Llamamos a la función que se conectará para traernos el resultado open/close y luego, si está abierto el puerto realizará el banner grabbing'''
  35.  
  36. Definimos la función principal:
  37.  
  38. def main():
  39.  
  40. '''Acá esta lo que comentaba mas arriba, gracias a optparse podemos manejar mucho mejor las lineas de comando a la hora de solicitar al usuario que ingrese datos. Nos permite mostrar opciones cuando el usuario no ingresa una opción (valga la redundancia cíclica jeje) o utiliza el comando help'''
  41.  
  42. parser = optparse.OptionParser('usage %prog -H ' +  '<target host> -p <target port>')
  43. parser.add_option('-H' , dest='tgtHost', type='string' ,  help='specify target host')
  44. parser.add_option('-p' , dest='tgtPort', type='int' ,  help='specify target port')
  45.  
  46. (options, args) = parser.parse_args()
  47. tgtHost=options.tgtHost
  48. tgtPort=options.tgtPort
  49. if (tgtHost == None) | (tgtPort==None): '''Si uno de los dos parámetros no está hacemos que vuelva a ejecutarse el script (con exit(0)), mostrando el mensaje de opciones que deben ingresarse'''
  50.      print parser.usage
  51.               exit(0)
  52.        portScan(tgtHost, tgtPort)
  53.  
  54. main()
  55.  
Espero que sea de utilidad.

Pueden ver mas en:

http://mamaquieroserpentester.blogspot.com.ar/2015/02/armando-un-port-scanner-en-python.html

Mod: al publicar posts usa las etiquetas adecuadas (code, quote, GeSHi, etc) y publicalo en la sección correcta, esto es scripting


« Última modificación: 28 Febrero 2015, 22:04 pm por engel lex » En línea

engel lex
CoAdmin
***
Desconectado Desconectado

Mensajes: 15.347



Ver Perfil
Re: Creando nuestro port Scanner en python!
« Respuesta #1 en: 28 Febrero 2015, 22:22 pm »

optparse como viste está deprecated... es mejor adaptarse que usar una función descontinuada... y en ese caso no me tomó 5 minutos hacer la traducción sin conocimientos de esa función

Código
  1. import argparse
  2.  
  3. parser = argparse.ArgumentParser(prog='usage %prog -H ' +  '<target host> -p <target port>')
  4. parser.add_argument('-H' , dest='tgtHost' ,  help='specify target host')
  5. parser.add_argument('-p' , dest='tgtPort', type=int ,  help='specify target port')
  6. values = parser.parse_args()
  7. tgtHost=values.tgtHost
  8. tgtPort=values.tgtPort
  9.  
  10. if (tgtHost == None) | (tgtPort==None):
  11.      print parser.print_help()


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Python]Simple port scanner
Scripting
braulio-- 3 8,195 Último mensaje 8 Enero 2012, 20:04 pm
por tcp_root
[Java]Port Scanner 0.1
Java
0xFer 9 7,193 Último mensaje 28 Junio 2013, 02:24 am
por ThinkByYourself
[Delphi] DH Port Scanner 0.2
Programación General
BigBear 0 930 Último mensaje 2 Agosto 2013, 23:50 pm
por BigBear
Juego: Creando nuestro próximo nick a partir de nuestro nombre real
Foro Libre
z3nth10n 7 2,146 Último mensaje 21 Agosto 2016, 19:25 pm
por z3nth10n
Dudas port scanner
Hacking Básico
Rnovatis 1 1,232 Último mensaje 17 Febrero 2017, 00:08 am
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines