#include <windows.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
int i; //index for for loop
//check validaty of input
if( 2 != argc)
{
printf("Usage: %s <MAC ADDRESS>\n\nFor Example: %s 00-11-22-33-44-55\n", argv[0], argv[0]);
return 1;
}
int iLen = strlen(argv[1]);
if( 17 != iLen ) //include 5 '-'
{
printf("Length of MAC ADDRESS error, it should be 17 hex digits but got: %d\n", iLen);
return 2;
}
for( char *c = argv[1]; *c; c++ )
{
if( '-' != *c && !isxdigit(*c) )
{
printf("Invalid MAC address got, it should be consisted of hex digits and '-'\n");
return 3;
}
}
int iDstAddr[6];
i = sscanf(argv[1], "%2x-%2x-%2x-%2x-%2x-%2x",
&iDstAddr[0], &iDstAddr[1], &iDstAddr[2], &iDstAddr[3], &iDstAddr[4], &iDstAddr[5]);
if( 6 != i )
{
printf("Invalid MAC Address!\n");
return 4;
}
unsigned char ucEthAddr[7];
for( i = 0; i < 6; i++ )
ucEthAddr[i] = iDstAddr[i];
ucEthAddr[6] = '\0';
//construct Magic Packet
u_char ucMagicPacket[256];
int iPacketSize = 6;
memset(ucMagicPacket, '\0', sizeof(ucMagicPacket));
memset(ucMagicPacket, 0xff, iPacketSize);
for( i = 0; i < 16; i++ )
{
memcpy(ucMagicPacket + iPacketSize, ucEthAddr, 6);
iPacketSize += 6;
}
//start WSA
WSADATA WSAData;
if( 0 != WSAStartup(MAKEWORD(2,0), &WSAData) )
{
printf("WSAStartup Failed: %d\n", GetLastError());
return 5;
}
//create socket
SOCKET sock = socket(AF_INET, SOCK_DGRAM, 0);
if( INVALID_SOCKET == sock )
{
printf("Create Socket Error: %d\n", GetLastError());
WSACleanup();
return 6;
}
BOOL bOptVal = TRUE;
int iOptLen = sizeof(BOOL);
if( SOCKET_ERROR == setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char*)&bOptVal, iOptLen) )
{
printf("Set Socket Option Error: %d\n", WSAGetLastError());
closesocket(sock);
WSACleanup();
return 7;
}
sockaddr_in to;
to.sin_family = AF_INET;
to.sin_port = htons(0);
to.sin_addr.s_addr = htonl(INADDR_BROADCAST);
//Send Magic Packet
if( SOCKET_ERROR == sendto(sock, (const char*)ucMagicPacket, iPacketSize, 0, (const struct sockaddr*)&to, sizeof(to)) )
printf("Magic packet send error: %d\n", WSAGetLastError());
else
printf("Magic packet send successfully!\n");
closesocket(sock);
WSACleanup();
return 0;
}
WoL.zip_UP_wol
版权申诉
72 浏览量
2022-09-24
05:51:55
上传
评论
收藏 1.97MB ZIP 举报
我虽横行却不霸道
- 粉丝: 75
- 资源: 1万+
最新资源
- 基于QT的地图可视化桌面系统后台数据库为MySQL5.7源码.zip
- 基于simulink的PLL锁相环系统仿真【包括模型,文档,参考文献,操作步骤】
- 基于EM-GMM模型的目标跟踪和异常行为检测matlab仿真【包括程序,注释,参考文献,操作步骤,说明文档】
- 2109010044_胡晨燕_选课管理数据库设计与实现.prj
- 帕鲁介绍的PPT备份没什么好下的
- demo1-202405
- 两种方式修改Intel网卡MAC地址
- 服务器搭建所需资源:static文件夹
- Vue02的源码学习资料
- Python 程序语言设计模式思路-行为型模式:访问者模式:在不改变被访问对象结构的情况下,定义对其元素的新操作
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0