Enero 17, 2018, 08:39:06 pm

Autor Tema: [Código-PyQT4] Escaner de Puertos - JaAViEr | 0x5d  (Leído 8640 veces)

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

Desconectado JaAViEr

  • ¡ Programming the world !
  • Colaborador
  • ****
  • Mensajes: 8218
  • http://ethereumchile.cl
    • Ver Perfil
    • Ethereum Chile
[Código-PyQT4] Escaner de Puertos - JaAViEr | 0x5d
« en: Octubre 30, 2013, 09:57:33 pm »
Hola !

Luego de meses o quizás año sin tocar la librería QT4 de Python, hoy me quise re-encantar con dicha lib. Ya se me olvidó todo, a tal punto que tuve que re-leer el mismo tutorial que hice hace un tiempo, pero viendo algunos códigos viejos que hice, ya recordé algo :P...

(...) Sin embargo no traigo un graaaaaan código, solo es un Escaner de puertos, con algo de CSS :
Código: (python) You are not allowed to view links. Register or Login
# -*- coding: utf-8 -*-
# self.setGeometry(X, Y, Width, Height)

from PyQt4 import QtGui, QtCore
import sys
import httplib

class programa(QtGui.QWidget):

def __init__(self, parent=None):

QtGui.QWidget.__init__(self, parent)
self.setFixedSize(230, 110)
self.setWindowTitle("Escaner de Puertos")
self.setStyleSheet("background: #000;")
# URL , LABEL URL
self.url = QtGui.QLineEdit(self)
self.url.setGeometry(27, 10, 200, 20)
self.url.setStyleSheet("color: #fff; background: #000;")
self.url_label = QtGui.QLabel("URL:", self)
self.url_label.setStyleSheet("color: #fff;")
self.url_label.setGeometry(3, 10, 25, 20)
# PUERTO, LABEL PUERTO
self.puerto = QtGui.QLineEdit(self)
self.puerto.setGeometry(41, 35, 40, 20)
self.puerto.setStyleSheet("color: #fff; font-weight: bold; background: #000;")
self.puerto_label = QtGui.QLabel("Puerto:", self)
self.puerto_label.setStyleSheet("color: #fff;")
self.puerto_label.setGeometry(3, 36, 35, 20)
# STATUS, LABEL STATUS
self.status_label = QtGui.QLabel("Estado:", self)
self.status_label.setStyleSheet("color: #fff;")
self.status_label.setGeometry(3, 60, 50, 20)
self.esperando = QtGui.QLabel("Esperando", self)
self.esperando.setStyleSheet("color: red; font-weight: bold; background: #000;");
self.esperando.setGeometry(44, 60, 100, 20)
# BOTON
self.boton = QtGui.QPushButton("Scan!", self)
self.boton.setStyleSheet("color: #fff; background: #000; border: 2px solid #fff;")
self.boton.setGeometry(3, 85, 225, 20)
self.connect(self.boton, QtCore.SIGNAL("clicked()"), self.scan)

def scan(self):
url = str(self.url.text())
puerto = int(self.puerto.text())
try:
conn = httplib.HTTPConnection(url, puerto, timeout=2)
BODY = "***filecontents***"
conn.request("GET", "/", BODY)
resp = conn.getresponse()
if resp.status == 200:
self.esperando.setStyleSheet("color: green; font-weight: bold")
self.esperando.setText("%s Abierto" % puerto)
conn.close()
except:
self.esperando.setStyleSheet("color: red; font-weight: bold")
self.esperando.setText("%s Cerrado" % puerto)
app = QtGui.QApplication(sys.argv)
form = programa()
form.show()
app.exec_()

Saludos !
¡MI TWITTER You are not allowed to view links. Register or Login!
You are not allowed to view links. Register or Login !

Desconectado The X-C3LL

  • Troll Profesional
  • Moderador Global
  • *****
  • Mensajes: 2462
  • Sexo: Masculino
  • Bitches, I have my powers again!
    • Ver Perfil
    • 0V3RL04D 1N TH3 N3T
Re:[Código-PyQT4] Escaner de Puertos - JaAViEr | 0x5d
« Respuesta #1 en: Octubre 30, 2013, 10:14:37 pm »
Por lo que puedo ver de tu código, de escaner de puertos no tiene nada. O al menos eso es lo que veo a simple vista. Me explico:

Lo únicos que haces es mandar una petición GET y si te devuelve un "200" lo tomas como que el puerto está abierto. Esto es un sinsentido. GET es una cabecera de un protocolo concreto, el HTTP, que suele establecerse por el puerto 80. ¿Tiene sentido mandar una cabecera HTTP hacia un puerto donde se está esperando otro protocolo, véase por ejemplo IRC? ¿o  hacia un FTP?  Para hacer un escaner tienes que bajar unas cuantas capas y trabajar con TCP/IP.

Por otra parte, si lo que quieres es detectar servidores web ocultos en otros puertos (por intentar poner un contexto a tu herramienta, que no tiene ni pies ni cabeza), partes de una premisa equivocada: no tiene porqué devolverte un 200. El simple hecho de que te devuelva cualquier código de respuesta (300, 500, 400...) ya es indicativo de que hay un servidor web corriendo por ese puerto. ¿Cómo si no ibas a obtener una respuesta ?  :laugh:
« Última modificación: Octubre 30, 2013, 10:27:08 pm por The X-C3LL »
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login - You are not allowed to view links. Register or Login

Desconectado JaAViEr

  • ¡ Programming the world !
  • Colaborador
  • ****
  • Mensajes: 8218
  • http://ethereumchile.cl
    • Ver Perfil
    • Ethereum Chile
Re:[Código-PyQT4] Escaner de Puertos - JaAViEr | 0x5d
« Respuesta #2 en: Octubre 30, 2013, 10:30:32 pm »
Te invito a testear y posteriormente comentar.

EDIT 1:
Jamás subiré algo sin antes haber testeado colega :laugh:

EDIT 2:
Quizás no es la manera más prolija, por no haber utilizado Sockets. Sin embargo si pruebas servicios que no son web como 22, 25, 21 verás los resultados correctos

Saludos !
« Última modificación: Octubre 30, 2013, 10:35:04 pm por JaAViEr »

Desconectado The X-C3LL

  • Troll Profesional
  • Moderador Global
  • *****
  • Mensajes: 2462
  • Sexo: Masculino
  • Bitches, I have my powers again!
    • Ver Perfil
    • 0V3RL04D 1N TH3 N3T
Re:[Código-PyQT4] Escaner de Puertos - JaAViEr | 0x5d
« Respuesta #3 en: Octubre 30, 2013, 10:34:32 pm »
Igual estoy oxidado en python, pero lo que veo es que mandas una petición HTTP, y verificas si te devuelve un 200. Corrigeme si me equivoco :S

Desconectado JaAViEr

  • ¡ Programming the world !
  • Colaborador
  • ****
  • Mensajes: 8218
  • http://ethereumchile.cl
    • Ver Perfil
    • Ethereum Chile
Re:[Código-PyQT4] Escaner de Puertos - JaAViEr | 0x5d
« Respuesta #4 en: Octubre 30, 2013, 10:36:32 pm »
Que sea una librería HTTP no quiere decir que se reserve a puerto 80 nada más, puesto que su sintaxis de uso es
conn = httplib.HTTPConnection(url, puerto) , y esto , sea cual sea el puerto, si devuelve una respuesta correcta, será 200 .

Sería petición HTTP si envío solo puerto 80

Saludos

Desconectado The X-C3LL

  • Troll Profesional
  • Moderador Global
  • *****
  • Mensajes: 2462
  • Sexo: Masculino
  • Bitches, I have my powers again!
    • Ver Perfil
    • 0V3RL04D 1N TH3 N3T
Re:[Código-PyQT4] Escaner de Puertos - JaAViEr | 0x5d
« Respuesta #5 en: Octubre 30, 2013, 10:40:27 pm »
Entonces... ¿esta parte?:

conn.request("GET", "/", BODY)

¿No estás mandando una petición HTTP?

Desconectado JaAViEr

  • ¡ Programming the world !
  • Colaborador
  • ****
  • Mensajes: 8218
  • http://ethereumchile.cl
    • Ver Perfil
    • Ethereum Chile
Re:[Código-PyQT4] Escaner de Puertos - JaAViEr | 0x5d
« Respuesta #6 en: Octubre 30, 2013, 10:43:55 pm »
Colega, ve al notepad o lo que tengas, haz el import httplib y haz lo mismo con puerto 22, 25, 21, etc

Desconectado The X-C3LL

  • Troll Profesional
  • Moderador Global
  • *****
  • Mensajes: 2462
  • Sexo: Masculino
  • Bitches, I have my powers again!
    • Ver Perfil
    • 0V3RL04D 1N TH3 N3T
Re:[Código-PyQT4] Escaner de Puertos - JaAViEr | 0x5d
« Respuesta #7 en: Octubre 30, 2013, 10:52:00 pm »
Entonces... ¿esta parte?:

conn.request("GET", "/", BODY)

¿No estás mandando una petición HTTP?
Colega, ve al notepad o lo que tengas, haz el import httplib y haz lo mismo con puerto 22, 25, 21, etc
[/quote]

Colega, ¿pero estás mandando una cabecera HTTP sí o no? A mí las cosas por arte de magia, no me sirven. ¿Por qué mandas una petición HTTP? Eso es lo que quiero saber, qué motivo hay. Si yo mando una cabecera HTTP hacia el puerto 21 de un servidor con proFTP, jamás en la vida me va a devolver un 200, porque son protocolos diferentes.

Tu puedes mandar una petición HTTP al puerto que te de la real gana, que si lo que hay detrás no entiende ese protocolo, jamás te podrá responder en el mismo protocolo.

Desconectado JaAViEr

  • ¡ Programming the world !
  • Colaborador
  • ****
  • Mensajes: 8218
  • http://ethereumchile.cl
    • Ver Perfil
    • Ethereum Chile
Re:[Código-PyQT4] Escaner de Puertos - JaAViEr | 0x5d
« Respuesta #8 en: Octubre 30, 2013, 11:02:29 pm »
Creo que te estás dejando llevar por el nombre de la librería...
Código: (python) You are not allowed to view links. Register or Login
import httplib
try:
conn = httplib.HTTPConnection("portalhacker.net", "22")
BODY = "***filecontents***"
conn.request("GET", "/", BODY)
resp = conn.getresponse()
print resp.status
except:
print "Cerrado"
el GET / es más "simbólico" en este caso, pues es el que ejecuta la acción de OBTENER (GET).
Corre el código de arriba y déjate sorprender n_n (véase el puerto 22)

Saludos !

Desconectado The X-C3LL

  • Troll Profesional
  • Moderador Global
  • *****
  • Mensajes: 2462
  • Sexo: Masculino
  • Bitches, I have my powers again!
    • Ver Perfil
    • 0V3RL04D 1N TH3 N3T
Re:[Código-PyQT4] Escaner de Puertos - JaAViEr | 0x5d
« Respuesta #9 en: Octubre 30, 2013, 11:09:18 pm »
Estoy corriendo el puerto contra distintos servicios que tengo abiertos en una máquina virtual, y no acierta ni uno.

No me estoy dejando llevar por el nombre de la librería, me estoy dejando llevar por lo que veo en el código, y lo que veo es que mandas una petición GET. Y que después recoges el status que te devuelve el servidor. Estoy mirando la documentación de la librería, y efectivamente, lo que hace es recoger la línea del status de la cabecera de respuesta del servidor. Por lo que, si le estas mandando una petición HTTP a un servidor FTP, ¿cómo diablos va a responderte con una cabecera de respuesta HTTP donde aparezca el status ?

De la única forma en la que tú puedes recibir un código de estado es que contra lo que estás mandando la petición sea un servidor web. Independientemente del puerto en el que esté, 20, 40, 3234, da igual en ese caso sí te respondera. Si lo que hay corriendo en esos puertos es otra cosa diferente a un servidor web, jamás te responderá usando el protocolo HTTP.

Desconectado JaAViEr

  • ¡ Programming the world !
  • Colaborador
  • ****
  • Mensajes: 8218
  • http://ethereumchile.cl
    • Ver Perfil
    • Ethereum Chile
Re:[Código-PyQT4] Escaner de Puertos - JaAViEr | 0x5d
« Respuesta #10 en: Octubre 30, 2013, 11:13:41 pm »
Pues entonces o tu pc está averiado o es el mío.

Acabo de abrir nuevos puertos a mi router, pongo cliente en listening por ese puerto al azar totalmente y probando el programa me dice: Abierto
Luego cierro el puerto del router, lo hecho a andar y pues que crees : Cerrado

EDIT 1:
httplib es un travieso :-*

Desconectado The X-C3LL

  • Troll Profesional
  • Moderador Global
  • *****
  • Mensajes: 2462
  • Sexo: Masculino
  • Bitches, I have my powers again!
    • Ver Perfil
    • 0V3RL04D 1N TH3 N3T
Re:[Código-PyQT4] Escaner de Puertos - JaAViEr | 0x5d
« Respuesta #11 en: Octubre 31, 2013, 03:23:01 pm »
EDIT 1:
httplib es un travieso :-*


No quiero dudar de tu palabra, pero para que eso sea así debe de haber un mago mandandote cabeceras de respuesta HTTP. :P.

Prueba con portalhacker, puertos 25, 26,  110 y 111 :P

Desconectado daryo

  • Yo vivo en CPH
  • ***
  • Mensajes: 639
  • Sexo: Masculino
    • Ver Perfil
    • rootnets
Re:[Código-PyQT4] Escaner de Puertos - JaAViEr | 0x5d
« Respuesta #12 en: Octubre 31, 2013, 03:39:42 pm »
porque no usar sockets?
._. no me editen mi firma #$!

Desconectado JaAViEr

  • ¡ Programming the world !
  • Colaborador
  • ****
  • Mensajes: 8218
  • http://ethereumchile.cl
    • Ver Perfil
    • Ethereum Chile
Re:[Código-PyQT4] Escaner de Puertos - JaAViEr | 0x5d
« Respuesta #13 en: Octubre 31, 2013, 04:49:19 pm »
Pues entonces o tu pc está averiado o es el mío.

Acabo de abrir nuevos puertos a mi router, pongo cliente en listening por ese puerto al azar totalmente y probando el programa me dice: Abierto
Luego cierro el puerto del router, lo hecho a andar y pues que crees : Cerrado

EDIT 1:
httplib es un travieso :-*


No quiero dudar de tu palabra, pero para que eso sea así debe de haber un mago mandandote cabeceras de respuesta HTTP. :P.

Prueba con portalhacker, puertos 25, 26,  110 y 111 :P
[/quote]Hasta cuando te digo:



Saludos ! ¬¬

Desconectado daryo

  • Yo vivo en CPH
  • ***
  • Mensajes: 639
  • Sexo: Masculino
    • Ver Perfil
    • rootnets
Re:[Código-PyQT4] Escaner de Puertos - JaAViEr | 0x5d
« Respuesta #14 en: Octubre 31, 2013, 06:48:02 pm »
que libreria mas rara..


exclamation
[Código-PyQT4]All in one - JaAViEr(0x5d)

Iniciado por JaAViEr

0 Respuestas
1063 Vistas
Último mensaje Febrero 10, 2012, 10:04:46 pm
por JaAViEr
exclamation
[Código-PyQT4] IconFinder - JaAViEr | 0x5d

Iniciado por JaAViEr

7 Respuestas
2794 Vistas
Último mensaje Noviembre 01, 2013, 08:42:58 am
por JaAViEr
exclamation
[Código-PyQT4]Calculadora por secuencias - JaAViEr(0x5d)

Iniciado por JaAViEr

1 Respuestas
1128 Vistas
Último mensaje Diciembre 25, 2011, 01:15:23 pm
por daryo
exclamation
[Código-PyQT4]Extractor de imágenes - JaAViEr(0x5d)

Iniciado por JaAViEr

0 Respuestas
991 Vistas
Último mensaje Diciembre 24, 2011, 01:49:38 pm
por JaAViEr
exclamation
[Código-PyQT4]Detectar campos de un formulario web - JaAViEr|0x5d

Iniciado por JaAViEr

4 Respuestas
1581 Vistas
Último mensaje Abril 17, 2012, 10:20:39 pm
por JaAViEr
exclamation
[Código-PyQT4]Binario a decimal y su inverso - JaAViEr | 0x5d

Iniciado por JaAViEr

0 Respuestas
1067 Vistas
Último mensaje Abril 06, 2012, 03:36:39 pm
por JaAViEr
exclamation
[Código]Escaner de Puertos V2 ~ Python ~ JaAViEr

Iniciado por JaAViEr

5 Respuestas
2983 Vistas
Último mensaje Julio 17, 2010, 02:19:37 pm
por JaAViEr
exclamation
[Código]Escaner de Puertos V1 ~ Python ~ JaAViEr

Iniciado por JaAViEr

0 Respuestas
1762 Vistas
Último mensaje Julio 16, 2010, 06:06:59 pm
por JaAViEr
exclamation
[Tutorial]Aprendiendo PyQT4 [Parte3]- JaAViEr (0x5d)

Iniciado por JaAViEr

0 Respuestas
899 Vistas
Último mensaje Febrero 11, 2012, 01:20:12 pm
por JaAViEr
exclamation
[Tutorial]Aprendiendo PyQT4 [Parte1]- JaAViEr (0x5d)

Iniciado por JaAViEr

0 Respuestas
872 Vistas
Último mensaje Febrero 11, 2012, 12:15:11 pm
por JaAViEr