elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


Páginas: [1] 2 3 4 5 6 7 8 9 10
 1 
 en: Ayer a las 12:33 
Iniciado por Aladino1967 - Último mensaje por Aladino1967
Hola a todos: mi problema es el siguiente he actualizado mi Kali linux, y cuando le doy reiniciar y valido con mi usuario se queda congelado, cuando inicio la sesión en la consola me sale el siguiente error:
rtw_8821ce 0000:01:00.0: failed to send h2c command
realizando un uname -r me resuelve lo siguiente
6.8.11-amd64
luego ejecuto
lspci -nnk | grep -A3 -i network
me inidca que el siguiente error "File !usr/lib/commnad-not-found"
luego ejeciuto este comando
sudo dmesg | grep rtw
rtw_8822ce 0000:01:00:0 failed to send h2c command
tyw 8822ce 0000:01:00:0 firmware failed to leave lps state
ejecuto: sudo nano/etc/modprobe.d/rtw88.conf
y el fichero me lo encuentro vació
y agrego estas lineas para que me cargue la configuración
options rtw88_pci disable_aspm=y
options rtw88_core disable_lps_deep=y
blacklist rtw88_8821ce
blacklist rtw88_core
Lo guardo y hago un reboot y prosigue el problema
He tratado de arrancar en modo prueba con las opciones avanzadas de Kali Linux
y obtengo el mismo resultado.










 2 
 en: Ayer a las 03:37 
Iniciado por El_Andaluz - Último mensaje por El_Andaluz


La campaña de la renta 2026 en España se desarrolla entre el 8 de abril y el 30 de junio y, como es habitual, muchas personas están pendientes de posibles mensajes relacionados con sus impuestos. En estas fechas, cualquier correo que parezca venir de un organismo oficial puede generar preocupación y urgencia, sobre todo si se habla de gestiones pendientes o posibles problemas.

Sin embargo, esta situación la aprovechan los ciberdelincuentes, quienes adaptan sus fraudes al momento para aumentar las probabilidades de engaño. Recientemente, la empresa de ciberseguridad ESET ha detectado una campaña de correos electrónicos fraudulentos que se hacen pasar por la Agencia Tributaria con el objetivo de infectar los equipos de los usuarios.



 3 
 en: Ayer a las 03:33 
Iniciado por El_Andaluz - Último mensaje por El_Andaluz


Las estafas por internet se han disparado en los últimos años y, a raíz del auge por la inteligencia artificial para generar contenido, se han vuelto cada vez más difíciles de detectar. La compañía estadounidense de ciberseguridad Malwarebytes revela en un estudio que el 66% de las personas reconoce que es difícil distinguir entre un fraude de una estafa real, ya que son tan sofisticadas que "incluso los usuarios de internet más experimentados se ven sorprendidos".

Ante esta situación, desde Malwarebytes han lanzado un detector de estafas para distinguir un fraude de algo auténtico. Concretamente, dicha herramienta busca frenar los intentos de estafa con un sistema de inteligencia artificial que se puede incorporar directamente en Claude, de modo que los usuarios pueden comprobar si un contenido es sospechoso sin tener que salir de la conversación con el chatbot. Pero,¿cómo se usa?

La compañía de ciberseguridad explica en el estudio que las personas pueden activar la herramienta en Claude sin necesidad de tener una cuenta creada de Malwarebytes. Estos son los pasos a seguir:

-Abrir 'Claude' → 'Personalizar' → 'Conectores'.

-Hacer clic en el botón '+' y seleccionar 'Explorar conectores'.

-Buscar 'Malwarebytes' y presionar en 'Conectar'.

Una vez realizadas estas acciones, los interesados solo tienen que pedir a Malwarebytes que revise enlaces, mensajes de textos, sitios web o correos electrónicos sospechosos, de esta manera, obtendrán respuestas instantáneas y confiables gracias a una "innovadora inteligencia sobre amenazas".



Así puedes detectar una estafa con Claude

Como acabamos de mencionar, los internautas pueden comprobar enlaces que hayan recibido para que Claude reconozca si es seguro hacer clic sobre la URL o no, números de teléfono para verificar si están relacionados con estafas, direcciones de correo electrónico para comprobar si están vinculados a actividades de phishing, e incluso dominios para ver si son legítimos. Además, en caso de recibir un mensaje con varios enlaces, números de teléfono o direcciones de correo electrónico, Claude puede comprobarlos todos en un solo paso.

En caso de confirmar que algo es una estafa, los usuarios pueden pedirle a Claude que lo reporten al equipo de inteligencia de amenazas de Malwarebytes para que lo analicen más a fondo. Estas son las categorías en las que puede oscilar un fraude:

Malicioso: El enlace, número o dirección de correo electrónico representa una amenaza confirmada.

Sospechoso: El enlace, número o dirección de correo electrónico podría ser peligroso. Se recomienda proceder con precaución.

Seguro: El enlace, número o dirección de correo electrónico es conocido y legítimo. Es seguro interactuar con él.

Desconocido: No hay información disponible en la base de datos de inteligencia sobre amenazas. Esto no significa que sea seguro, sin embargo, se ha de tener en cuenta que cualquier resultado "desconocido" activará una consulta WHOIS para detectar contactos de abuso del registrador.




Con permiso pongo este articulo aquí creo que es el sitio de adecuado si no es así pues moverlo al sitio adecuado.

Saludos. ;)

 4 
 en: Ayer a las 03:24 
Iniciado por El_Andaluz - Último mensaje por El_Andaluz

La inteligencia artificial de Google es capaz de crear imágenes con un gran nivel de detalle gracias al modelo Nano Banana, puede redactar textos, programar código, detectar spam telefónico, detener estafas en tiempo real, recordar información de conversaciones anteriores y, ahora, gracias a una reciente actualización, es capaz de crear archivos de Office.

La compañía de Mountain View anuncia en una publicación de su blog oficial que "ahora es más fácil convertir las mejores ideas en archivos descargables y listos para compartir" porque, con una sola indicación, Gemini puede crear archivos PDF, Word y Excel, Google Docs, Sheets o Slides directamente en el chat.

Esto significa que los usuarios pueden pasar rápidamente de una lluvia de ideas a un archivo completo sin salir de Gemini. Además, en lugar de copiar y pegar, dicha actualización permite transferir el trabajo a diferentes aplicaciones, de esta manera, se puede exportar una propuesta de presupuesto a un archivo Excel o una lluvia de ideas a un PDF o documento Word. "Para la mayoría de los formatos, se puede descargar el archivo directamente al dispositivo o exportarlo a Google Drive", agrega la compañía.



 5 
 en: Ayer a las 03:20 
