C语言实现wake on lan(网络唤醒)

wake on lan是一种网络唤醒功能,它可以实现远程开机,刚好实验室有一台ftp服务器,因为不是24小时开机的,所以每次开机都要跑过去用手按开关,非常麻烦,于是在网上找了下资料,自己实现了一把,并在windows下用Qt写了个简单的界面,以后想开服务器就方便了。原理就是源主机广播一个特殊的数据包给目的主机,前提是目的主机的主板支持wake on lan并在BIOS里已经设置好,还有就是要知道目的主机的MAC地址。这个特殊的数据包叫做magic packet,香港服务器租用,它由102个字节组成,最前面六个字节为0xFF,其他字节为目的主机的MAC地址(6个字节为一组,服务器空间,网站空间,共16组),如下图所示:

知道这个原理之后就可以很容易实现了,实现代码如下,本人亲测。

1 #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>main(int argc, char* argv[])11 {unsigned char packet[102];14struct sockaddr_in addr;15int sockfd, i,j, on = 1;(i=0;i<6;i++)19packet[i] = 0xFF;(i=1;i<17;i++)22for(j=0;j<6;j++)23packet[i*6+j] = mac[j];sockfd = socket(AF_INET, SOCK_DGRAM, 0);setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST,&on, sizeof(on));29if(sockfd < 0)30exit(0);3132memset((void*)&addr, 0, sizeof(addr));33addr.sin_family = AF_INET;34addr.sin_port = htons(10000););sendto(sockfd, packet, sizeof(packet), 0, (struct sockaddr *)&addr, sizeof(addr));38 close(sockfd);;41 }婚姻犹如一艘雕刻的船,看你怎样去欣赏它,又怎样驾驭它。

C语言实现wake on lan(网络唤醒)

相关文章:

你感兴趣的文章:

标签云: