远程唤醒技术原理
来源:互联网 发布:旅游管理教学软件 编辑:程序博客网 时间:2024/05/17 06:29
远程唤醒技术(Wake On LAN)是通过给支持WOL标准的网卡,广播一个特定格式的数据包,由网卡唤醒停机状态中的计算机的这么一种技术。常用于远程唤醒网络服务器。
数据包格式:6个0xFF字节+16次目标机器的MAC地址
如需要唤醒MAC地址为00:1E:67:03:35:BD的计算机,数据包数据如下(十六进制):
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x1E 0x67 0x03 0x35 0xBD0x00 0x1E 0x67 0x03 0x35 0xBD 0x00 0x1E 0x67 0x03 0x35 0xBD 0x00 0x1E 0x67 0x03 0x35 0xBD 0x00 0x1E 0x67 0x03 0x35 0xBD 0x00 0x1E 0x67 0x03 0x35 0xBD 0x00 0x1E 0x67 0x03 0x35 0xBD0x00 0x1E 0x67 0x03 0x35 0xBD 0x00 0x1E 0x67 0x03 0x35 0xBD 0x00 0x1E 0x67 0x03 0x35 0xBD 0x00 0x1E 0x67 0x03 0x35 0xBD 0x00 0x1E 0x67 0x03 0x35 0xBD 0x00 0x1E 0x67 0x03 0x35 0xBD0x00 0x1E 0x67 0x03 0x35 0xBD 0x00 0x1E 0x67 0x03 0x35 0xBD 0x00 0x1E 0x67 0x03 0x35 0xBD
附一段简单的C代码:
数据包格式:6个0xFF字节+16次目标机器的MAC地址
如需要唤醒MAC地址为00:1E:67:03:35:BD的计算机,数据包数据如下(十六进制):
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x1E 0x67 0x03 0x35 0xBD0x00 0x1E 0x67 0x03 0x35 0xBD 0x00 0x1E 0x67 0x03 0x35 0xBD 0x00 0x1E 0x67 0x03 0x35 0xBD 0x00 0x1E 0x67 0x03 0x35 0xBD 0x00 0x1E 0x67 0x03 0x35 0xBD 0x00 0x1E 0x67 0x03 0x35 0xBD0x00 0x1E 0x67 0x03 0x35 0xBD 0x00 0x1E 0x67 0x03 0x35 0xBD 0x00 0x1E 0x67 0x03 0x35 0xBD 0x00 0x1E 0x67 0x03 0x35 0xBD 0x00 0x1E 0x67 0x03 0x35 0xBD 0x00 0x1E 0x67 0x03 0x35 0xBD0x00 0x1E 0x67 0x03 0x35 0xBD 0x00 0x1E 0x67 0x03 0x35 0xBD 0x00 0x1E 0x67 0x03 0x35 0xBD
附一段简单的C代码:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/socket.h>#include <netinet/in.h>#include <errno.h>#define PORT 12345int main(int argc, char **argv) {if (argc < 2) {printf("Usage: wake mac1 mac2 mac3 ...\n");exit(1);}int s = socket(AF_INET, SOCK_DGRAM, 0);if (s == -1) {perror("socket");exit(1);}int optval = 1;int ret = setsockopt(s, SOL_SOCKET, SO_BROADCAST, &optval, sizeof(int)); if (ret == -1) {perror("setsockopt");exit(1);}struct sockaddr_in addr;bzero(&addr, sizeof(addr));addr.sin_family = AF_INET;//addr.sin_addr.s_addr = inet_addr("192.168.0.23");addr.sin_addr.s_addr = htonl(INADDR_BROADCAST);addr.sin_port = htons(PORT);int i, j, k;char buf[6 + 16 * 6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};char dst[2];for (i = 1; i < argc; ++i) {if (strlen(argv[i]) != 17) {printf("Invalid mac address %s!\n", argv[i]);continue;}j = 5;buf[++j] = (char)strtol(strncpy(dst, argv[i] , 2), NULL, 16);buf[++j] = (char)strtol(strncpy(dst, argv[i] + 3, 2), NULL, 16);buf[++j] = (char)strtol(strncpy(dst, argv[i] + 6, 2), NULL, 16);buf[++j] = (char)strtol(strncpy(dst, argv[i] + 9, 2), NULL, 16);buf[++j] = (char)strtol(strncpy(dst, argv[i] + 12, 2), NULL, 16);buf[++j] = (char)strtol(strncpy(dst, argv[i] + 15, 2), NULL, 16);k = 2;do {memcpy(buf + k * 6, buf + 6, 6);} while (++k < 18);int len = sendto(s, buf, sizeof(buf), 0, (struct sockaddr*)&addr, sizeof(addr));if (len == -1) {perror("sendto");} else {printf("Wake %s OK!\n", argv[i]);}}return 0;}
参考资料:
http://en.wikipedia.org/wiki/Wake-on-LAN
- 远程唤醒技术原理
- 远程唤醒相关技术解决方法
- Intel研发PC远程唤醒技术
- 关于远程唤醒技术的相关资料
- 远程唤醒
- 远程唤醒
- 远程唤醒
- 远程唤醒
- 远程唤醒
- 英特尔开发远程唤醒技术可操控家中PC
- 新手学堂:网络远程唤醒技术实现方…
- 远程唤醒及跨网段远程唤醒
- 远程唤醒源代码
- 远程唤醒计算机
- 远程唤醒代码
- Socket实现远程唤醒
- php远程唤醒
- ipad远程唤醒
- Linux 下SVN常用命令
- 面向对象设计模式之Composite组合模式(结构型)
- 关于手机的SIM卡
- SAP Notes
- Go through linux下编程一些杂烩
- 远程唤醒技术原理
- 解决Office2007使用内存泄露问题
- 三招教你利用Windows系统自带命令手工搞定病毒
- C# 子线程与前台UI界面的交互
- 网页版面参考
- 《C#异常处理》
- ie 和火狐兼容问题
- ArcGIS runtime/engine/desktop 10安装及授权方法
- linux 磁盘分区,格式化操练手记