Hackem Research Group

Grupo de Investigacion dedicado al Software Libre y la Seguridad Informatica

0%

Herraminta de Escaneo con Python y NMAP

Esta es una herramienta que utiliza python y nmap que hace escaneo de puertos e imprime la informacion en archivos JSON y PDF.

Prerequisitos

En este ejemplo se creo un entorno virtual en mi sistema linux
Instalacion en linux, pip y pip3.

1
2
sudo apt-get install python-pip
sudo apt-get install python3-pip

Instalar virtualenv en pip y pip3.

1
2
pip install virtualenv
sudo pip3 install virtualenv

Crear entorno virtual

Para crear el entorno virtual debes dirigirte a la carpeta donde lo deseas instalar, se crear con el comando virtualenv seguido del nombre que le quieras poner, como lo indica el siguiente ejemplo.
Usando Python2.

1
virtualenv nombre_de_tu_entorno

Usando Python3.

1
virtualenv nombre_de_tu_entorno -p python3

Activar / Desactivar entorno virtual

Para activar el entorno virtual debes dirigirte a la nueva carpeta anteriormente creada, ingresa a la carpeta /bin y ejecuta el comando.

Ejemplo:

1
source nombre_entorno_virtual/bin/activate

Para desactivar el entorno virtual:

1
deactivate

En el entorno virtual instalè:

1
2
sudo apt install python3-nmap
pip3 install reportlab

Codificaciòn

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import nmap 
import socket
from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas
import json

def conversionPdf(datos, name):
texto1 = str(datos).split("\\n")
w, h = A4
c = canvas.Canvas(f"{name}.pdf", pagesize=A4)
text = c.beginText(230, h - 100)
datos = c.beginText(50, h - 130)
text.sentFont("Helvetica", 16)
text.textLine("Resultado del escaneo")
fin = len(texto1)
print(fin)
for dato in texto1:
tam = len(dato)
if tam >=87:
datos.textLine(f"{dato[0:87]}")
datos.textLine(f"{dato[88:175]}")
datos.textLine(f"{dato[176:262]}")
c.drawText(datos)
else:
datos.textLine(f"{dato}")
c.drawText(datos)
c.drawText(text)
c.showPage()
c.save()

def conversonJson(datos, name):
texto1 = str(datos).split("\\n")
with open(f'{name}.json' , 'w') as fil:
fin = len(texto1)
json.dump(datos, fil)

print("-----------" * 6)
print(' Escaner con Nmap: ')
print("-----------" * 6)
dir_ip = input ('Direccion IP: ')
rang_puer = input ('Rango de puertos: ')

ipaddrress = socket.gethostbyname(dir_ip)

print("-----------" * 6)
print(" Espera por favor, Escaneando el host: " + ipaddrress)
print("-----------" * 6)

nm = nmap.PortScanner()
nm.scan(dir_ip, rang_puer)

for host in nm.all_hosts():
print(" Host : %s (%s)" % (host,dir_ip))
print(" Estado : %s" % nm[host].state())

for proto in nm[host].all_protocols():
print("-----------" * 6)
print(" Protocolos : %s" % proto)

lport = nm[host][proto].keys()
for port in lport:
print(" Puerto : %s \t Estado : %s" %(port, nm[host][proto][port]['state']))

archivo = input("En que formato desea guardar el escanepo? 1)PDF 2)JSON :")

escane = str (dir_ip)
escaneoo = str (nm.scaninfo())
escaneooo = str (lport)
escaneoooo = ('Host: ', escane + 'Informacion general: ', escaneoo + 'Puertos abiertos: ', escaneooo)

if archivo == '1':
namear = input("Introduce el nombre del archivo a guardar: ")
conversionPdf(escaneoooo, namear)
elif archivo == '2':
namear = input("Introduce el nombre del archivo a guardar: ")
conversonJson(escaneoooo, namear)
else:
print("Opcion no valida")

Y obtuve un resultado como el siguiente: