Привет!


Изучал я 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 OK\nContent-type: text/html\nContent-Length: " + html.length() + "\nConnection: close\n\n";//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

Комментарии (19)


  1. evkin
    30.10.2017 15:15
    +2

    Жесть… как минимум добавить какой то ключ (пароль) что бы любое сканирование портов не запускало эту чудо команду и не выключало комп.
    Да и не мешало бы добавить в параметры shutdown (для windows) добавить еще ключик "f", что бы перезагрузка не уперлась, в какой то не сохраненный файл / подтверждение


  1. token
    30.10.2017 15:15
    +8

    Класс! Теперь срочно пишите программу для выдвигания лотка CD — привода — из любой точки мира.


  1. sevenlis
    30.10.2017 15:16

    P.S.: Так как внутренний айпи компьютера может меняться

    посмотрите в сторону резервирования адресов в настройках DHCP вашего роутера


  1. Demon_i
    30.10.2017 15:19

    Тимвьвер в помощь. Хотя я вообще не представляю для чего это может быть нужно. Более типичный кейс — удаленное пробуждение, работа, ну и завершение. Опять таки все прекрасно реализуется с тимвьювером при наличии хотя бы ещё одного компа с ним в одной сети (для пробуждения). Ну или можно выставить наружу порт для WOL.


    1. olegchir
      30.10.2017 16:03
      +1

      тимвьюер стоит тонну денег, если использовать для рабочих задач


      1. Demon_i
        30.10.2017 16:19

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

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


  1. MonkAlex
    30.10.2017 15:26
    +2

    Просто надо добавить учетки на ПК.
    Они собственно для личных дел и придуманы.


  1. seidzi
    30.10.2017 16:10

    автор не слышал про статическую привязку ip-mac


    1. cl0ne
      30.10.2017 16:32

      Не на всех прошивках такая функция есть, увы. С другой стороны можно было бы просто юзать статический адрес на хосте.


      1. seidzi
        01.11.2017 13:52

        я работал с ОГРОМНЫМ количеством home роутеров(был печальный опыт, поднимался из дна тех.поддержки интернет провайдера), и во всех данная функция присутствовала.


  1. aleksandy
    30.10.2017 16:57

    Сидишь такой в туалете с телефоном,… вдруг приходит кто-то и говорит...

    Если в туалет во время посиделок к тебе может кто-то просто зайти?


    1. acyp
      30.10.2017 18:00

      Студенческая общага, ну например. Сейчас как не знаю, а в мою студенческую бытность (1994-1999) не сильно закрывать двери и заходить друг к другу за сигаретами/чаем/дошираком (нужное подставить) было нормой.


      1. Free_ze
        30.10.2017 18:06

        Сигареты еще как-то можно понять. Но зачем вы дошик с чаем в туалете хранили?


        1. acyp
          30.10.2017 18:23

          Оценил. Но в данном конкретном случае речь шла о двери в комнату. В туалет даже в дикие 90е не ломились в гости. Если конечно в этот момент пьянки не происходило. Во время студенческой пьянки всякое бывало. И после тоже.


      1. ClearAirTurbulence
        30.10.2017 22:36

        WIN+L или аналог для других осей перед уходом.
        Дисциплина-с.


  1. inv2004
    30.10.2017 21:11

    Гениально. Хороший пример, как удаётся направить умение на решение реальных и жизненных проблем. Будет ли приложение под ios?


  1. rahna
    31.10.2017 00:26

    А что, если бы Генри Форду сказали: «Не выдумывай, дурачок! Запрягай Сивку!». Человек ищет себя, человек подчиняет компьютер своей воле.
    Мне понравилось. Чувак, я бы плюсанул, но мне не хватает местной маны…


  1. nonname
    31.10.2017 02:25

    Кажется чья-то шутка по вытаскиванию поста новичков из бездны удалась, ну или не очень судя по минусам. Автору посоветую изучать программирование дальше и открывать для себя новые возможности этого умения.
    По сути добавить авторизацию хотя бы или прикрутить https://en.wikipedia.org/wiki/Port_knocking для прикола. Ну и добавить можно функций, почистить историю браузера например :)


  1. Drelagreen Автор
    01.11.2017 21:23

    <3