在一个局域网内,如何控制其他机器的开机、关机,并且运行相关程序?
解决方案 »
- delphi quickReport使用
- 数据库的问题
- 急!线程内动态创建Adoquery出错
- 如何判断对象指针所指向的堆内存是否已经释放
- DELPHI用ADO连接局域网上的SQL数据库问题???????????在线等
- 编译后可以运行,但是再次点击就不行了,大家帮忙看看是什么问题。急!在线等!!
- ADO数据库中如何获取一个数据库的所有字段
- select 语句的问题。(在线等)
- 如何知道stringgrid单击的是那一行?那一列?
- 怎么样用delphi实现,stop和start一个指定的站点?
- 急问题!向高手请教Rave报表问题:从Form传入一个字符串到报表!谢谢!
- 关于显示图片image控件
SysUtils, WinSock;const
LEN_PHYSADDR = 6;var
WSAData: TWSAData;
MSocket: TSocket;
SockAddrIn: TSockAddrIn;
RetVal, OptVal, i: Integer;
MacAddr: array[0..5] of Byte;
MagicData: array[0..101] of Byte;
Position: Longint;
SAddr: string;{$R VERSION.RES}function CheckWinSockResult(ResultCode: Integer; const FuncName: string): Integer;
begin
if ResultCode <> 0 then
begin
Result := WSAGetLastError;
Writeln(Format(#13#10'Windows socket error: %s (%d), on API ''%s''.',
[SysErrorMessage(Result), Result, FuncName]));
Halt;
end else Result := 0;
end;begin
if ParamCount <> 1 then
begin
Writeln(#13#10'Remote Wake Up.'#13#10#13#10 +
'Usage: rwu ethernetaddress'#13#10#13#10 +
'Example: rwu 00-B0-D0-15-86-B4'#13#10#13#10 +
'This program is freeware.'#13#10 +
'Author: Vadim Crits'#13#10);
Halt;
end;
try
SAddr := Paramstr(1);
if Length(SAddr) <> 17 then Abort;
for i := 1 to Length(SAddr) do
if i in [3, 6, 9, 12, 15] then
if SAddr[i] <> '-' then Abort;
for i := 0 to High(MacAddr) do
begin
if Pos('-', SAddr) > 0 then
MacAddr[i] := StrToInt(HexDisplayPrefix + Copy(SAddr, 1, Pos('-', SAddr) - 1))
else
MacAddr[i] := StrToInt(HexDisplayPrefix + SAddr);
Delete(SAddr, 1, Pos('-', SAddr));
end;
except
Writeln(#13#10'Invalid Ethernet address.');
Halt;
end;
CheckWinSockResult(WSAStartup($0101, WSAData), 'WSAStartup');
MSocket := socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
if MSocket = INVALID_SOCKET then CheckWinSockResult(MSocket, 'socket');
OptVal := 1;
CheckWinSockResult(setsockopt(MSocket, SOL_SOCKET, SO_BROADCAST,
PChar(@OptVal), SizeOf(OptVal)), 'setsockopt');
FillChar(MagicData, SizeOf(MagicData), $FF);
Position := LEN_PHYSADDR;
while Position < SizeOf(MagicData) do
begin
Move(MacAddr, Pointer(Longint(@MagicData) + Position)^, LEN_PHYSADDR);
Inc(Position, LEN_PHYSADDR);
end;
SockAddrIn.sin_family := AF_INET;
SockAddrIn.sin_addr.S_addr := Longint(INADDR_BROADCAST);
RetVal := sendto(MSocket, MagicData, SizeOf(MagicData), 0, SockAddrIn, SizeOf(SockAddrIn));
if RetVal = SOCKET_ERROR then CheckWinSockResult(RetVal, 'sendto');
CheckWinSockResult(closesocket(MSocket), 'closesocket');
CheckWinSockResult(WSACleanup, 'WSACleanup');
end.
而其只能在LAN局域网使用的
我觉得还是通过软件来管理比较好一些.网络管理软件或称远程控制软件都可以完成这些功能.
如果是出于恶意的,
那就叫木马了,PcAanywhere确实挺好的你可以试试。