远程唤醒计算机

内网远程唤醒,需要在系统中开启对远程唤醒的支持。原理是使用UDP广播,发送有16个相同MAC地址组成的数据包,网卡收到后会帮我们唤醒计算机。

需要被唤醒的计算机中,在设备管理器,找到对应的网络适配器(网卡),在网卡属性中启动【网络唤醒】功能

在这里插入图片描述

代码:

#include <stdio.h>
2	 #include <arpa/inet.h>
3	 #include <sys/ioctl.h>
4	 #include <net/if.h>
5	 #include <string.h>
6	 #include <unistd.h>
7	 #include <stdlib.h>
8	 
9	 
10	 int main(int argc, char* argv[])
11	 {
12	         unsigned char mac[6]={0x00,0x10,0x20,0x30,0x40,0x50};//目的主机MAC地址,例如: 00:10:20:30:40:50
13	         unsigned char packet[102];
14	         struct sockaddr_in addr;
15	         int sockfd, i,j, on = 1;
16	 
17	         //构建magic packet
18	         for(i=0;i<6;i++)            
19	             packet[i] = 0xFF;    
20	             
21	         for(i=1;i<17;i++)
22	             for(j=0;j<6;j++)
23	                 packet[i*6+j] = mac[j];
24	         
25	         //UDP
26	         sockfd = socket(AF_INET, SOCK_DGRAM, 0);
27	         //广播
28	         setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST,&on, sizeof(on));
29	         if(sockfd < 0)
30	             exit(0);
31	                 
32	         memset((void*)&addr, 0, sizeof(addr));
33	         addr.sin_family = AF_INET;
34	         addr.sin_port = htons(10000);
35	         addr.sin_addr.s_addr = inet_addr("xxx.xxx.xxx.xxx");//广播地址
36	         
37	         sendto(sockfd, packet, sizeof(packet), 0, (struct sockaddr *)&addr, sizeof(addr));
38	         close(sockfd);
39	             
40	         return 0;
41	 }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值