Iniciado por El_Andaluz - Último mensaje por El_Andaluz

El Departamento de Defensa de Estados Unidos ha comunicado este viernes la firma de un acuerdo con siete grandes tecnológicas líderes en inteligencia artificial (IA) para reforzar su uso en "redes clasificadas" de máxima seguridad como parte de una estrategia para priorizar el uso de esta herramienta en las operaciones militares.

Los contratos con SpaceX, OpenAI, Google, NVIDIA, Reflection, Microsoft y Amazon Web Services "aceleran la transformación hacia el establecimiento de unas Fuerzas Armadas de los Estados Unidos con la IA como centro de su forma de combatir", según ha expresado el Pentágono en un comunicado. La inteligencia artificial se utilizará en las redes con Niveles de Impacto 6 y 7, que son sistemas de seguridad nacional que manejan "información crítica para misiones de alta sensibilidad".

Estas alianzas "reforzarán la capacidad para mantener una superioridad decisoria en todos los ámbitos de la guerra", según el texto, que resalta la "convicción compartida" de que "el liderazgo estadounidense en el ámbito de la inteligencia artificial es indispensable para la seguridad nacional" del país. La integración de la IA "agilizará la síntesis de datos, elevará la comprensión situacional y potenciará la toma de decisiones de los combatientes en entornos operativos complejos", agregó el Departamento.



 6 
 en: 2 Mayo 2026, 06:56 am 
Iniciado por enrique4480 - Último mensaje por Tachikomaia
Está bien, pero no entiendo de tecnología nueva, con qué lo estás haciendo, veo unos símbolos moverse hacia un costado... Bueno, los actualizados supongo que no necesitan tanta explicación.

¿Puedes poner por ejemplo un barco en un mar? Digo, un fondo que tenga movimiento, y un barco en vez de letras. No tiene por qué ser un mar ni un barco, sólo preguntaba si es posible que el fondo tenga movimiento, fue un ejemplo, puede ser fuego en una vela o ramas moviéndose por viento. Le pones un fantasma o un OVNI. Y tú delante.

Es buena idea para ciertos youtubers que ponen sus cuartos, imagina poner cualquier cosa de fondo.

 7 
 en: 2 Mayo 2026, 01:36 am 
Iniciado por Tachikomaia - Último mensaje por Tachikomaia
Mis trámites por ruidos siguen, pero la principal causa por la que dejé de participar es que se rompió mi PC. Creo que por dejar de usarla tanto tiempo, o sea la usaba casi todo el tiempo, pero los problemas que tuve me llevaron a usarla menos y eso creo que hizo que le costara más encenderse y mantenerse encendida. Creo que la limpié y no hubo mucho caso. La llevé a un sitio y me dijeron que era demasiado antigua como para poder arreglarla. Qué sé yo, cuando pueda les mando una foto. Luego la limpié y funcionó pero tiraba pantallazos azules, se apagó luego de que copié unas cosas y no la usé un rato, y ya no quiso más, ni yo seguir probando, si prende cuando quiere y se apaga cuando quiere. Además tenía el pendrive puesto y le di vueltas a la PC, se quebró esa parte y un trozo quedó dentro del pendrive. Lo intenté sacar de un mal modo, apretando hacia la entrada, cuando más arriba tiene unos agujeritos por los que se puede empujar. Por suerte pude volver a usarlo, quedó torcido y con una parte como raspada.

Conseguir otra PC fue difícil, por acá no me ofrecían usadas ni algo parecido. Alguien me dijo que averiguaría pero no me llamó, y no es que esa persona me caiga del todo bien, ya está. Lo más parecido que me habían ofrecido era una por $20000 uruguayos, no recuerdo las especificaciones, me parecía demasiado. Conseguí esta por $5000 uruguayos:
Intel(R) Core(TM) i3-6100 CPU @ 3.70GHz   3.70 GHz
4,00 GB
Disco de 500 GB
Incluye grabadora de DVD creo, en realidad sólo quería que se le pudiera poner, que ya tengo, pero no la uso mucho claro, sólo quiero ir pasando cosas.

Mi antigua tenía Windows 7. Esta el 10. Parece mucho más lento, o es que no paraban de actualizarse cosas, y visualmente es como demasiado aburrido.

