最近刚学网络编程,真是一门神奇的课程。闲来无事,用socket和gtk+实现了一个局域网远程开机小软件。
实现原理:在网卡中,有一个不标准的,但是又有很多网卡制造商都支持的标准。是AMD的magic包。也叫远程唤醒包。这个包的前面6个字节用0xff 填充,而后面字节则用目标主机的mac地址的连续16组循环填充。当目标主机收到这个数据包的时候,远程主机就能够实现自动开机。(测试成功)
以下给出实现源码,环境是ubuntu 12.04,需要gtk开发库,代码写的乱,风格像屎一样,这种东西于我来说,就是实验玩玩,没有价值,我就不作更改了。这里只是实现对特定主机的远程开机,如果要实现一个局域网中,对所有支持远程唤醒功能的主机实施远程开机。比如说对学校实验室的所有主机,学校实验室的MAC地址,前三个字节为,00:25:11,这是精英的网卡,前缀为eliteg_。 只需要将后面3个字节有0x00,0x00,0x00枚举到0xff,0xff,0xff.就可以对实验室的所有主机进行开机。
/*************************************************************************
> File Name: main.c
> Author: wz
> Created Time: Fri 15 Nov 2013 10:00:05 PM CST
************************************************************************/
#include<gtk/gtk.h>
#include<unistd.h>
#include<arpa/ine