Выключение PC в любой точке мира (JAVA)

в 12:03, , рубрики: down, java, shut, shutdown, wifi, вай, вайфай, выключение, компьютера, фай, хабрахабр

Привет!

Изучал я java, и подумал -(Сидишь такой в туалете с телефоном, а у тебя на пк кровь, убийства и голые сиськи открыты, вдруг приходит кто-то и говорит «Я за компьютером посижу чуток, ты же не против?») «а что если написать программу-сервер, которая выключала бы ПК, когда к этому к ней законектился пользователь». После этой мысли я узнал про такую штуку, как

runtime.getruntime().exec

И в общем я решил чего-то сделать:


/*программа ждет пока к порту 10000 кто-нибудь законектится, как только это произошло, начинается завершение сеанса*/

import java.io.IOException;
import java.net.ServerSocket;

public class Serv {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(10000);
        serverSocket.accept();  
        Process shutdown = Runtime.getRuntime().exec(new String[]{"shutdown", "-s" }); 
        serverSocket.close();
    }
}

Это был самый простейший вариант.

За ним сразу последовала улучшенная версия(с отправкой html присоединившемуся клиенту):


import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Serv {
    public static void main(String[] args) throws IOException
    {
        int sPort = 9000;
        ServerSocket socket = new ServerSocket(sPort);

        Socket ss = socket.accept();//Ждём пока кто-нибудь подключится
        
        System.out.println("CONNECTED");
        
        OutputStream sout = ss.getOutputStream();
        
        String html = "<html><head><title>Shutdown</title></head><body><h1>Компьютер выключится через 15-20 секунд!</h1><br/><img src = 'http://s.elitarium.ru/wp-content/uploads/1632841882.jpg'></br><h2>Ему нужно отдыхать :)</h2></body></html>";//html
//Я не мог не добавить картинку котика (^=◕ᴥ◕=^)
        String header = "HTTP/1.1 200 OKnContent-type: text/htmlnContent-Length: " + html.length() + "nConnection: closenn";//html header

        String outputText = header + html;
        sout.write(outputText.getBytes());
        
        String[] cm = { "shutdown", "-s" };
        Runtime.getRuntime().exec(cm);
        
        ss.close();
        socket.close();
    }
}

Потом я скомпилировал сей код в jar:

image

image

image

image

Программу сделали.

После её запуска ничего особенного не произойдет, но теперь если вы подключитесь к порту 9000 вашего компьютера(у меня это 192.186.1.2:9000) на любом другом устройстве подключенном к тому же wi-fi — ваш компьютер начнет завершение работы.

пруфы

image
image

После этого можно добавить её в автозапуск и спокойно пользоваться в пределах wi-fi…

Но я решил еще немного поднажать, и сделать доступ к девятитысячному порту с любой точки мира (но это не точно):

Открываем настройки роутера, находим там что-то похожее того, что на пикче и вписываем туда ваши данные:

image

Затем узнаем внешний ip (2ip.ru в помощь), и подключаемся к нему через указанный в настройках порт(xxx.xxx.xxx.xxx:15 например).

P.S.: Так как внутренний айпи компьютера может меняться(в зависимости от количества подключенных к wi-fi устройств), можно создать маппинг сразу для несколько внутренних адресов(192.168.1.2, 192.168.1.3, 192.168.1.4 например).

Вот собственно и всё.

P.P.S.: Если кому нужна данная программа -> google.drive

Автор: Dmitry

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js