【无标题】

2 篇文章 0 订阅
1 篇文章 0 订阅

局域网唤醒关机电脑(WOL)

背景

公司的软件是安装在windows系统,客户希望每天上班前电脑自动开机并执行定期任务。

WOL 局域网唤醒

大概意思就是:被唤醒的电脑虽然是关机状态,但网卡仍然能接收特定魔幻包并能唤醒主机;所以
此功能需要网卡支持并且操作系统做一定配置。具体配置可以百度一下

第三方工具

C++代码发送魔幻包

// WOL.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <winsock2.h>
using namespace std;
 
int hexChar2int(char hex)
{
	if(hex>='0'&&hex<='9')
	{
		return hex - '0';
	}
	else if(hex>='A'&&hex<='Z')
	{
		return hex - 'A' +10;
	}
	else if(hex>='a'&&hex<='z')
	{
		return hex - 'a'+10;
	}
	return 0;
}
 
int main(int argc, char* args[])
{
    printf("argc=%d",argc);
	if (argc > 1)
	{
		char *next_token = NULL;
		unsigned char mac[6];
		
		int count = 0;
 
		char* tmp = strtok_s(args[1], "-", &next_token);
        char* broadcastAddress=args[2];
        printf("broadcast addr:%s \n",broadcastAddress);
		while (1)
		{
            printf("mac:%s \n",tmp);
			mac[count] = hexChar2int(tmp[0]) * 16 + hexChar2int(tmp[1]);
			++count;
 
			tmp = strtok_s(0, "-", &next_token);
			if(tmp==0)
			{
				break;
			}
		}
 
		// mac[0] = 0x0C;
		// mac[1] = 0x9D;
		// mac[2] = 0x92;
		// mac[3] = 0xC2;
		// mac[4] = 0x56;
		// mac[5] = 0xE8;
		// 存封包数据,格式为:6个0xFF为一组,16个mac地址为一组.mac地址正好是6个字节,封包总大小=6+16*6=102
		unsigned char packet[102] = {0};
		struct sockaddr_in addr;
		int sockfd, i, j;
		const char on = 1;
		WSADATA aaa;
 
		// 填充封包数据
		for (i = 0; i < 6; i++)
			packet[i] = 0xFF;
		for (i = 1; i < 17; i++)
		{
			for (j = 0; j < 6; j++)
			{
				packet[i * 6 + j] = mac[j];
			}
		}
		// 使用socket发送封包前必须初始化socket
		WSAStartup(MAKEWORD(2, 2), &aaa);
		// udp方式
		sockfd = socket(AF_INET, SOCK_DGRAM, 0);
		setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &on, sizeof(on));
		if (sockfd < 0)
		{
			printf("setsockopt filed!\n");
			return -1;
		}
		memset(&addr, 0, sizeof(addr));
		addr.sin_family = AF_INET;
		addr.sin_port = htons(10000);
		addr.sin_addr.S_un.S_addr = inet_addr(broadcastAddress);
		sendto(sockfd, (const char *)packet, sizeof(packet), 0, (struct sockaddr *)&addr, sizeof(addr));
		WSACleanup();
	}
 
	return 0;
}
 

mywol.exe 00-E0-4C-97-2F-AB  192.168.1.255
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值