C/C++远程开机
// 2C:4D:54:ED:08:F0
#include <stdio.h>
#include <Windows.h>
#include <winsock.h> #pragma comment(lib,"Ws2_32.lib") /*
从文件通过ip获取mac
ip:欲取ip的mac地址
成功返回对应mac,否则返回NULL.
*/
unsigned char *GetfileMacforIp(char *ip);
/*
远程唤醒
mac:目标mac地址
ps:在此之前要确保目标主板支持远程唤醒
*/
VOID RemoteStart(unsigned char *mac); int main(void)
{
unsigned char *mac = GetfileMacforIp("172.18.1.6");
if (mac)
{
printf("%X-%X-%X-%X-%X-%X\n", mac[], mac[], mac[], mac[], mac[], mac[]);
//free(mac); 为什么无法free?
}
system("pause");
return ;
} VOID RemoteStart(unsigned char *mac)
{
// 存封包数据,格式为:6个0xFF为一组,16个mac地址为一组.mac地址正好是6个字节,封包总大小=6+16*6=102
unsigned char packet[] = { };
struct sockaddr_in addr;
int sockfd, i, j;
const char on = ;
WSADATA aaa; // 填充封包数据
for (i = ; i < ; i++)
packet[i] = 0xFF;
for (i = ; i < ; i++)
{
for (j = ; j < ; j++)
{
packet[i * + j] = mac[j];
}
}
// 使用socket发送封包前必须初始化socket
WSAStartup(MAKEWORD(, ), &aaa);
// udp方式
sockfd = socket(AF_INET, SOCK_DGRAM, );
setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &on, sizeof(on));
if (sockfd < )
{
printf("setsockopt filed!\n");
return;
}
memset(&addr, , sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons();
// 广播地址:255.255.255.255
addr.sin_addr.S_un.S_addr = inet_addr("255.255.255.255");
sendto(sockfd, (const char *)packet, sizeof(packet), , (struct sockaddr *)&addr, sizeof(addr));
WSACleanup();
} unsigned char *GetfileMacforIp(char *ip)
{
char tmp[] = { };
char *pos = NULL;
char mac[] = { };
unsigned char *mac1 = (unsigned char*)malloc(sizeof(unsigned char)*);
//unsigned char mac1[6] = { 0 }; FILE *wj = NULL;
fopen_s(&wj, "ipmac.txt", "r");
if (!wj)
{
printf("file can`t open!\n");
return ;
}
while (!feof(wj))
{
memset(tmp, , );
fgets(tmp, , wj);
pos = strstr(tmp, ip);
if (pos)
{
// 文本形式Mac地址
memmove(mac, tmp + strlen(ip) + , );
// 转字节形式Mac地址
sscanf_s(mac, "%x-%x-%x-%x-%x-%x", &mac1[], &mac1[], &mac1[], &mac1[], &mac1[], &mac1[]);
//printf("%X %X %X %X %X %X\n",mac1[0],mac1[1],mac1[2],mac1[3],mac1[4],mac1[5]);
break;
}
}
fclose(wj);
return mac1;
}
核心函数是RemoteStart,GetfileMacforIp是我在本地存放的一个ip和mac地址的数据文件。
C/C++远程开机的更多相关文章
- C#实现局域网内远程开机
1.远程开机原理 远程开机Wake on LAN(WOL),俗称远程唤醒,远程唤醒的实现主要是向目标主机发送特殊格式的数据包,是AMD公司制作的MagicPacket这套软件以生成网络唤醒所需要的特殊 ...
- Python 远程开机
用 Python 关机你肯定听过或者实践过,那么用 Python 开机呢?这是一个神奇的方法,教你如何用 Python 来开机. 本文目标 远程开机原理 Python 远程开机代码实现 Python ...
- java代码实现网络远程开机
http://my.oschina.net/kingfire/blog/156764 概述 远程开机(Wake onLAN)是指通过网络实现对服务器或者pc启动运行,现在很多网卡都支持的这个功能. 其 ...
- C#实现远程开机(局域网测试通过)
首先介绍相关知识. UDP协议 UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联 ...
- java实现远程开机
import java.io.IOException; import java.net.*;public class 远程开机 { public static void main(String[] a ...
- linux远程开机
它需要wakeonlan这个软件, 从何处得到它? 它的官方站是:http://sourceforge.net/projects/wake-on-lan/ 如果使用rpm包可以 ...
- linux 通过wol远程开机【转】
转自:http://yangbajing.blog.chinaunix.net/uid-10480699-id-5179860.html 今天发现个可以对linux服务器进行远程开机的软件-wakeo ...
- FRP+WoL实现远程开机+远程桌面
FRP+WoL实现远程开机+远程桌面 故事背景 这是一个很复杂而且很久远的故事,如果要讲的话,这个故事可以追溯到1981年(「都是废话,没有干货,如果不感兴趣请从第二章开始」),简单来说: 1981年 ...
- ubuntu 远程开机
启动者(电脑A) -----------> 被远程开启的电脑(电脑B) 一.被远程开启的电脑(电脑B):1. 重新开机,并进到BIOS设定2. 把Wake On Land / Wake On ...
- Ubuntu远程开机 (Wake on Lan)
启动者(A) 被远程开启者(B) 一.被远程开启的电脑(电脑B):1. 重新开机,并进到BIOS设定2. 把Wake On Land / Wake On PCI(E)设为Enable3. 储存并进入U ...
随机推荐
- tomcat server 报错之 More than the maximum allowed number of cookies
More than the maximum allowed number of cookies EVERE: Error processing request java.lang.IllegalArg ...
- 【Android】4.0 神一样的仪式感:Android第一个项目HelloWorld——eclipse
进入Eclipse,在左侧栏右击: 新建 “Android Application Project”项目,如果new之后没有,选择“Project”中“Android”目录下的 “Android Ap ...
- Eclipse Startup
First of all, we take a look at class EclipseStarter /********************************************** ...
- SharePoint - Templates & Definitions
1. <ListTemplate>元素的SecurityBits属性 Optional Text. Defines the item-level permissions in the li ...
- C#设计模式之代理模式(一)
原文地址:http://blog.csdn.net/lovelion/article/details/8227953 代理模式是常用的结构型设计模式之一,当无法直接访问某个对象或访问某个对象存在困难时 ...
- raw_input与input的区别
1. 版本差异 raw_input——>python2版本 input——>python3版本 2. 输入格式差异 就是raw_input()随便输都是字符串,而input()必须按照Py ...
- Selenium2学习(十)-- iframe定位
前言 有很多小伙伴在拿163作为登录案例的时候,发现不管怎么定位都无法定位到,到底是什么鬼呢,本篇详细介绍iframe相关的切换 以http://mail.163.com/登录页面10为案例,详细介绍 ...
- mybatis 中map作为参数
public interface ICodeGenDao extends IBaseDao<AssetsAllocation, Long> { /*** * 生成主编码 * @param ...
- TP5.0:引入view视图中公共的模版文件
1.实例:如后台admin模块,公用一个header.html和footer.hml 2.目录结构: 3.视图页面的使用方式: <!--添加header页面数据-->{include fi ...
- June 07th 2017 Week 23rd Wednesday
Failure is the condiment that gives success its flavor. 失败是让成功变美味的调味料. There are kinds of flavors in ...