IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Программирование (http://www.imho.ws/forumdisplay.php?f=40)
-   -   Удаленное включение выключение компа (http://www.imho.ws/showthread.php?t=92241)

3DRaven 08.09.2005 10:05

Удаленное включение выключение компа
 
Хочется написать утилитку которая будет это делать.
Для решения нужен:
1. сервис который будет слушать порт и выключать комп по команде
2. Посыллка пакета на удаленный комп для включения его.

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

/7y3uK 08.09.2005 12:27

Если айпи известен и постоянен - тогда все тривиально - открывается сокет и в него потоком вливаются данные... если нет - то тут все несколько сложнее... Кстати а зачем это нужно? есть такая штука как ремоут сервис - удаленный рабочий стол, чтоли... вроде так называется...
Это что касается выключения... а вот включения - это уже другой вопрос... В принципе опять же если айпишник известен можно попробовать в биосе выставить включение по ЛАН... но, если честно, ни разу не пробовал :)

Larry 08.09.2005 21:24

3DRaven, на чем кодить хотите? Есть пример под Delphi. А вообще - все достаточно тривиально. Команды для выключения храним прямо в сервере (использовать можно API-функции), клиентом передаем серверу какое-либо зарезирвированное сообщение (можно даже любую букву), после получения которого сервер автоматически вызывает api, выключающую компьютер.

kot_ 08.09.2005 21:35

Цитата:

Сообщение от 3DRaven
Хочется написать утилитку которая будет это делать.
Для решения нужен:
1. сервис который будет слушать порт и выключать комп по команде
2. Посыллка пакета на удаленный комп для включения его.

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

Вопрос первый - какая среда разработки(и какая среда выполнения). Предполагается работа с сокетом напрямую или все же допустимо использование стандартных классов среды разработки? Преимущество первого - продолжение недостатков второго. Но если никогда не работал - лучше все же начать со стандартных классов.
Специальных пакетов не существует - нужно будет обрабатывать полученную инфу на клиенте и от результатов обработки выполнять действие.
Кроме сокетов для этих целей можно приспособить DCOM.
А для включения по сети - необходимо что бы машина была не выключена а находилась в состоянии саспенд - и в биосе должна быть возможность разбудить ее по сигналу с прерывания сетевой. Вобщем гугл - сокет, socket, RPC DCOM. пример работы с сокетами можно найти во МСДН

3DRaven 09.09.2005 08:42

Если не трудно кинте пример...хоть на делфи. Почта 3DRaven@omgtu.ru Писать буду на С++ в MSVS. Пишется все для стандартных компов. Утилитка нужна для удобства в работе. Есть Unix утилиты которые это делают, вот в винде их нет...только выключение. Всем спасибо.

VanHelsing 12.09.2005 17:03

3DRaven, если тебе интерес не накодить, а включить, тогда wakeup программка называется. в стендбае компу совсем не надо быть. надо что бы он был подключен к сети (т.е. питание не выключино из розетки), и мать поддерживала WON (wake on lan). в отдельных случаях в сетевуху надо кабелечек к матерешечке (в старых). прога wakeup посылает спец.пакет.
LarryBF, ты поделился программулиной хорошей. если уж тут тема про включение - выключение, хочу вопрос по теме. исходя из твоей программулины, я предположил, что пишешь ты на асме. я только изучать его начинаю, а вопрос назрел уже сейчас. исходник бы какого-нибудь маленького кодика (ком или екзе) для выключения компа. т.е. когда екзешник запустил, винда выключила ось, но по правильному, а не просто биос вырубил питание (но и такую было бы хорошо).
зы: заранее благодарен :beer:

Larry 12.09.2005 19:01

Vanhelsing, не пишу я пока на ассемблере. :) А программулина просто была на диске. Изврат - писать подобную утилиту на ассемблере. Есть же API-функция, читайте Windows SDK:

Цитата:

BOOL ExitWindowsEx(

UINT uFlags, // shutdown operation
DWORD dwReserved // reserved
);


Parameters

uFlags

Specifies the type of shutdown. This parameter must be some combination of the following values:

Value Meaning

