Buenas!! Cuando he hecho la parte del proxy HTTP entendí su funcionamiento y todo, pero ahora en la parte de HTTPS. no acabo de entender muy bien.... Modifiqué el código, para ver mejor lo que esta pasando...
Hice varias pruebas y ninguna me surgió nada interesante... donde pueda partir de alla. Cree la clase Send_data_tls con la funcion send_data (creo una clase por que me imagino que tengo que hacer algo antes de enviar los datos a la web HTTPS).
En la funcion get_data en la condicional cargo la clase en la variable SSL y ejecuto la funcion send_data().
Lo que pasa, y cuya cosa ya me dí cuenta es que, al conectarme a la web por 443
Citar
data sent: b'CONNECT platzi.com:443 HTTP/1.1\r\nUser-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0\r\nProxy-Connection: keep-alive\r\nConnection: keep-alive\r\nHost: platzi.com:443\r\n\r\n'
Este se conecta antes con el servidor Cloudflare (creo que la CA para autenticar el certificado), y este por alguna razon me recibe el 400 Bad Request.
El problema en que no entiendo que esta pasando y que debo hacer.... El cloudflare me esta rechazando.
Puedo hacer lo que quiero hacer con unicamente el modulo ssl?
Segun @el-brujo me dijo que con ese modulo me bastava. Hay algun post o sitio donde expliquen como funciona este modulo?
Este archivo PHP contiene HTML, pureba de cambiar tu archivo a:
Código:
<?php // [...] echo '<h6>Este es el dato de ajax: <script type="text/javascript">document.write("un dato");';</script></h6> // [...]
OJO! Son comillas simples en el echo porque dentro del string utilizas comillas dobles. [en el string de write() cambie las comillas simples por las dobles ya que sino produciria un error] v--------- PHP v--------- PHP ' ' ' ' " " " " ^-----^------- strings ^-----^------- strings
Buenas! He modificado el código y al detectar que el puerto es 443 he creado la funcion send_data_tls() donde le envio los mismos argumentos.
Código:
if port == 443: send_data_tls(website, int(port), data, conn) else: send_data(website, int(port), conn, data, addr)
funcion send_data_tls
Código:
def send_data_tls(site, port, data, conn): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sender = ssl.wrap_socket(s, do_handshake_on_connect=False, ssl_version=ssl.PROTOCOL_TLS) sender.connect((site,port)) print("\033[1;32m data sent\033[0m: "+str(data)) sender.send(data) while True: reply = sender.recv(BUFFER_RECV) sender.send(reply) print("\033[1;32m data sent X2\033[0m: "+str(reply))
Cuando lo ejecuto me imprime lo siguiente en la pantalla: imagenes:https://drive.google.com/drive/folders/1S4GZBjBUziGXvo_wNpVon8EkyoEs1tue?usp=sharing
Como se puede ver en las imagenes, la salida me imprime bién los datos a enviar:
Pero cuando recibo la respuesta, recibo un erro 400 Bad Request:
Citar
b'HTTP/1.1 400 Bad Request\r\nServer: cloudflare\r\nDate: Wed, 22 Jul 2020 09:30:08 GMT\r\nContent-Type: text/html\r\nContent-Length: 155\r\nConnection: close\r\nCF-RAY: -\r\n\r\n<html>\r\n<head><title>400 Bad Request</title></head>\r\n<body>\r\n<center><h1>400 Bad Request</h1></center>\r\n<hr><center>cloudflare</center>\r\n</body>\r\n</html>\r\n'
Además me sale el siguiente error:
Citar
ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:2162)
El error 400 indica que la petición que fue enviada no a podido ser procesada por algún tipo de error. Que puede estar causando este error?
En realidad no acabo de entender porque, yo me conecto a un sitio web por el puerto 443, y envio los datos envidos con data() a otro servidor, en este caso a Cloudflare. Es aquí que yo no entiendo que datos tengo que enviar o que debo de hacer. ¿Este es el paso donde se hace el handshake antes de conectarse al sitio web?
Este post debería de estar en la categoria de Programación > Desarrollo Web
Te recomiendo que mires este videotutorial en Youtube
Citar
Se trataría de que, según el valor de un campo de la base de datos (mysql), mostrar una imagen u otra en la web. También he pensado en crear un sistema de notificaciones: si un campo mysql tiene determinado valor enviar una notificación al usuario.
Para este caso, lo que quieres hacer se tiene que utilizar AJAX para permitir enviar datos obtenidos con jquery a un archivos PHP para procesarlo.
2. Después con el puerto especificado, creo una conexion socket servidor bind(), y obtengo los datos recibidos, con ello, ejecuto un hilo, donde paso los datos de la conexion y datos a la funcion get_data.
4. Una vez sé en que dominio estoy haciendo la petición, si el dominio contiene ":" cogeré el puerto especificado. Por defecto el puerto es 80, si no se detecto ":" en el dominio.
Código:
port = 80 if website.count(":") == 1: list = website.split(":") website = list[0] port = list[1] port = int(port) print("\n\033[1;32mwebsite\033[0m: "+str(website)+" \033[1;32mport\033[0m: "+str(port))
5. Finalmente ejecuto la funcion send_data con sus argumentos, para que me haga una conexion socket cliente al servidor y envie los datos, con un bucle.
En send_data añadí un argumento booleano llamada SSL, que antes de hacer nada, si este es True, sería https, lo que no sé muy bien, es que hacer aquí.
Me he mirado el funcionamiento de los sitios HTTPS en youtube.
En el minuto 2:16, explica con más profundidad como trabaja este protocolo. He pensado, si hay alguna forma de obtener el certificado que me da el servidor para obtener la llave publica.... pero no se muy bien.
Como bien me imaginaba esto no funciona, ya que tendría que coger el certificado que me da el dominio al hacer la peticion. No acabo de entender muy bien en las variables de crt y key, que llaves tengo que poner...
Buenas. Como hago para ve por la terminal, la transferencia que tiene una descarga desde internet.
Es decir, descargo desde internet cualquier cosa en mi pc (localmente), y al conectarme desde fuera por ssh a cuyo pc. Como hago para ver cuanto tiempo falta la descarga? A traves de la terminal.
Hola, estoy haciendo un servicio linux,sobre prevención de ataques de fuerza bruta por ssh. Lo tengo todo finalizado.
Solamente me hace falta crear el servicio y un script para añadirlo en /etc/init.d/ y configurarlo (/etc/rc?.d/) para que al inicar el equipo, se inicie.
Creo el servicio, creando un archivo con extension .service en /etc/systemd/system/sshield.service
Código:
[Unit] Description=Service for protect attacks of brute force ssh's
####################################################### GITHUB repositorio: https://github.com/cleanet/GTE ####################################################### ####################################################### SITIO WEB: cleanet.260mb.net ####################################################### Software con licencia MIT
Esta aplicación web, es free software y open source.
Se creó con la finalidad de un uso educativo, facilitando la gestión de tareas dentro de las aulas. Tanto para el profesorado como el alumnado.
Cada aula tiene su lugar en la web, donde hay un calendario, para añadir eventos independientes de otras aulas. Además también pueden añadir tanto enlaces como actividades interactivas embebidos para que puedan practicar lo aprendido.
El profesorado, podrá añadir vacaciones a los calendarios. Asi como añadir actividades interactivas.
Título: Gestión de Tareas Escolares Autor: cleanet Año: 2020
En la carpeta root está el PDF 'guia.pdf', donde explica el funcionamiento y la utilización del proyecto. Y en la carpeta 'instalacion' esta el pdf 'instalacion.pdf' in español, donde explica paso a paso como levantar un servidor Linux y configuar el proyecto en él.
Cualquier duda o reporte, no duden en contactarme por correo o aquí mismo.