#include <windows.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
//检查命令行参数
if(argc!=2)
{
printf("Wakeup your PC on LAN! by CJ<4uto@163.com>\n");
printf("Usage: %s <MAC address>\n", argv[0]);
printf("Example: %s 00-D0-4C-BF-52-BA", argv[0]);
return 0;
}
//检查MAC地址是否正确
for (char * a=argv[1]; *a; a++)
if (*a!='-' && !isxdigit(*a))
{
fprintf(stderr, "MAC Adresse must be like this: 00-D0-4C-BF-52-BA");
return 1;
}
int dstaddr[6];
int i=sscanf(argv[1], "%2x-%2x-%2x-%2x-%2x-%2x",
&dstaddr[0], &dstaddr[1], &dstaddr[2], &dstaddr[3], &dstaddr[4], &dstaddr[5]);
if (i!=6)
{
fprintf(stderr, "Invalid MAC Adresse!");
return 1;
}
unsigned char ether_addr[6];
for (i=0; i<6; i++)
ether_addr[i]=dstaddr[i];
//构造Magic Packet
u_char magicpacket[200];
memset(magicpacket, 0xff, 6);
int packetsize=6;
for (i=0; i<16; i++)
{
memcpy(magicpacket+packetsize, ether_addr, 6);
packetsize+=6;
}
//启动WSA
WSADATA WSAData;
if (WSAStartup( MAKEWORD(2, 0), &WSAData)!=0)
{
fprintf(stderr, "WSAStartup failed: %d\n", GetLastError());
return 1;
}
//创建socket
SOCKET sock=socket(AF_INET, SOCK_DGRAM, 0);
if (sock==INVALID_SOCKET)
{
fprintf(stderr, "Socket create error: %d\n", GetLastError());
return 1;
}
//设置为广播发送
BOOL bOptVal=TRUE;
int iOptLen=sizeof(BOOL);
if (setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char*)&bOptVal, iOptLen)==SOCKET_ERROR)
{
fprintf(stderr, "setsockopt error: %d\n", WSAGetLastError());
closesocket(sock);
WSACleanup();
return 1;
}
sockaddr_in to;
to.sin_family=AF_INET;
to.sin_port=htons(0);
to.sin_addr.s_addr=htonl(INADDR_BROADCAST);
//发送Magic Packet
if (sendto(sock, (const char *)magicpacket, packetsize, 0, (const struct sockaddr *)&to, sizeof(to))==SOCKET_ERROR)
fprintf(stderr, "Magic packet send error: %d", WSAGetLastError());
else
printf("Magic packet send!");
closesocket(sock);
WSACleanup();
return 0;
}
wol.rar_Magic Packet_SendMagic.cpp_Wake On LAN_magic_wol
版权申诉
8 浏览量
2022-09-20
14:35:09
上传
评论
收藏 1KB RAR 举报
林当时
- 粉丝: 97
- 资源: 1万+
最新资源
- foldcraftlauncher_262944.apk
- 珍藏多年的基于matlab实现潮流计算程序源代码集合,包含多个潮流计算程序.rar
- 使用FPGA实现串-并型乘法器
- 基于matlab实现针对基于双曲线定位的DV-Hop算法中误差误差出一种基于加权双曲线定位的DV-Hop改进算法.rar
- 基于matlab实现由遗传算法开发的整数规划,车辆调度问题.rar
- 电视家7.0(对电视配置要求高).apk
- 免费计算机毕业设计-基于JavaEE的医院病历管理系统设计与实现(包含论文+源码)
- 手机端 我的世界融合植物大战僵尸版.apk
- 植物大战僵尸 · 戴夫的老年生活 手机版.apk
- Runcraft · 我的世界跑酷游戏 手机端.apk
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0