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 ...
随机推荐
- libtar 和 libz 的使用
libtar 和 libz 的使用 用c代码生成 tar.gz 文件 实现的功能和 tar -zcf 命令一样 大概流程为 1.先用libtar相关函数对某个目录生成tar文件 2.然后对tar文件 ...
- 我为什么不用Django而用Flask?
前言 对于初学者来说,找到一个好的框架来学习或者项目开发都是非常有必要的,而当你有一定开发经验后,你应该选择适合当前业务需要的框架.我这里并不想探讨哪个框架好哪个不好,这个永恒的话题就跟探讨“世界上哪 ...
- .NET开源工作流RoadFlow-表单设计-文本域
点击工具栏上的 文本域 按钮可弹出文本域属性设置: 绑定字段:与数据表的某个字段绑定. 默认值:文本域初始值. 最大字符数:文本域可输入的最大字符数. 宽度:文本域的宽度,如:200px,80%. 高 ...
- Struts2项目问题及解决方式
1. 问题描述如图: 问题解释:意思就是execute()方法写错了. 问题解决: 改正:
- matlab练习程序(随机直线采样)
我只是感觉好玩,写了这样一段程序. 原理就是先随机生成两个点,然后根据这两个点画直线,最后在直线上的像素保留,没在直线上的像素丢弃就行了. 最后生成了一幅含有很多空洞的图像. 当然,对含有空洞的图像是 ...
- 创建Spark镜像文件
创建Spark镜像文件 1.将spark容器提交到新的镜像中 $>docker commit 01a25bdf1499 myrepos:centos-spark 2.将centos-spark镜 ...
- mysql便于管理的几个shell脚本
[mysql@clark scripts]$ lsmysql_db_shutdown.sh mysql_db_startup.sh mysql_env.ini mysqlplus.sh[mysq ...
- zip4j之加压解压
最近看同事搞个文件打包,搞了大半天,还是有问题!嗨~~ 网上明明有现成的,偏偏要自己写! 下面是基于zip4j实现加压解决的简单工具类 package com.learcher.zip; import ...
- 我的HTML总结之HTML发展史
HTML是Web统一语言,这些容纳在尖括号里的简单标签,构成了如今的Web. 1991年,Tim Berners-Lee编写了一份叫做“HTML标签”的文档,里面包含了大约20个用来标记网页的HTML ...
- 如何使用代码获得一个function module的Where Used List
如果要获得一个function module的Where Used List,我们通常用的办法是使用ABAP workbench里提供的功能. where used list显示结果如下: 但我接到一 ...