局域网远程开机软件制作代码分享

所属分类: 脚本专栏 / linux shell 阅读数: 383
收藏 0 赞 0 分享

复制代码 代码如下:

/*************************************************************************
 > File Name: wake_up.c
 > Author: wz
 > Created Time: Fri 15 Nov 2013 03:42:47 PM CST
 ************************************************************************/

#include<unistd.h>
#include<arpa/inet.h>
#include<net/if.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<sys/ioctl.h>

void get_mac(char *argv,unsigned char *save_mac)
{
 int j = 0;
 int num_x = 0,num_d,first = 1;
 while(*argv != 0)
 {
  if(*argv != ':')
  {
   if(isdigit(*argv) && first)
   {
    num_x = (*argv - '0')*16;
    first = 0;
    argv++;
    continue;
   }
   if(first && isalpha(*argv))
   {
    num_x = (10+(*argv - 'a'))*16;
    first = 0;
    argv++;
    continue;
   }
   if(!first && isdigit(*argv))
   {
    num_x = num_x+(*argv - '0');
    first = 1;
    argv++;
    continue;
   }
   if(!first && isalpha(*argv))
   {
    num_x = num_x + (10 + (*argv - 'a'));
    first = 1;
    argv++;
    continue;
   }

  }
  else
  {

   save_mac[j] = num_x;
   num_x = 0;
   argv++;
   j++;
  }


 }

 save_mac[j] = num_x;
}

int main(int argc,char *argv[])
{
 int sockfd,i,j,on = 1,n;

 unsigned char packet[120];
 unsigned char save_mac[120];
 struct sockaddr_in to;

 if(argc < 2)
 {
  fprintf(stderr,"用法:程序名 + 目标主机物理地址");
  return 1;
 }

 get_mac(argv[1],save_mac);

 //构建magic数据包
 for(i = 0; i < 6; i++)
 {
  packet[i] = 0xff;
 }

 for(i = 1; i < 17; i++)
 {
  memcpy(packet+i*6,save_mac,6);

 }


 sockfd = socket(AF_INET,SOCK_DGRAM,0);

 setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(on));

 if(socket < 0)
 {

  fprintf(stderr,"套接字创建错误\n");
  return 1;
 }

 memset((void *)&to,0,sizeof(to));

 to.sin_family = AF_INET;
 to.sin_port = htons(30000);
 to.sin_addr.s_addr = inet_addr("125.217.40.255");

 n = sendto(sockfd,packet,sizeof(packet),0,(struct sockaddr *)&to,sizeof(to));

 if(n <= 0)
 {
  fprintf(stderr,"发送失败!\n");
  return 1;

 }
 else
 {
  printf("发送成功.\n");
 }
 close(sockfd);
 return 0;
 

}

更多精彩内容其他人还在看

php编译安装常见错误大全和解决方法

这篇文章主要介绍了php编译安装常见错误大全和解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Linux base shell重定向详解

这篇文章主要介绍了Linux base shell重定向的相关资料,并用一个简明例子总结了常见用法(在第三节),需要的朋友可以参考下
收藏 0 赞 0 分享

Linux Shell 常见的命令行格式简明总结

这篇文章主要介绍了Linux Shell 常见的命令行格式简明总结,非常实用,需要的朋友可以参考下
收藏 0 赞 0 分享

Shell 命令替换的两种方式

这篇文章主要介绍了Shell 命令替换的两种方式,需要的朋友可以参考下
收藏 0 赞 0 分享

Python创建、删除桌面、启动组快捷方式的例子分享

这篇文章主要介绍了Python创建、删除桌面、启动组快捷方式的例子分享,需要的朋友可以参考下
收藏 0 赞 0 分享

shell基础学习中的字符串操作、for循环语句示例

这篇文章主要介绍了shell基础学习中的字符串操作、for循环语句示例
收藏 0 赞 0 分享

shell脚本中28个特殊字符的作用简明总结

这篇文章主要介绍了shell脚本中28个特殊字符的作用简明总结,需要的朋友可以参考下
收藏 0 赞 0 分享

linux shell流程控制语句实例讲解(if、for、while、case语句实例)

linux shell有一套自己的流程控制语句,其中包括条件语句(if),循环语句(for,while),选择语句(case)。下面我将通过例子介绍下,各个语句使用方法
收藏 0 赞 0 分享

分享一个实用的iptables脚本(各种过滤写法参考)

这篇文章主要介绍了分享一个实用的iptables脚本(各种过滤写法参考),需要的朋友可以参考下
收藏 0 赞 0 分享

shell脚本实现ssh自动登录功能分享

mac下没有找到好用的类似secureCRT,就自己写了个自动登录的脚本,分享一下,如果是新浪的,就基本不用修改代码就直接能用
收藏 0 赞 0 分享
查看更多