EWX_FORCE Forces processes to terminate. When this flag is set, Windows does not send the messages WM_QUERYENDSESSION and WM_ENDSESSION to the applications currently running in the system. This can cause the applications to lose data. Therefore, you should only use this flag in an emergency.

EWX_LOGOFF Shuts down all processes running in the security context of the process that called the ExitWindowsEx function. Then it logs the user off.

EWX_POWEROFF Shuts down the system and turns off the power. The system must support the power-off feature.Windows NT: The calling process must have the SE_SHUTDOWN_NAME privilege. For more information, see the following Remarks section. Windows 95: Security privileges are not supported or required.

EWX_REBOOT Shuts down the system and then restarts the system. Windows NT: The calling process must have the SE_SHUTDOWN_NAME privilege. For more information, see the following Remarks section. Windows 95: Security privileges are not supported or required.

EWX_SHUTDOWN Shuts down the system to a point at which it is safe to turn off the power. All file buffers have been flushed to disk, and all running processes have stopped. Windows NT: The calling process must have the SE_SHUTDOWN_NAME privilege. For more information, see the following Remarks section. Windows 95: Security privileges are not supported or required.

То есть для нормального выключения Windows достаточно вставить следующий код: ExitWindowsEx (EWX_SHUTDOWN, 0). Как принять и обработать команду для выключения - это уже зависит от технических возможностей и предпочтений программиста. Для того, чтобы программно можно было вывести компьютер из ждущего режима, достаточно войти в свойства сетевой карты -- "Управление электропитанием" и поставить галочку "Разрешить устройству вывод компьютера из ждущего режима". Ну и программой посылать какой-либо пакет сетевой карте...

VanHelsing 13.09.2005 11:48

LarryBF, и на С++ тоже что ли? так ты на С пишешь? на самом деле пытаюсь плавным переходом от PHP -> VB -> C++ -> Assembler изучать. ищу умных людей. раньше, когда еще работал на ZX80, была пара знакомых хороших, один программил, другой учился программить и крекать. и я туда же. а когда перешел на архитектуру x86 офигел от разнообразия регистров etc., литературы такой, как для синклера вообще найти не могу. в общем, тяжело мне жить на x86, приходиться админить :молись:

Larry 13.09.2005 18:33

API-функции применяются в любой среде программирования.

VanHelsing 14.09.2005 07:47

приведенный тобой текст из каких доков? буду рад их почитать :yees:

3DRaven 15.09.2005 06:34

Написал уже утилитку...интерес был именно накодить. В общем объясняю обществу :) Ассемблер сдесь не нужен. Создаете сокет, который работает с UDP. Потом шлете спец пакет на 40000 порт (сработало только на нем).
Пакет : 0xFF (6 раз) потом 16 раз MAC машины которую включить хочеш. При посылке слать всем (IP 255.255.255.255 и/или BROADCAST). Вот и вся премудрость. Может быть и выложу для обозрения через недельку. Щас надо написать сервис который будет слушать порт и при приходе команды выключать комп (ужде написал слушателя ща надо просто интерфейс гуевый сделать надо и загрузку данных из конфига). В результате в конце утилитка будет включать и выключать комп по сети и в отличае от многих будет удобной.

3DRaven 22.09.2005 06:09

Выложил: Socket1.rar смотрите кому надо...там класс сокета голый...сами разберетесь...все просто.

VENOMOUS SNAKE 01.10.2005 15:30

Извините, я здесь проездом. Но стоит подумать о консольной команде "net start" в WinXP. Она запускает/останавливает службы по сети. Что ещё она умеет я точно не знаю, не заморачивался. Это вам просто пища для размышления.

grinkevitch 04.10.2005 01:30

как-то подозрительно мало где будет такое работать. потому что все левые порты файер просто не пропустит. а если есть административный доступ к компам, то можно и вообще ничего не писать. даже готовые утилитки были на sysinternals, кажется

Willow 17.12.2005 01:02

А можно перевыложить Socket1.rar, а то такая же самая проблема. А сети разбираться нету - надо принести и чтобы работало сразу.


Часовой пояс GMT +4, время: 06:38.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.