удаленное выключение пк
у меня есть .NET Framework приложение, которое должно удаленно выключать определенный пк(для его поиска я использую его ip адрес) если он еще находится в сети. У меня есть код который в теории это умеет делать:
int waitSeconds = 00;
string ip = .....;
ProcessStartInfo processInfo = new ProcessStartInfo();
processInfo.FileName = "shutdown.exe";
processInfo.Arguments = $@"-s -f -m \\{ ip } -t { waitSeconds }";
processInfo.WindowStyle = ProcessWindowStyle.Hidden;
processInfo.CreateNoWindow = true;
var proc = Process.Start(processInfo);
но когда попытался с помощью этого кода выключить сторонний пк, то у меня ничего не вышло,(пк просто не выключился) хотя ip адрес я ввожу правильный... может есть какой-то способ через скрипт проверить, возможно ли данный компьютер выключать удаленно? заранее спасибо!
Ответы (1 шт):
Вы не можете просто так выключить чужой ПК, в комментарии выше я указал причины. Иначе мамкины хацкеры только в путь вырубали чужие компы один за другим.
- Ваша программа должна находиться на чужом компьютере.
- Убедитесь что ваша программа занимает сетевой порт. Для портов меньше 1000 требуются права администратора.
- Убедитесь что ваша программа использует корректный локальный IP адрес: 192.16xxx, 172.xxx, 10.xxx ... А не 127.0.0.1 или любой другой 127.xxx. Если компьютер имеет доступ в глобальную сеть напрямую - соответственно использовать нужно глобальный IP. Или можно просто использовать 0.0.0.0 и тем самым разрешать приём команды из любой подсети.
- На стороне выключаемого компьютера нужно занять сетевой порт для прослушки.
- На стороне компьютера, который производит выключение - нужно нужно открыть сокет: IP выключаемого компьютера : порт
- Если выключение производится из разных подсетей - должен быть настроен проброс порта на выключаемый компьютер.
- При открытии порта при подключении сокета необходимо запустить функцию приёма данных, одного байта достаточно, например можно отправить 0xFF
- На стороне приёма в функции приёма дождаться заветного байта и удостовериться что он соответствует 0xFF
- После чего на стороне выключаемого компьютера и вызвать данную функцию с вашим ProcessStartInfo, только в параметрах без удалённого компьютера \ip
С кодом придётся повозиться, но зато без танцев с бубном и перенастройкой компов и дыр безопасности.
Если с пробросом порта на роутере - после всего этого хоть из любой точки мира выключайте ваш ПК. Код 0xFF разумеется меняйте на более безопасный, можете хоть шифрование прикрутить.