怎样用WIN32ASM实现远程开关机

ufofind 2010-04-17 12:24:59
怎样用机WIN32ASM实现远程开关
我最近看到一个软有件(lanhelper)
它实现了在局域网内远程开关机

我不知道它是怎样实现,希望高手帮助
它是调用哪些API进行实现的?????????
...全文
201 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ufofind 2011-05-31
  • 打赏
  • 举报
回复
这个还有人看他,不错.
skolf 2011-05-29
  • 打赏
  • 举报
回复
想学习这方面的
ufofind 2010-05-22
  • 打赏
  • 举报
回复
.386
.model flat, stdcall
option casemap :none ; case sensitive

include windows.inc
include iphlpapi.inc
include ws2_32.inc
include user32.inc
include kernel32.inc
includelib iphlpapi.LIB
includelib WS2_32.LIB
includelib user32.LIB
includelib kernel32.LIB
.data
ERR db "网络初始化错误!",0
OK db "发送数据成功",0
MsgCaption db "远程开机",0
stSin sockaddr_in <0>
SendBuffer dd 16 dup (0)
stWsa WSADATA <0>
FBroadcast dd TRUE
SendLen dd 102 ;要发送的数据包长度
hSocket dd ?
;要唤醒的网卡MAC地址
csx1 db 00,0eh,7fh,0adh,029h,9ah
csx1_2 db 00,0eh,7fh,0adh,029h,99h
csx2 db 00,11h,85h,66h,0eah,0dfh
csx3 db 00,11h,85h,66h,0eah,0d0h
.code
;*******************************************************************
NetWakerSend proc ;入口:esi->要远程唤醒的网卡MAC
;获取IP的MAC地址:szMacLen=长度(802.3为6B),szMac存放的缓冲
;invoke inet_addr,addr ip ;例如定义IP:ip db "192.168.1.6",0
;invoke SendARP,eax,0,addr szMac,addr szMacLen ;eax!=NO_ERROR表示成功
;构造远程唤醒发送缓冲区内容
mov edi,offset SendBuffer ;edi->发送缓冲区
mov al,0ffh
mov ecx,6
rep stosb ;发送缓冲区头部为6个0ffh
mov edx,16 ;紧接着重复填写16次MAC地址
.while edx > 0 ;循环填写缓冲区后面的内容
push esi
mov ecx,6
rep movsb
dec edx
pop esi
.endw
;设置允许以255.255.255.255方式发送广播包,如果不设置也可以例:192.168.1.255方式发送
invoke setsockopt,hSocket,SOL_SOCKET,SO_BROADCAST,addr FBroadcast,sizeof FBroadcast
mov stSin.sin_addr,INADDR_BROADCAST ;设置广播地址IP:255.255.255.255
invoke sendto,hSocket,addr SendBuffer,SendLen,0,addr stSin,sizeof sockaddr_in
.if eax!=SOCKET_ERROR ;显示发送成功消息
invoke MessageBoxA, 0,addr OK,addr MsgCaption,0
.endif
ret
NetWakerSend endp
;*************************************************************************
start: ;主程序在这里开始
invoke WSAStartup,101h,addr stWsa
invoke socket,AF_INET,SOCK_DGRAM,0 ;使用upd
mov hSocket,eax
invoke htons,65534 ;任意定义一个未用端口
mov stSin.sin_port,ax
mov stSin.sin_family,AF_INET
invoke bind,hSocket,addr stSin,sizeof stSin
.if eax==SOCKET_ERROR ;初始化网络出错
invoke MessageBoxA, 0,addr ERR,addr MsgCaption,0;显示网络出错
.else
mov esi,offset csx1 ;esi->要远程唤醒的网卡MAC
call NetWakerSend
mov esi,offset csx1_2 ;esi->要远程唤醒的网卡MAC
call NetWakerSend
mov esi,offset csx2 ;esi->要远程唤醒的网卡MAC
call NetWakerSend
mov esi,offset csx3 ;esi->要远程唤醒的网卡MAC
call NetWakerSend
.endif
invoke ExitProcess,NULL
end start

ufofind 2010-04-20
  • 打赏
  • 举报
回复
zoologist你那个程序,是VB的吧我对VB不了解,我想有WIN32asm来实现它,刚才我用你的程序在网吧的机器上运行了一下,过了一会就关机了
ufofind 2010-04-20
  • 打赏
  • 举报
回复
在这很报谦,没有在网吧上网cnzdgs,我在论坛里看到你的汇编很好,我想问一下有win32asm怎来实现它,实现远程开与关我从网上只搜索了个大概(包含有连续6个字节的“FF”和连续重复16次的MAC地址),在网吧里看到网管人员有lanhelper来进行远程开机,我不知道怎样有WIN32去实现它
zoologist 2010-04-19
  • 打赏
  • 举报
回复
网卡会相应一种特殊格式的 网络包,然后会发送wol信号唤醒主板

http://www.lab-z.com/delphi/MyWOL.rar
cnzdgs 2010-04-18
  • 打赏
  • 举报
回复
远程开关机与编程语言没有直接关系。局域网内远程开机首先要求被控电脑支持网络唤醒,由主控端向目标MAC地址发送开机命令实现控制,具体做法可以搜索“网络唤醒”、“远程开机”。远程关机要事先在被控电脑上安装好自己的程序,并使其每次启动系统后自动运行,由该程序接收主控端通过网络发送的命令,执行关机操作,可以通过socket编程实现网络通讯。
ufofind 2010-04-18
  • 打赏
  • 举报
回复
在GOOGLE不好找到直接结果啊,在论坛里就是要快点
space_time 2010-04-18
  • 打赏
  • 举报
回复
远程关机要有权限的。。。还涉及远程主机的权限设置,lz还是先Google远程关机了解下吧
汇编调用api,c-sdk怎么实现的,换成汇编就行
ufofind 2010-04-18
  • 打赏
  • 举报
回复
我知道在本地关机与重启要进行提权(RtlAdjustPrivilege)
然后进行关机或重启(NtShutdownSystem)但对于网络上的不知道
大熊猫侯佩 2010-04-17
  • 打赏
  • 举报
回复
其实和C/C++类似,你最好看一下一本关于远程控制的C++书籍。

一种简单的方法是使用http://live.sysinternals.com 中的PsTools包中的远程执行

程序运行 shutdown 命令,或者如果是2k,系统,可以自己通过 Win32API :

ExitWindowsEx 实现关机或重启功能。
delphiwcdj 2010-04-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ufofind 的回复:]

可是我还是不太明白,我的意思是怎样有汇编进行API调用进行对局域网内的机器操作
虽然没有得到我想要的答案还是Thank you
[/Quote]
先调用关机的API,再通过编译器调试看其对应的汇编代码。好像是Alt+2
ufofind 2010-04-17
  • 打赏
  • 举报
回复
可是我还是不太明白,我的意思是怎样有汇编进行API调用进行对局域网内的机器操作
虽然没有得到我想要的答案还是Thank you

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