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 ...
随机推荐
- Spring Chapter4 WebSocket 胡乱翻译 (二)
书接上文,Spring Chapter4 WebSocket 胡乱翻译 (一) 4.4.4. 消息流 一旦暴露了STOMP端点,Spring应用程序就成为连接客户端的STOMP代理. 本节介绍服务器端 ...
- Backbone事件机制核心源码(仅包含Events、Model模块)
一.应用场景 为了改善酷版139邮箱的代码结构,引入backbone的事件机制,按照MVC的分层思想搭建酷版云邮局的代码框架.力求在保持酷版轻量级的基础上提高代码的可维护性. 二.遗留问题 1.b ...
- GUI应用程序架构的十年变迁:MVC,MVP,MVVM,Unidirectional,Clean
十年前,Martin Fowler撰写了 GUI Architectures 一文,至今被奉为经典.本文所谈的所谓架构二字,核心即是对于对于富客户端的 代码组织/职责划分 .纵览这十年内的架构模式变迁 ...
- iOS开发之GCD基础
重新回顾.学习GCD.Block.先贴出一篇不错的讲解GCD基础使用的文章 原文地址:http://blog.csdn.net/aolan1108/article/details/17283415 做 ...
- 03_CronTrigger
[Cron表达式] Quartz使用类似于Linux下的Cron表达式定义的时间规则,Cron表达式由6到7个空格分隔的时间字段组成. [ 字符说明 ] * :可以用在所有字段中,表示对应时间域内的每 ...
- 【Linux】GCC编译
GCC简介 GCC基本用法 GCC程序产生过程 GCC编译选项 一.GCC简介 1.1 GCC特点 Gcc(GNU C Compiler)是GNU推出的功能强大.性能优越的多平台编译器,是GNU的 代 ...
- Android性能优化之渲染篇
下面是渲染篇章的学习笔记,部分内容和前面的性能优化典范有重合,欢迎大家一起学习交流! 1)Why Rendering Performance Matters 现在有不少App为了达到很华丽的视觉效果, ...
- 在MVC中使用Bundle打包压缩js和css
第一步:安装 安装“System.Web.Optimization”:在中“NuGet”中搜索 安装. 第二步:配置 配置“Views”目录下的“web.config”文件增加“System.Web. ...
- 最新一道面試題目,input: int[1,1,2,2,2,3,3,3],output [3,2,1],要求按照數字出現的次數從多到少排列元素。
面試當時沒有及時答出來,感覺當時在面試官的提示下跑偏了.想用兩個數組來mapping key和value然後對等排序,但是因為面試官讓用Array.sort而沒想好有什麼好辦法,結果可想而知.但是題目 ...
- php文件编程
一:文件常见操作 流的概念:当数据从程序(内存)->文件(磁盘),我们称为输出流,当数据从文件(磁盘)->程序(内存),我们称为输入流 1,获取文件信息 <?php //打开文件 f ...