Привет!
Изучал я 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();
}
}
Программу сделали.
После её запуска ничего особенного не произойдет, но теперь если вы подключитесь к порту 9000 вашего компьютера(у меня это 192.186.1.2:9000) на любом другом устройстве подключенном к тому же wi-fi — ваш компьютер начнет завершение работы.
После этого можно добавить её в автозапуск и спокойно пользоваться в пределах wi-fi…
Но я решил еще немного поднажать, и сделать доступ к девятитысячному порту с любой точки мира (но это не точно):
Открываем настройки роутера, находим там что-то похожее того, что на пикче и вписываем туда ваши данные:
Затем узнаем внешний 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)
token
30.10.2017 15:15+8Класс! Теперь срочно пишите программу для выдвигания лотка CD — привода — из любой точки мира.
sevenlis
30.10.2017 15:16P.S.: Так как внутренний айпи компьютера может меняться
посмотрите в сторону резервирования адресов в настройках DHCP вашего роутера
Demon_i
30.10.2017 15:19Тимвьвер в помощь. Хотя я вообще не представляю для чего это может быть нужно. Более типичный кейс — удаленное пробуждение, работа, ну и завершение. Опять таки все прекрасно реализуется с тимвьювером при наличии хотя бы ещё одного компа с ним в одной сети (для пробуждения). Ну или можно выставить наружу порт для WOL.
olegchir
30.10.2017 16:03+1тимвьюер стоит тонну денег, если использовать для рабочих задач
Demon_i
30.10.2017 16:19(Сидишь такой в туалете с телефоном, а у тебя на пк кровь, убийства и голые сиськи открыты, вдруг приходит кто-то и говорит «Я за компьютером посижу чуток, ты же не против?»)
Мне кажется это все-таки больше личное/некоммерческое использование, а для этого тимвьювер бесплатен.
MonkAlex
30.10.2017 15:26+2Просто надо добавить учетки на ПК.
Они собственно для личных дел и придуманы.
seidzi
30.10.2017 16:10автор не слышал про статическую привязку ip-mac
cl0ne
30.10.2017 16:32Не на всех прошивках такая функция есть, увы. С другой стороны можно было бы просто юзать статический адрес на хосте.
seidzi
01.11.2017 13:52я работал с ОГРОМНЫМ количеством home роутеров(был печальный опыт, поднимался из дна тех.поддержки интернет провайдера), и во всех данная функция присутствовала.
aleksandy
30.10.2017 16:57Сидишь такой в туалете с телефоном,… вдруг приходит кто-то и говорит...
Если в туалет во время посиделок к тебе может кто-то просто зайти?acyp
30.10.2017 18:00Студенческая общага, ну например. Сейчас как не знаю, а в мою студенческую бытность (1994-1999) не сильно закрывать двери и заходить друг к другу за сигаретами/чаем/дошираком (нужное подставить) было нормой.
Free_ze
30.10.2017 18:06Сигареты еще как-то можно понять. Но зачем вы дошик с чаем в туалете хранили?
acyp
30.10.2017 18:23Оценил. Но в данном конкретном случае речь шла о двери в комнату. В туалет даже в дикие 90е не ломились в гости. Если конечно в этот момент пьянки не происходило. Во время студенческой пьянки всякое бывало. И после тоже.
inv2004
30.10.2017 21:11Гениально. Хороший пример, как удаётся направить умение на решение реальных и жизненных проблем. Будет ли приложение под ios?
rahna
31.10.2017 00:26А что, если бы Генри Форду сказали: «Не выдумывай, дурачок! Запрягай Сивку!». Человек ищет себя, человек подчиняет компьютер своей воле.
Мне понравилось. Чувак, я бы плюсанул, но мне не хватает местной маны…
nonname
31.10.2017 02:25Кажется чья-то шутка по вытаскиванию поста новичков из бездны удалась, ну или не очень судя по минусам. Автору посоветую изучать программирование дальше и открывать для себя новые возможности этого умения.
По сути добавить авторизацию хотя бы или прикрутить https://en.wikipedia.org/wiki/Port_knocking для прикола. Ну и добавить можно функций, почистить историю браузера например :)
evkin
Жесть… как минимум добавить какой то ключ (пароль) что бы любое сканирование портов не запускало эту чудо команду и не выключало комп.
Да и не мешало бы добавить в параметры shutdown (для windows) добавить еще ключик "f", что бы перезагрузка не уперлась, в какой то не сохраненный файл / подтверждение