Ir al contenido
Gnu/Linux Vagos
Conéctate para seguir esto  
Pacman

Escaner de puertos simple en python

Recommended Posts

Buenas a tod@s, esta tarde andaba algo aburrido y quería recordar mis tiempos de python, así que he creado un pequeño escaner de puertos en python, no es muy complejo pero funciona bastante bien:

#!/usr/bin/python

import socket
import sys

common_ports={21:'ftp',22:'ssh',23:'telnet',25:'smtp',53:'dns',135:'NetBios',139:'NetBios',110:'POP3',143:'imap',389:'LDAP',8080:'proxy web',80:'http', 443:'secure http', 9418:'git'}

def scan_range(target, start, end, time=1):
	socket.setdefaulttimeout(time)

	for x in range(start,end+1):
		mi_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
	
		try: 
			mi_socket.connect((target, x))
			try:
				print('\033[92m' + "open port -----> " + '\033[0m', x,common_ports[x])
				mi_socket.close()
			except KeyError:
				print('\033[92m' + "open port -----> " + '\033[0m', x)
				mi_socket.close()
		except socket.error:
			mi_socket.close()
	return 0;
def scan_common(target, time=1):

	socket.setdefaulttimeout(time)

	for x in common_ports.keys():
		mi_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
		try:
			mi_socket.connect((target, x))
			print('\033[92m' + "open port -----> " + '\033[0m', x,common_ports[x])
			mi_socket.close()
		except socket.error:
			mi_socket.close()
	return 0;

def main():
	try:
		if(sys.argv[1]=="--help"):
			print("sps 1.0 versión")
			print("USE:")
			print("common ports scan:")
			print("sps -c host/ip timeout(optional)")
			print("range ports scan:")
			print("sps -r host/ip initport endport timeout(optional)")
			exit()
	
		if(sys.argv[1]=="-c"):
			if(len(sys.argv)==4):
				scan_common(sys.argv[2], int(sys.argv[3]))
				exit()
			else:
				scan_common(sys.argv[2])
				exit()
		if(sys.argv[1]=="-r"):
			if(len(sys.argv)==6):
				scan_range(sys.argv[2], int(sys.argv[3]), int(sys.argv[4]), int(sys.argv[5]))
				exit()
			else:
				scan_range(sys.argv[2], int(sys.argv[3]), int(sys.argv[4]))
				exit()
		print("invalid option, please use sps --help")
	except (IndexError, ValueError):
		print("syntax or value error, please use sps --help")

if __name__=="__main__":
	main()
else:
	exit()

Tiene básicamente dos modos de funcionamiento, uno es con la opción "-c" que escanea el target pero sólo con puertos comunes establecidos en un diccionario:

sps -c host/ip timeout(opcional)

Por ejemplo:

sps -c hispagnu.org 2

El timeout es el tiempo tope que va a esperar a la conexión para cada puerto, si no se establece ninguno, por defecto el valor es 1.

 

Y el otro modo, algo más común, es con un rango ip:

sps -r host/ip startport endport timeout(opcional)

Por ejemplo:

sps -r hispagnu.org 50 100 5

Sí sólo se quiere escanear un puerto, basta con establecer el mismo puerto para startport como para endport:

sps -r hispagnu.org 80 80 1

Es cierto que existe nmap y utilidades de estas hay a patadas, pero es algo simple que he desarrollado en un rato y quería compartirlo con vosotr@s, lo mismo para aprender algo de python os vale el código.

 

Saludos.

Compartir este post


Enlace al post
Compartir en otros sitios

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Invitado
Responder en este tema...

×   Has incluido contenido con formato.   Eliminar formato

  Sólo se permiten 75 emoticonos como máximo.

×   Tu enlace ha sido insertado automáticamente.   Deshacer y mostrar como enlace

×   Su contenido anterior ha sido restaurado.   Limpiar editor

×   No puedes pegar imágenes directamente. Súbelas a algún hosting de imágenes y pega la dirección URL

Conéctate para seguir esto  

×
×
  • Crear Nuevo...