通过网卡远程开启PC
来源:互联网 发布:全民飞机大战冲刺算法 编辑:程序博客网 时间:2024/06/06 05:12
一:总的说来,读取配置 .pclist 获取mac地址。
内容格式如下:
macaddr pc_name
6c:0b:84:68:17:10 ubuntu3
二:获取socket并设置它的属性
三:设置并发送magic包
备注:运行这个程序后,可能PC会堵塞,原因是要设置PC的BIOS使其支持通过网卡启动PC。
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;
}
0 0
- 通过网卡远程开启PC
- WIN7通过批处理开启/禁用无线网卡
- android通过.net连接远程pc数据库
- 通过ssh用PC远程控制TK1
- AndroidStudio通过AIDL开启、绑定远程Service
- 有无线网卡的电脑,通过shell开启无线网
- Raspberry pi zero w 开启 USB网卡 通过USB联网
- pc上通过ssh远程访问开发板
- Windows7通过公网远程处在路由器内网的PC
- 通过WMI本地和远程监视网卡流量
- Delphi通过开启远程线程注射DLL至目标进程
- 通过开启远程线程 注射DLL至目标进程
- 远程通过命令行开启局域网计算机的远程桌面服务
- 通过测试服务器在myeclipse开启远程debug
- 通过树莓派的无线网卡与pc的tcp助手通讯实验
- CentOS6.5下通过Shell修改MySQL初始密码,开启远程登录,授权远程登录用户
- CentOS6.5下通过Shell修改MySQL初始密码,开启远程登录,授权远程登录用户
- linux 开启网卡
- 线程安全的单例模式
- Hibernate学习笔记--导航
- 查看android api的网址,速度非常快
- 最重要的工作是招聘人才,在多的战略也无法替代人才
- Unity中HideInInspector和SerializeField
- 通过网卡远程开启PC
- 初识软件定义存储
- iOS arc 内存管理
- java Map及Map.Entry详解及用途
- 优化UITableViewCell高度计算的那些事
- 天正建筑8.0过期补丁下载
- linux内核编程4部曲之一:linux内核编译
- Burpsuite中protobuf数据流的解析
- iOS 打包出错, 编译出错,证书问题,上传AppStore