通过网卡远程开启PC

2024-06-17 01:58
文章标签 网卡 远程 开启

本文主要是介绍通过网卡远程开启PC,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


以下是代码实现部分,部分功能函数没有给出,可以自己实现。

一:总的说来,读取配置 .pclist 获取mac地址。

内容格式如下: 

macaddr  pc_name

6c:0b:84:68:17:10   ubuntu3

二:获取socket并设置它的属性

三:设置并发送magic包

备注:运行这个程序后,可能PC会堵塞,原因是要设置PC的BIOS使其支持通过网卡启动PC。


int main(int argc, char *argv[]){
    int status = 0;
    FILE *list;    
    int sockfd;    
    char magic[BUFMAX];
        struct sockaddr_in sin;
        unsigned char mac[MACLEN];    
    char defpath[128];
    char line[128], *entry;
    int i;
    if (argc == 1) {        
        sprintf(defpath, "%s/%s", getenv("HOME"), ".pclist");
            list = fopen(defpath, "r");        
        if (NULL == list)
        {            
           fprintf(stderr, "failed to read ~/.pclist, error(%d)\n", errno);
           return -1;
        }
        while (NULL != fgets(line, sizeof(line), list))
         {            
                /* skip over leading whitespace */
                entry = skip_whitespace(line);
                /* ignore blank/comment line */

             if (*entry == '\n' || *entry == '#')

    continue;

               /* pick up the mac address */
               parse_mac_address(entry, &mac[0]);
               fclose(list);
               goto do_wake;
          }        
          fclose(list);
         fprintf(stderr, "failed to read entry in .pclist\n");
         return -1;
    } else if (argc == 2) {
        parse_mac_address(argv[1], &mac[0]);
    } else {
        fprintf(stderr, "%s", help);
        return 0;
    }
    do_wake:
    printf("Waking up personal computer, MAC address "%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);    
    /* * create magic packet<br>     */
    int size = 6;    
    memset(magic, 0xFF, 6);
    for (i = 0; i < 16; i++)
    {        
        memcpy(magic + size, mac, 6);
        size += 6;    
    }
    /*      * create socket     */
        bzero((char *)&sin, sizeof(sin));
        sin.sin_family = AF_INET;
        sin.sin_port = htons(9);
    sin.sin_addr.s_addr = htonl(INADDR_BROADCAST);
    if ((sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1)
    {       
       fprintf(stderr, "failed to get socket, error(%d)\n", errno);
           status = -1;
           goto out;
    }
       int optval = 1;
       if (setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &optval, sizeof(optval)) == -1)
       {
          fprintf(stderr, "failed to set sockopt, error(%d)\n", errno);
          status = -2;        
          goto out;
       }
    /*      * wake pc up     */
      if (sendto(sockfd, magic, size, 0, (struct sockaddr*)&sin, sizeof(sin)) == -1)
      {        
         fprintf(stderr, "failed to send Magic packet, error(%d)\n", errno);
     status = -3;
      }
      out:
    close(sockfd);
    return status;
}


这篇关于通过网卡远程开启PC的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1068178

相关文章

如何开启和关闭3GB模式

https://jingyan.baidu.com/article/4d58d5414dfc2f9dd4e9c082.html

通过SSH隧道实现通过远程服务器上外网

搭建隧道 autossh -M 0 -f -D 1080 -C -N user1@remotehost##验证隧道是否生效,查看1080端口是否启动netstat -tuln | grep 1080## 测试ssh 隧道是否生效curl -x socks5h://127.0.0.1:1080 -I http://www.github.com 将autossh 设置为服务,隧道开机启动

IDEA配置Tomcat远程调试

因为不想把本地的Tomcat配置改乱或者多人开发项目想测试,本文主要是记录一下,IDEA使用Tomcat远程调试的配置过程,免得一段时间不去配置到时候忘记(毕竟这次是因为忘了,所以才打算记录的…) 首先在catalina.sh添加以下内容 JAVA_OPTS="-Dcom.sun.management.jmxremote=-Dcom.sun.management.jmxremote.port

Windows 可变刷新率是什么?如何开启?

在现代计算设备中,显示屏的刷新率对用户体验起着至关重要的作用。随着显示技术的不断进步,固定刷新率显示器逐渐被支持可变刷新率(Variable Refresh Rate, VRR)技术的显示器所取代。 可变刷新率定义 可变刷新率是什么?可变刷新率(VRR)是一种显示技术,它允许显示器的刷新率动态调整,以匹配显卡输出的帧率。传统的显示器通常具有固定的刷新率(如60Hz、75Hz等),这意味着显示器

开启青龙 Ninja 扫码功能失效后修改成手动填写CK功能【修正Ninja拉库地址】

国内:进入容器docker exec -it qinglong bash #获取ninjagit clone -b main https://ghproxy.com/https://github.com/wjx0428/ninja.git /ql/ninja#安装cd /ql/ninja/backend && pnpm install cp .env.example .env

HarmonyOS NEXT:华为开启全新操作系统时代

在全球科技浪潮的汹涌澎湃中,华为再次以创新者的姿态,引领了一场关于操作系统的革命。HarmonyOS NEXT,这一由华为倾力打造的分布式操作系统,不仅是对现有技术的一次大胆突破,更是对未来智能生活的一次深邃展望。 HarmonyOS NEXT并非简单的迭代升级,而是在华为多年技术积淀的基础上,对操作系统的一次彻底重构。它采用微内核架构,摒弃了传统的宏内核模式,实现了模块化和组件化的设计理念

LoRaWAN在嵌入式网络通信中的应用:打造高效远程监控系统(附代码示例)

引言 随着物联网(IoT)技术的发展,远程监控系统在各个领域的应用越来越广泛。LoRaWAN(Long Range Wide Area Network)作为一种低功耗广域网通信协议,因其长距离传输、低功耗和高可靠性等特点,成为实现远程监控的理想选择。本文将详细介绍LoRaWAN的基本原理、应用场景,并通过一个具体的项目展示如何使用LoRaWAN实现远程监控系统。希望通过图文并茂的讲解,帮助读

Chromium 调试指南2024 - 远程开发(下)

1. 引言 在《Chromium 调试指南2024 - 远程开发(上)》中,我们探讨了远程开发的基本概念、优势以及如何选择合适的远程开发模式。掌握了这些基础知识后,接下来我们将深入了解如何在远程环境中高效地进行Chromium项目的调试工作。 调试是开发过程中至关重要的一环,特别是对于像Chromium这样复杂的大型项目。远程调试不仅可以充分利用远程服务器的强大计算资源,还能确保开发环境的一致

plsql远程访问数据库

本机为win7 32位系统,为了学习oracle,装了个vbox虚拟机,再装了个win7虚拟机,内装oracle 11g(win7如果要装10g,要选择vista版本,win版本会安装报错).oracle11g安装完后有报了个错误,当时没注意,现在也忘了什么错了,但是不影响使用.后来想在本机安装plsql来远程连接虚win7上的oracle.查了一些资料,步骤如下: 1.下载plsql,安

博通5720 windows server 2003 32位网卡驱动和系统

driver for DELL R320 Broadcom 5720 Windows 2003 32bit 本人安装windows server 2003 网卡驱动成功!! 提供方便网盘下载地址博通5720网卡驱动 : http://pan.baidu.com/s/1GQWpw  windows server 2003 ghost 系统: http://pan