Saltar al contenido

Escáner de puertos en Python – PythonForBeginners.com

Visión general

Esta publicación mostrará cómo puede hacer un programa de escáner de puertos pequeño y fácil de usar escrito en Python. Hay muchas formas de hacer esto con Python, y lo haré usando el módulo integrado Socket.

Enchufes

El módulo de socket en Python proporciona acceso a la interfaz de socket BSD. Incluye la clase de socket, para manejar el canal de datos real, y funciones para tareas relacionadas con la red, como convertir el nombre de un servidor en una dirección y formatear los datos que se enviarán a través de la red.

Fuente Los sockets se utilizan ampliamente en Internet, ya que están detrás de cualquier tipo de comunicación de red realizada por su computadora.

Los enchufes INET, representan al menos el 99% de los enchufes en uso. El navegador web que utiliza abre un socket y se conecta al servidor web.

Cualquier comunicación de red pasa por un enchufe.

Para obtener más información sobre el módulo de enchufe, consulte la oficial documentación.

Funciones de socket

Antes de comenzar con nuestro programa de muestra, veamos algunas de las funciones de socket que vamos a usar.


Syntax for creating a socket
sock = socket.socket (socket_family, socket_type)

Creates a stream socket
sock = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

AF_INET 
Socket Family (here Address Family version 4 or IPv4) 

SOCK_STREAM Socket type TCP connections 

SOCK_DGRAM Socket type UDP connections 

Translate a host name to IPv4 address format 
gethostbyname("host") 

Translate a host name to IPv4 address format, extended interface
socket.gethostbyname_ex("host")  

Get the fqdn (fully qualified domain name)
socket.getfqdn("8.8.8.8")  

Returns the hostname of the machine..
socket.gethostname()  

Exception handling
socket.error

Hacer un programa usando Python Sockets

Cómo hacer un programa de escáner de puertos simple en Python.

Este pequeño programa de escaneo de puertos intentará conectarse en cada puerto que defina para un host en particular. Lo primero que debemos hacer es importar la biblioteca de socket y otras bibliotecas que necesitemos.

Abra un editor de texto, copie y pegue el código a continuación.

Guarde el archivo como: “portscanner.py” y salga del editor

#!/usr/bin/env python
import socket
import subprocess
import sys
from datetime import datetime

# Clear the screen
subprocess.call('clear', shell=True)

# Ask for input
remoteServer    = raw_input("Enter a remote host to scan: ")
remoteServerIP  = socket.gethostbyname(remoteServer)

# Print a nice banner with information on which host we are about to scan
print "-" * 60
print "Please wait, scanning remote host", remoteServerIP
print "-" * 60

# Check what time the scan started
t1 = datetime.now()

# Using the range function to specify ports (here it will scans all ports between 1 and 1024)

# We also put in some error handling for catching errors

try:
    for port in range(1,1025):  
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        result = sock.connect_ex((remoteServerIP, port))
        if result == 0:
            print "Port {}: 	 Open".format(port)
        sock.close()

except KeyboardInterrupt:
    print "You pressed Ctrl+C"
    sys.exit()

except socket.gaierror:
    print 'Hostname could not be resolved. Exiting'
    sys.exit()

except socket.error:
    print "Couldn't connect to server"
    sys.exit()

# Checking the time again
t2 = datetime.now()

# Calculates the difference of time, to see how long it took to run the script
total =  t2 - t1

# Printing the information to screen
print 'Scanning Completed in: ', total

Salida de muestra

Ejecutemos el programa y veamos cómo se ve una salida

$ python portscanner.py

Enter a remote host to scan: www.your_host_example.com
------------------------------------------------------------
Please wait, scanning remote host xxxx.xxxx.xxxx.xxxx
------------------------------------------------------------

Port 21:   Open
Port 22:    Open
Port 23:    Open
Port 80:    Open
Port 110:   Open
Port 111:   Open
Port 143:   Open
Port 443:   Open
Port 465:   Open
Port 587:   Open
Port 993:   Open
Port 995:   Open

Scanning Completed in:  0:06:34.705170

Descargo de responsabilidad

Este programa está destinado a que las personas prueben su propio equipo en busca de una seguridad débil, y el autor no asumirá ninguna responsabilidad si se le da cualquier otro uso.

Entrenamiento de Python recomendado

Para el entrenamiento de Python, nuestra principal recomendación es DataCamp.