Al presionar el tilde me aparecía esto { o algo parecido. La IA insistía en que ponga que era teclado latinoamericano, pero eso es lo que estaba puesto. Probé el de españa y sirvió.

Puse que la resolución sea de 1024x768 o algo así, sino todo se me ve demasiado chico. Resultó que la pantalla no se estiraba del todo. Descargué drivers, un asistente, todo recomendado por la IA, pero lo que me sirvió fue algo que ni me acuerdo, una especie de configurador de Intel en Microsoft Store, algo como Centro de comandos de Intel. Parece que como mi monitor es demasiado antiguo, tipo 4:3, cuando los de ahora son más anchos, los nuevos drivers no funcionan bien. Deberían funcionar para todo, déjense de joder.

El sonido no funcionaba, usando el solucionador de problemas me dijo que podía ser por unos efectos que tenía configurados, los sacó y funcionó.

Macromedia Flash 5 decía que no podía modificar el registro. La IA me dijo que cree un acceso directo que tenga permisos de administrador. También me aparecía un cartel de si quería permitir que haga cambios en el equipo. Luego no me abría archivos. Capaz que uds me habían dicho cómo resolver todo eso, pero no recuerdo, por ahora tuve que cambiar la seguridad de Windows, que no me paralice Flash, la IA me dijo que no es posible poner exepciones, que sino los virus se pondrían como excepciones, o sea Windows te advierte de cada programa sospechoso según él, o de ninguno, no hay termino medio. Luego continuando la charla me dijo que hay programas que crean accesos directos especiales y que cambiando el registro se puede lograr que Windows abra los fla usando ese acceso directo, pero está complicado. Si me pueden ayudar con esto, estaría bueno.

En cuanto a lo vistual, aún no he tocado mucho, por ahora la esperanza es un tal tema Aerolite que según la IA Microsoft puso pero es complicado hacer que funcione. Joder, qué pesados.

Microsoft Edge parece empecinarse en ser el navegador predeterminado, sobre eso voy a tener que actuar también, y no quiero que se estén actualizando y ejecutando cosas que no uso. Les iré preguntando en otros momentos.

En mis proyectos no he avanzado mucho, más bien sólo en el de la IA para Signos en línea, tengo esto cerca de terminarlo:
Código
  1. // 3 en línea muy simplificado:
  2. // 2 jugadores rivales, A y B.
  3. // No hay tablero, hay una cadena de texto.
  4. // La acción es poner 0 o 1 en el 1er sitio disponible.
  5. // Hay victoria de A cuando la cadena tiene 3 "0",
  6. // victoria de B cuando la cadena tiene 3 "1",
  7. // y empate cuando no hay victoria y...
  8. // la cadena tiene 4 caracteres:
  9. //
  10. // Situaciones a investigar:
  11. S1 = "";
  12. S2 = "0";
  13. S3 = "1";
  14. S4 = "00";
  15. S5 = "01";
  16. S6 = "10";
  17. S7 = "11";
  18. S8 = "001";
  19. S9 = "010";
  20. S10 = "011";
  21. S11 = "100";
  22. S12 = "101";
  23. S13 = "110";
  24. //
  25. // Indica de qué nro de situación se cargarán datos:
  26. NDeSInvestigandose = 13;
  27. do {
  28.    SInvestigandose = eval("S"+NDeSInvestigandose);
  29.    // Se ponen valores malos o peores que los posibles...
  30.    // para que sean fáciles de superar por...
  31.    // valores obtenidos y no se sustituyan por iguales:
  32.    // Averiguar de quién es el turno:
  33.    if (SInvestigandose.length%2 == 0) {
  34.        Turno = "A";
  35.        // Asumiendo que ambos juegan bien
  36.        // (usan su BestAction),
  37.        // indica el ganador (A o B) o empate (E);
  38.        // el resultado no es necesariamente inmediato:
  39.        EndEsperadoDeBest = "B";
  40.        // Si A siempre usa su BestAction y B juega al azar
  41.        // (esto se va sustituyendo por mejores resultados):
  42. // PROBABLEMENTE EN VEZ DE ALOSE Y BLOSE SE PODRÍA USAR DRAW
  43. // PORQUE EL LOSE DE UNO ES IGUAL AL WIN DEL OTRO.
  44.        ALoseChanceDeBest = 101;
  45.        AWinChanceDeBest = 0;
  46.        // Si B siempre usa su BestAction y A juega al azar
  47.        // (a esto se le va sumando para luego promediarlo):
  48.        BLoseChanceDeBest = 0;
  49.        BWinChanceDeBest = 0;
  50.    } else {
  51.        Turno = "B";
  52.        // Básicamente todo es al revés:
  53.        EndEsperadoDeBest = "A";
  54.        ALoseChanceDeBest = 0;
  55.        AWinChanceDeBest = 0;
  56.        BLoseChanceDeBest = 101;
  57.        BWinChanceDeBest = 0;
  58.    }
  59.    trace ("Investigando la situación "+SInvestigandose+", es el turno de "+Turno);
  60.    // Acción a realizar 1ero:
  61.    Action = 0;
  62.    // PROBABLEMENTE AÚN INNEC
  63.    // Mejor acción hallada hasta ahora en la NDeSInvestigandose:
  64.    BestAction = 0;
  65.    // PROBABLEMENTE AÚN INNEC
  66.    // Usando siempre BestAction indica cuántas acciones...
  67.    // faltan para llegar a un final, contando esta:
  68.    DistanciaDeBest = 0;
  69.    // Si ambos jugaran al azar
  70.    // (a esto se le va sumando para luego promediarlo):
  71.    ALoseChance = 0;
  72.    AWinChance = 0;
  73.    BLoseChance = 0;
  74.    BWinChance = 0;
  75.    do {
  76.        // Nueva situación al aplicarle una acción...
  77.        // a la investigada:
  78.        NewS = SInvestigandose+Action;
  79.        // Para evitar reconcatenar al cargar datos...
  80.        // de la nueva situación:
  81.        SNewS = "S"+NewS;
  82.        trace ("Se realizó la acción "+Action+", el resultado es "+NewS);
  83.        // Para evaluar el resultado:
  84.        CantidadDe0s = 0;
  85.        CantidadDe1s = 0;
  86.        CaracterRevisandose = 0;
  87.        do {
  88.            if (NewS.charat(CaracterRevisandose) == "0") {
  89.                CantidadDe0s++;
  90.            } else {
  91.                CantidadDe1s++;
  92.            }
  93.            CaracterRevisandose++;
  94.        } while (CaracterRevisandose<NewS.length);
  95. ///////////////////////////////////////////////////////////
  96. // Turno de A:
  97. ///////////////////////////////////////////////////////////
  98.        if (Turno == "A") {
  99.            if (CantidadDe0s == 3) {
  100.                trace ("Victoria de A");
  101.                BLoseChanceDeBest = BLoseChanceDeBest+100;
  102.                AWinChance = AWinChance+100;
  103.                BLoseChance = BLoseChance+100;
  104.                if (EndEsperadoDeBest != "A") {
  105.                    trace ("Se sustituyen datos sobre qué hacer en la investigada y por qué");
  106.                    BestAction = Action;
  107.                    EndEsperadoDeBest = "A";
  108.                    DistanciaDeBest = 0;
  109.                    ALoseChanceDeBest = 0;
  110.                    AWinChanceDeBest = 100;
  111.                }
  112.            } else if (CantidadDe1s == 3) {
  113.                trace ("Derrota de A");
  114.                BWinChanceDeBest = BWinChanceDeBest+100;
  115.                ALoseChance = ALoseChance+100;
  116.                BWinChance = BWinChance+100;
  117.                if (ALoseChanceDeBest == 101) {
  118.                    trace ("Es el mejor resultado hallado, se sustituyen datos sobre qué hacer en la S investigada y por qué");
  119.                    BestAction = Action;
  120.                    DistanciaDeBest = 0;
  121.                    ALoseChanceDeBest = 100;
  122.                    AWinChanceDeBest = 0;
  123.                }
  124.            } else if (NewS.length == 4) {
  125.                trace ("Empate");
  126.                if (EndEsperadoDeBest == "B") {
  127.                    trace ("Es el mejor resultado hallado, se sustituyen datos sobre qué hacer en la S investigada y por qué");
  128.                    BestAction = Action;
  129.                    EndEsperadoDeBest = "E";
  130.                    DistanciaDeBest = 0;
  131.                    ALoseChanceDeBest = 0;
  132.                    AWinChanceDeBest = 0;
  133.                }
  134.            } else {
  135.                trace ("No es un final, se vará qué tan conveniente es");
  136.                NewEndEsperadoDeBest = eval(SNewS+"EndEsperadoDeBest");
  137.                if (NewEndEsperadoDeBest == "A") {
  138.                    trace ("Se espera victoria");
  139.                    if (NewEndEsperadoDeBest != EndEsperadoDeBest) {
  140.                        trace ("Es el mejor resultado hallado, se sustituyen datos sobre qué hacer en la S investigada y por qué");
  141.                        BestAction = Action;
  142.                        EndEsperadoDeBest = "A";
  143.                        DistanciaDeBest = eval(SNewS+"DistanciaDeBest");
  144.                        ALoseChanceDeBest = eval(SNewS+"ALoseChanceDeBest");
  145.                        BWinChanceDeBest = eval(SNewS+"BWinChanceDeBest");
  146.                    } else if (NewEndEsperadoDeBest == EndEsperadoDeBest) {
  147.                        // inútil aquí quizá
  148.                        trace ("Es igual al mejor resultado hallado, se verá la distancia");
  149.                        NewDistanciaDeBest = eval(SNewS+"DistanciaDeBest");
  150.                        if (NewDistanciaDeBest<DistanciaDeBest) {
  151.                            trace ("Es menor, se sustituyen datos sobre qué hacer en la S investigada y por qué");
  152.                            BestAction = Action;
  153.                            DistanciaDeBest = NewDistanciaDeBest;
  154.                            ALoseChanceDeBest = eval(SNewS+"ALoseChanceDeBest");
  155.                            AWinChanceDeBest = eval(SNewS+"AWinChanceDeBest");
  156.                        } else if (NewDistanciaDeBest == DistanciaDeBest) {
  157.                            trace ("Es igual, se verá la chance de perder");
  158.                            NewALoseChanceDeBest = eval(SNewS+"ALoseChanceDeBest");
  159.                            if (NewALoseChanceDeBest<ALoseChanceDeBest) {
  160.                                trace ("Es menor, se sustituyen datos sobre qué hacer en la S investigada y por qué");
  161.                                BestAction = Action;
  162.                                ALoseChanceDeBest = NewALoseChanceDeBest;
  163.                                AWinChanceDeBest = eval(SNewS+"AWinChanceDeBest");
  164.                            } else if (NewALoseChanceDeBest == ALoseChanceDeBest) {
  165.                                trace ("Es igual, se verá la chance de ganar");
  166.                                NewAWinChanceDeBest = eval(SNewS+"AWinChanceDeBest");
  167.                                if (NewAWinChanceDeBest>AWinChanceDeBest) {
  168.                                    trace ("Es mayor, se sustituyen datos sobre qué hacer en la S investigada y por qué");
  169.                                    BestAction = Action;
  170.                                    AWinChanceDeBest = NewAWinChanceDeBest;
  171.                                } else if (NewAWinChanceDeBest == AWinChanceDeBest) {
  172.                                    trace ("Es igual, se verán las chances por azar");
  173.                                    // falta esto
  174.                                }
  175.                            }
  176.                        }
  177.                    }
  178.                } else if (NewEndEsperadoDeBest == "E") {
  179.                    trace ("Se espera empate");
  180.                    if (EndEsperadoDeBest == "B") {
  181.                        trace ("Es el mejor resultado hallado, se sustituyen datos sobre qué hacer en la S investigada y por qué");
  182.                        BestAction = Action;
  183.                        EndEsperadoDeBest = "E";
  184.                        DistanciaDeBest = eval(SNewS+"DistanciaDeBest");
  185.                        ALoseChanceDeBest = eval(SNewS+"ALoseChanceDeBest");
  186.                        BWinChanceDeBest = eval(SNewS+"BWinChanceDeBest");
  187.                    } else if (EndEsperadoDeBest == "E") {
  188. // ESTA PARTE ES CASI IGUAL A UNA ANTERIOR, AQUÍ SE DEFINE DISTANCIA
  189.                        trace ("Es igual al mejor resultado hallado, se verá la chance de perder");
  190.                        NewALoseChanceDeBest = eval(SNewS+"ALoseChanceDeBest");
  191.                        if (NewALoseChanceDeBest<ALoseChanceDeBest) {
  192.                            trace ("Es menor, se sustituyen datos sobre qué hacer en la S investigada y por qué");
  193.                            BestAction = Action;
  194.                            DistanciaDeBest = eval(SNewS+"DistanciaDeBest");
  195.                            ALoseChanceDeBest = NewALoseChanceDeBest;
  196.                            AWinChanceDeBest = eval(SNewS+"AWinChanceDeBest");
  197.                        } else if (NewALoseChanceDeBest == ALoseChanceDeBest) {
  198.                            trace ("Es igual, se verá la chance de ganar");
  199.                            NewAWinChanceDeBest = eval(SNewS+"AWinChanceDeBest");
  200.                            if (NewAWinChanceDeBest>AWinChanceDeBest) {
  201.                                trace ("Es mayor, se sustituyen datos sobre qué hacer en la S investigada y por qué");
  202.                                BestAction = Action;
  203.                                DistanciaDeBest = eval(SNewS+"DistanciaDeBest");
  204.                                AWinChanceDeBest = NewAWinChanceDeBest;
  205.                            } else if (NewAWinChanceDeBest == AWinChanceDeBest) {
  206.                                trace ("Es igual, se verán las chances por azar");
  207.                                // falta esto
  208.                            }
  209.                        }
  210.                    }
  211.                } else {
  212.                    trace ("Se espera derrota");
  213.                    if (NewEndEsperadoDeBest == EndEsperadoDeBest) {
  214.                        trace ("Es igual al mejor resultado hallado, se verá la chance de perder");
  215. // ESTA PARTE ES IGUAL A UNA ANTERIOR (se define distancia)
  216.                        NewALoseChanceDeBest = eval(SNewS+"ALoseChanceDeBest");
  217.                        if (NewALoseChanceDeBest<ALoseChanceDeBest) {
  218.                            trace ("Es menor, se sustituyen datos sobre qué hacer en la S investigada y por qué");
  219.                            BestAction = Action;
  220.                            DistanciaDeBest = eval(SNewS+"DistanciaDeBest");
  221.                            ALoseChanceDeBest = NewALoseChanceDeBest;
  222.                            AWinChanceDeBest = eval(SNewS+"AWinChanceDeBest");
  223.                        } else if (NewALoseChanceDeBest == ALoseChanceDeBest) {
  224.                            trace ("Es igual, se verá la chance de ganar");
  225.                            NewAWinChanceDeBest = eval(SNewS+"AWinChanceDeBest");
  226.                            if (NewAWinChanceDeBest>AWinChanceDeBest) {
  227.                                trace ("Es mayor, se sustituyen datos sobre qué hacer en la S investigada y por qué");
  228.                                BestAction = Action;
  229.                                DistanciaDeBest = eval(SNewS+"DistanciaDeBest");
  230.                                AWinChanceDeBest = NewAWinChanceDeBest;
  231.                            } else if (NewAWinChanceDeBest == AWinChanceDeBest) {
  232.                                trace ("Es igual, se verán las chances por azar");
  233.                                // falta esto
  234.                            }
  235.                        }
  236.                    }
  237.                }
  238.                // Se suman las chances de la situación obtenida:
  239.                ALoseChance = ALoseChance+eval(SNewS+"ALoseChance");
  240.                AWinChance = AWinChance+eval(SNewS+"AWinChance");
  241.                BLoseChance = BLoseChance+eval(SNewS+"BLoseChance");
  242.                BWinChance = BWinChance+eval(SNewS+"BWinChance");
  243.                ALoseChanceDeBest = ALoseChanceDeBest+eval(SNewS+"ALoseChanceDeBest");
  244.                AWinChanceDeBest = AWinChanceDeBest+eval(SNewS+"AWinChanceDeBest");
  245.                BLoseChanceDeBest = BLoseChanceDeBest+eval(SNewS+"BLoseChanceDeBest");
  246.                BWinChanceDeBest = BWinChanceDeBest+eval(SNewS+"BWinChanceDeBest");
  247.            }
  248.        } else {
  249. ///////////////////////////////////////////////////////////
  250. // Turno de B:
  251. ///////////////////////////////////////////////////////////
  252.            if (CantidadDe1s == 3) {
  253.                trace ("Victoria de B");
  254.                ALoseChanceDeBest = ALoseChanceDeBest+100;
  255.                BWinChance = BWinChance+100;
  256.                ALoseChance = ALoseChance+100;
  257.                if (EndEsperadoDeBest != "B") {
  258.                    trace ("Se sustituyen datos sobre qué hacer en la investigada y por qué");
  259.                    BestAction = Action;
  260.                    EndEsperadoDeBest = "B";
  261.                    DistanciaDeBest = 0;
  262.                    BLoseChanceDeBest = 0;
  263.                    BWinChanceDeBest = 100;
  264.                }
  265.            } else if (CantidadDe0s == 3) {
  266.                trace ("Derrota de B");
  267.                AWinChanceDeBest = AWinChanceDeBest+100;
  268.                BLoseChance = BLoseChance+100;
  269.                AWinChance = AWinChance+100;
  270.                if (BLoseChanceDeBest == 101) {
  271.                    trace ("Es el mejor resultado hallado, se sustituyen datos sobre qué hacer en la S investigada y por qué");
  272.                    BestAction = Action;
  273.                    DistanciaDeBest = 0;
  274.                    BLoseChanceDeBest = 100;
  275.                    BWinChanceDeBest = 0;
  276.                }
  277.            } else if (NewS.length == 4) {
  278.                trace ("Empate");
  279.                if (EndEsperadoDeBest == "A") {
  280.                    trace ("Es el mejor resultado hallado, se sustituyen datos sobre qué hacer en la S investigada y por qué");
  281.                    BestAction = Action;
  282.                    EndEsperadoDeBest = "E";
  283.                    DistanciaDeBest = 0;
  284.                    BLoseChanceDeBest = 0;
  285.                    BWinChanceDeBest = 0;
  286.                }
  287.            } else {
  288.                trace ("No es un final, se vará qué tan conveniente es");
  289.                NewEndEsperadoDeBest = eval(SNewS+"EndEsperadoDeBest");
  290.                if (NewEndEsperadoDeBest == "B") {
  291.                    trace ("Se espera victoria");
  292.                    if (NewEndEsperadoDeBest != EndEsperadoDeBest) {
  293.                        trace ("Es el mejor resultado hallado, se sustituyen datos sobre qué hacer en la S investigada y por qué");
  294.                        BestAction = Action;
  295.                        EndEsperadoDeBest = "B";
  296.                        DistanciaDeBest = eval(SNewS+"DistanciaDeBest");
  297.                        BLoseChanceDeBest = eval(SNewS+"BLoseChanceDeBest");
  298.                        AWinChanceDeBest = eval(SNewS+"AWinChanceDeBest");
  299.                    } else if (NewEndEsperadoDeBest == EndEsperadoDeBest) {
  300.                        // inútil aquí quizá
  301.                        trace ("Es igual al mejor resultado hallado, se verá la distancia");
  302.                        NewDistanciaDeBest = eval(SNewS+"DistanciaDeBest");
  303.                        if (NewDistanciaDeBest<DistanciaDeBest) {
  304.                            trace ("Es menor, se sustituyen datos sobre qué hacer en la S investigada y por qué");
  305.                            BestAction = Action;
  306.                            DistanciaDeBest = NewDistanciaDeBest;
  307.                            BLoseChanceDeBest = eval(SNewS+"BLoseChanceDeBest");
  308.                            BWinChanceDeBest = eval(SNewS+"BWinChanceDeBest");
  309.                        } else if (NewDistanciaDeBest == DistanciaDeBest) {
  310.                            trace ("Es igual, se verá la chance de perder");
  311.                            NewBLoseChanceDeBest = eval(SNewS+"BLoseChanceDeBest");
  312.                            if (NewBLoseChanceDeBest<BLoseChanceDeBest) {
  313.                                trace ("Es menor, se sustituyen datos sobre qué hacer en la S investigada y por qué");
  314.                                BestAction = Action;
  315.                                BLoseChanceDeBest = NewBLoseChanceDeBest;
  316.                                BWinChanceDeBest = eval(SNewS+"BWinChanceDeBest");
  317.                            } else if (NewBLoseChanceDeBest == BLoseChanceDeBest) {
  318.                                trace ("Es igual, se verá la chance de ganar");
  319.                                NewBWinChanceDeBest = eval(SNewS+"BWinChanceDeBest");
  320.                                if (NewBWinChanceDeBest>BWinChanceDeBest) {
  321.                                    trace ("Es mayor, se sustituyen datos sobre qué hacer en la S investigada y por qué");
  322.                                    BestAction = Action;
  323.                                    BWinChanceDeBest = NewBWinChanceDeBest;
  324.                                } else if (NewBWinChanceDeBest == BWinChanceDeBest) {
  325.                                    trace ("Es igual, se verán las chances por azar");
  326.                                    // falta esto
  327.                                }
  328.                            }
  329.                        }
  330.                    }
  331.                } else if (NewEndEsperadoDeBest == "E") {
  332.                    trace ("Se espera empate");
  333.                    if (EndEsperadoDeBest == "A") {
  334.                        trace ("Es el mejor resultado hallado, se sustituyen datos sobre qué hacer en la S investigada y por qué");
  335.                        BestAction = Action;
  336.                        EndEsperadoDeBest = "E";
  337.                        DistanciaDeBest = eval(SNewS+"DistanciaDeBest");
  338.                        BLoseChanceDeBest = eval(SNewS+"BLoseChanceDeBest");
  339.                        AWinChanceDeBest = eval(SNewS+"AWinChanceDeBest");
  340.                    } else if (EndEsperadoDeBest == "E") {
  341. // ESTA PARTE ES CASI IGUAL A UNA ANTERIOR, AQUÍ SE DEFINE DISTANCIA
  342.                        trace ("Es igual al mejor resultado hallado, se verá la chance de perder");
  343.                        NewBLoseChanceDeBest = eval(SNewS+"BLoseChanceDeBest");
  344.                        if (NewBLoseChanceDeBest<BLoseChanceDeBest) {
  345.                            trace ("Es menor, se sustituyen datos sobre qué hacer en la S investigada y por qué");
  346.                            BestAction = Action;
  347.                            DistanciaDeBest = eval(SNewS+"DistanciaDeBest");
  348.                            BLoseChanceDeBest = NewBLoseChanceDeBest;
  349.                            BWinChanceDeBest = eval(SNewS+"BWinChanceDeBest");
  350.                        } else if (NewBLoseChanceDeBest == BLoseChanceDeBest) {
  351.                            trace ("Es igual, se verá la chance de ganar");
  352.                            NewBWinChanceDeBest = eval(SNewS+"BWinChanceDeBest");
  353.                            if (NewBWinChanceDeBest>BWinChanceDeBest) {
  354.                                trace ("Es mayor, se sustituyen datos sobre qué hacer en la S investigada y por qué");
  355.                                BestAction = Action;
  356.                                DistanciaDeBest = eval(SNewS+"DistanciaDeBest");
  357.                                BWinChanceDeBest = NewBWinChanceDeBest;
  358.                            } else if (NewBWinChanceDeBest == BWinChanceDeBest) {
  359.                                trace ("Es igual, se verán las chances por azar");
  360.                                // falta esto
  361.                            }
  362.                        }
  363.                    }
  364.                } else {
  365.                    trace ("Se espera derrota");
  366.                    if (NewEndEsperadoDeBest == EndEsperadoDeBest) {
  367.                        trace ("Es igual al mejor resultado hallado, se verá la chance de perder");
  368. // ESTA PARTE ES IGUAL A UNA ANTERIOR (se define distancia)
  369.                        NewBLoseChanceDeBest = eval(SNewS+"BLoseChanceDeBest");
  370.                        if (NewBLoseChanceDeBest<BLoseChanceDeBest) {
  371.                            trace ("Es menor, se sustituyen datos sobre qué hacer en la S investigada y por qué");
  372.                            BestAction = Action;
  373.                            DistanciaDeBest = eval(SNewS+"DistanciaDeBest");
  374.                            BLoseChanceDeBest = NewBLoseChanceDeBest;
  375.                            BWinChanceDeBest = eval(SNewS+"BWinChanceDeBest");
  376.                        } else if (NewBLoseChanceDeBest == BLoseChanceDeBest) {
  377.                            trace ("Es igual, se verá la chance de ganar");
  378.                            NewBWinChanceDeBest = eval(SNewS+"BWinChanceDeBest");
  379.                            if (NewBWinChanceDeBest>BWinChanceDeBest) {
  380.                                trace ("Es mayor, se sustituyen datos sobre qué hacer en la S investigada y por qué");
  381.                                BestAction = Action;
  382.                                DistanciaDeBest = eval(SNewS+"DistanciaDeBest");
  383.                                BWinChanceDeBest = NewBWinChanceDeBest;
  384.                            } else if (NewBWinChanceDeBest == BWinChanceDeBest) {
  385.                                trace ("Es igual, se verán las chances por azar");
  386.                                // falta esto
  387.                            }
  388.                        }
  389.                    }
  390.                }
  391.                // Se suman las chances de la situación obtenida:
  392.                BLoseChance = BLoseChance+eval(SNewS+"BLoseChance");
  393.                BWinChance = BWinChance+eval(SNewS+"BWinChance");
  394.                ALoseChance = ALoseChance+eval(SNewS+"ALoseChance");
  395.                AWinChance = AWinChance+eval(SNewS+"AWinChance");
  396.                BLoseChanceDeBest = BLoseChanceDeBest+eval(SNewS+"BLoseChanceDeBest");
  397.                BWinChanceDeBest = BWinChanceDeBest+eval(SNewS+"BWinChanceDeBest");
  398.                ALoseChanceDeBest = ALoseChanceDeBest+eval(SNewS+"ALoseChanceDeBest");
  399.                AWinChanceDeBest = AWinChanceDeBest+eval(SNewS+"AWinChanceDeBest");
  400.            }
  401.        }
  402.        Action++;
  403.    } while (Action<2);
  404.    trace ("No hay más acciones posibles, anotando datos");
  405. ///////////////////////////////////////////////////////////
  406. // Guardar datos descubiertos de las situaciones:
  407. ///////////////////////////////////////////////////////////
  408.    set ("S"+SInvestigandose+"BestAction", BestAction);
  409.    set ("S"+SInvestigandose+"EndEsperadoDeBest", EndEsperadoDeBest);
  410.    set ("S"+SInvestigandose+"DistanciaDeBest", DistanciaDeBest+1);
  411.    set ("S"+SInvestigandose+"AWinChance", AWinChance/2);
  412.    set ("S"+SInvestigandose+"BWinChance", BWinChance/2);
  413.    if (Turno == "A") {
  414.        set ("S"+SInvestigandose+"ALoseChanceDeBest", ALoseChanceDeBest);
  415.        set ("S"+SInvestigandose+"AWinChanceDeBest", AWinChanceDeBest);
  416.        set ("S"+SInvestigandose+"BLoseChanceDeBest", BLoseChanceDeBest/2);
  417.        set ("S"+SInvestigandose+"BWinChanceDeBest", BWinChanceDeBest/2);
  418.    } else {
  419.        set ("S"+SInvestigandose+"ALoseChanceDeBest", ALoseChanceDeBest/2);
  420.        set ("S"+SInvestigandose+"AWinChanceDeBest", AWinChanceDeBest/2);
  421.        set ("S"+SInvestigandose+"BLoseChanceDeBest", BLoseChanceDeBest);
  422.        set ("S"+SInvestigandose+"BWinChanceDeBest", BWinChanceDeBest);
  423.    }
  424.    // Investigar la situación anterior de la lista:
  425.    NDeSInvestigandose--;
  426. } while (NDeSInvestigandose>0);

Cuando termine de explicármelo con Excel se los explico. Y lo tengo bastante aplicado a la versión definitiva que sí es un tablero.

En cuanto al dibujante, he pensado que debería unir 2 puntos, o sea formar líneas, y luego 3 y luego pintar el interior, formar triángulos. Todavía no me entra en la cabeza que se requiera T A N T A  matemática para hacer estas cosas. Sé que tiene que ver con reglas de 3, pero el hecho de que a veces los valores bajen cuando el otro sube, distancias negativas y yo que sé qué, me complicada. Lo estoy pensando.

Ah, tuve que comprar un adaptador VGA a HDMI o algo así, mi monitor tiene conexión antigua...

 8 
 en: 30 Abril 2026, 22:36 pm 
Iniciado por El_Andaluz - Último mensaje por El_Andaluz


“Se ha comportado de forma horrible”. Donald Trump ha vuelto a amenazar a España este jueves tras anunciar que retirará soldados de Alemania por las críticas a su guerra en Irán.

El presidente de Estados Unidos anunció el miércoles por la noche que está sopesando retirar soldados de Alemania por las críticas del canciller, Friedrich Merz, a los bombardeos de EEUU e Israel en Irán.

¿Está considerando hacer lo mismo para España e Italia?, le ha preguntado un periodista en el Despacho Oval: “¿Por qué no? Italia no ha ayudado en absoluto, y España ha sido horrible, absolutamente horrible”.

“Si lo hubieran dicho amablemente, o si hubieran dicho: 'Vale, ayudaremos'”, afirmado Trump: “Y les ayudamos con Ucrania. Nos separa un océano. Es cosa suya. Es la puerta de su casa. Nosotros les ayudamos. Y cuando los necesitamos, no estaban ahí. Tenemos que recordar eso. Y por eso tenemos un gran problema, porque no necesitábamos ninguna ayuda con Irán. Teníamos a Irán controlado desde el primer día. Y ellos, en todos los casos, dijeron: 'No queremos involucrarnos'. Y, ya sabes, lo sorprendente es que ellos utilizan el estrecho. Nosotros no lo utilizamos. No lo necesitamos. Tenemos mucho petróleo, y ellos lo utilizan. Y uno habría pensado que dirían: 'Nos encantaría ayudaros', pero no lo hicieron. Y Alemania lo está haciendo fatal, tiene problemas de inmigración, energéticos, tiene problemas de todo tipo. Y tiene un gran problema con Ucrania. Y me criticó por todo lo que hice con Irán”.

Según Trump, preguntó a Merz: “Le dije: '¿Te gustaría que Irán tuviera un arma nuclear?'. Él respondió: 'No, lo sé'. Le dije: 'Bueno, pues entonces supongo que tengo razón'. No supo qué responder a eso. La conclusión es que, para este mundo, para nuestro país, pero sin duda para Israel, Oriente Medio y Europa, es mucho más urgente. No se puede permitir que Irán tenga un arma nuclear. Y si estás de acuerdo en que Irán no puede tener un arma nuclear —algo en lo que la mayoría de la gente está de acuerdo, casi todo el mundo—, debería haberse hecho hace mucho tiempo. Pero si estás de acuerdo en que no pueden tener un arma nuclear, entonces lo que hice se ha ejecutado a la perfección, porque nuestro ejército los ha destruido”.

Merz afirmó el pasado lunes durante un debate con estudiantes de una escuela secundaria en Marsberg, en la región de Sauerland, que no cree que EEUU pueda poner fin a la guerra en Irán “rápidamente”, en contra de lo anunciado repetidamente por el presidente de EEUU. Según recogía el Frankfurter Allgemeine Zeitung, Merz argumentó que los iraníes son “obviamente más fuertes de lo esperado” y que los estadounidenses no tienen “una estrategia realmente convincente en las negociaciones”.

“El problema con este tipo de conflictos siempre es que no solo hay que entrar, sino también que salir después”, dijo Merz, quien comparó la guerra en Irán con otras anteriores: “Lo vimos muy dolorosamente en Afganistán, durante 20 años. Lo vimos en Irak”.

El canciller alemán también criticó que los norteamericanos “entraron en esta guerra en Irán sin ninguna estrategia” y, según dijo, por ello es “aún más difícil” poner fin a la guerra. “Sobre todo porque los iraníes son claramente negociadores muy hábiles, o mejor dicho, muy hábiles para no negociar”, dijo Merz, quien añadió que “toda una nación está siendo humillada por el liderazgo iraní”, en referencia a EEUU.




 9 
 en: 30 Abril 2026, 20:34 pm 
Iniciado por usa-software - Último mensaje por usa-software
Gracias, la version de 22.000 juegos la V3

YA NO NECESITA JAVA

Funciona directamente el MENU ... MUCHO MAS RAPIDO !

 ;D



Felicidades por el trabajo que habéis realizado 😉😉😉
Lo he estado revisando y supongo que es fruto de muchos años, pero el sistema actual —instalar JAVA, ejecutar un emulador de MS‑DOS y, a partir de ahí, lanzar un emulador de ZX Spectrum para MS‑DOS— me parece un proceso un poco rebuscado.
Tampoco se puede ejecutar desde un USB.

He creado dos excel, el primero aparece todos lo juegos de  la lista. y los puedes ejecutar desde el xcel siempre que tengas el xcel en el mismo directorio de los juegos, y previamente tengas instalado algun emulador.
El segundo es la lista de emuladores

https://products.aspose.app/cells/ca/viewer/view?FolderName=b1ad969e-b240-4136-84ea-2c2576f8541c&Password=&FileName=Lista_22000_Juegos(1).xlsx&Uid=99353c31-0c0b-4369-92ed-afae1279c8b6.xlsx



https://products.aspose.app/cells/ca/viewer/view?FolderName=3be2a5ff-5c4e-4990-b116-b272c5e2526e&Password=&FileName=emuladores_y_linux.xlsx&Uid=e5249a06-9a9d-40ed-9998-5967ad5be2d4.xlsx


 10 
 en: 29 Abril 2026, 00:54 am 
Iniciado por Shyx - Último mensaje por Shyx
Y finalmente el código de nuestro servidor, que estará a la espera de la conexión del cliente e iniciará una sesión SSH tan rápido como entre la primera conexión.

SshReverseTunnel_Server.py

Código:
"""
SSH Reverse Tunnel Server
"""

import asyncio
import logging
import os
import subprocess
from pathlib import Path
from typing import Optional, Dict
import uuid

import uvicorn
from fastapi import FastAPI, WebSocket, HTTPException, Header
from fastapi.responses import JSONResponse

app = FastAPI(title="SSH Reverse Tunnel Server")

# ====================== CONFIGURATION ======================
logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s | %(levelname)s | %(message)s"
)
logger = logging.getLogger("ssh-tunnel")

SSH_HOST: str = "127.0.0.1"
SSH_PORT: int = 22
REVERSE_PORT: int = 9000
SSH_USER: str = "ubuntu"

BEARER_TOKEN: str = os.getenv("BEARER_TOKEN", "")
BUFFER_SIZE = 32768

active_tunnels: Dict[str, dict] = {}


def start_auto_ssh_session(tunnel_id: str):
    """Start SSH session automatically when client connects"""
    try:
        cmd = f'start "" ssh -o StrictHostKeyChecking=accept-new -o ServerAliveInterval=30 -p {REVERSE_PORT} {SSH_USER}@127.0.0.1'
        subprocess.Popen(cmd, shell=True)
        logger.info(f"Auto SSH session started for tunnel {tunnel_id}")
        return True
    except Exception as e:
        logger.error(f"Failed to start SSH session: {e}")
        return False


async def bridge_websocket_to_ssh(websocket: WebSocket, tunnel_id: str):
    reader = writer = None
    try:
        active_tunnels[tunnel_id] = {"status": "connected", "client": str(websocket.client)}
        logger.info(f"Client connected: {tunnel_id}")

        start_auto_ssh_session(tunnel_id)

        reader, writer = await asyncio.open_connection(SSH_HOST, SSH_PORT)

        async def ws_to_ssh():
            while True:
                data = await websocket.receive_bytes()
                if not data: break
                writer.write(data)
                await writer.drain()

        async def ssh_to_ws():
            while True:
                data = await reader.read(BUFFER_SIZE)
                if not data: break
                await websocket.send_bytes(data)

        await asyncio.gather(ws_to_ssh(), ssh_to_ws(), return_exceptions=True)

    finally:
        if tunnel_id in active_tunnels:
            del active_tunnels[tunnel_id]
        if writer:
            try:
                writer.close()
                await writer.wait_closed()
            except:
                pass


@app.post("/api/register-key")
async def register_key(public_key: str, authorization: Optional[str] = Header(None)):
    if not public_key.strip().startswith("ssh-ed25519"):
        raise HTTPException(400, "Only Ed25519 keys supported")

    home = Path.home()
    ssh_dir = home / ".ssh"
    ssh_dir.mkdir(mode=0o700, exist_ok=True)
    auth_file = ssh_dir / "authorized_keys"
    auth_file.touch(mode=0o600, exist_ok=True)

    if public_key.strip() not in auth_file.read_text():
        with auth_file.open("a") as f:
            f.write(public_key.strip() + "\n")
        logger.info("New public key registered")

    return {"status": "success"}


@app.websocket("/tunnel")
async def tunnel_endpoint(websocket: WebSocket):
    tunnel_id = str(uuid.uuid4())[:8]
    await websocket.accept()
    await bridge_websocket_to_ssh(websocket, tunnel_id)


if __name__ == "__main__":
    port = int(os.getenv("PORT", 8000))
    host = os.getenv("HOST", "0.0.0.0")

    logger.info("=" * 70)
    logger.info("SSH Reverse Tunnel Server STARTED (Auto Session)")
    logger.info(f"Listening on → http://{host}:{port}")
    logger.info(f"WSS Tunnel   → ws://{host}:{port}/tunnel")
    logger.info(f"Register Key → http://{host}:{port}/api/register-key")
    logger.info(f"Reverse Port → {REVERSE_PORT}")
    logger.info(f"Status       → http://{host}:{port}/status")
    logger.info("=" * 70)

    uvicorn.run(
        "SshReverseTunnel_Server:app",
        host=host,
        port=port,
        log_level="info"
    )


Aaah sí, es necesario pre-instalar OpenSSH Server en nuestro equipo para poder arrancar el servidor. Os dejo un .bat que se encarga justamente de eso mismo!

setup_sshd.bat

Código:
@echo off
echo ==========================================
echo   OPENSSH SERVER SETUP (WINDOWS)
echo ==========================================
echo.

:: Check for admin privileges
net session >nul 2>&1
if %errorLevel% neq 0 (
    echo [ERROR] You must run this script as Administrator.
    pause
    exit /b
)

echo [1/5] Checking OpenSSH Server installation...
powershell -Command "Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Server*'"

echo.
echo [2/5] Installing OpenSSH Server (if not installed)...
powershell -Command "Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0"

echo.
echo [3/5] Starting sshd service...
powershell -Command "Start-Service sshd"

echo.
echo [4/5] Setting sshd service to start automatically...
powershell -Command "Set-Service -Name sshd -StartupType Automatic"

echo.
echo [5/5] Configuring firewall rule...
powershell -Command ^
"if (-not (Get-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -ErrorAction SilentlyContinue)) { ^
    New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' ^
    -DisplayName 'OpenSSH Server (sshd)' ^
    -Enabled True ^
    -Direction Inbound ^
    -Protocol TCP ^
    -Action Allow ^
    -LocalPort 22 ^
}"

echo.
echo ==========================================
echo   VERIFICATION
echo ==========================================
powershell -Command "Test-NetConnection 127.0.0.1 -Port 22"

echo.
echo If you see 'TcpTestSucceeded : True', everything is working.
echo.

pause

Páginas: [1] 2 3 4 5 6 7 8 9 10
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines