android firmware 利用UDP socket发送Magic Packet

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <stdlib.h>
 4 #include <unistd.h>
 5 #include <sys/types.h>
 6 #include <sys/stat.h>
 7 #include <sys/socket.h>
 8 #include <netinet/in.h>
 9 #include <arpa/inet.h>
10 #include <netdb.h>
11
12 void fill_magic_buf(void *magic_buf, void *mac)
13 {
14          int i;
15          char *ptr;
16
17          ptr = magic_buf;
18          memset(ptr, 0xFF, 6);
19          ptr += 6;
20
21          for(i = 0; i < 16; ++i) {
22                  memcpy(ptr, mac, 6);
23                  ptr += 6;
24          }
25 }
26
27 void usage(void)
28 {
29          printf("usage...\n");
30  }
31
32 int main(int argc, char **argv)
33 {
34          int s;
35          int packet_num = 10;
36          char c;
37
38          unsigned char mac[6] = {0x94, 0x39, 0xE5, 0x02, 0x5E, 0xC9};
39          char dstip[256] = "192.168.1.103";
40          int port = 4097;
41
42          struct sockaddr_in address;
43          char magic_buf[6 + 6 * 16] = {0};
44
45          daemon(0,0);    /* run in background */
46
47          while((c = getopt(argc, argv, "d:m:p:")) != -1) {
48                  switch(c) {
49                  case ‘d‘:
50                          strcpy(dstip, optarg);
51                          break;
52                  case ‘m‘:
53                          sscanf(optarg, "%x:%x:%x:%x:%x:%x",
54                                  (unsigned int*)&mac[0], (unsigned int*)&mac[1],
55                                  (unsigned int*)&mac[2], (unsigned int*)&mac[3],
56                                  (unsigned int*)&mac[4], (unsigned int*)&mac[5]);
57                          break;
58                  case ‘p‘:
59                          port = atoi(optarg);
60                          break;
61                  default:
62                          usage();
63                          return -1;
64                  }
65          }
66
67          s = socket(AF_INET, SOCK_DGRAM, 0);
68
69          if (s == -1) {
70                  perror("Opening socket");
71                  exit(EXIT_FAILURE);
72          }
73
74          memset(&address, 0, sizeof(struct sockaddr_in));
75          address.sin_family = AF_INET;
76          address.sin_addr.s_addr = inet_addr(dstip);
77          address.sin_port = htons(port);
78
79          fill_magic_buf(magic_buf, mac);
80
81          /* ten packets. TODO: use ping to check whether the destination is on or else. */
82          while (packet_num-- > 0) {
83                  if (sendto(s, magic_buf, sizeof(magic_buf), 0,
84                       (struct sockaddr *)&address, sizeof(address)) < 0) {
85                          printf("sendto\n");
86                          exit(EXIT_FAILURE);
87                  }
88                  sleep(1);
89          }
90
91          exit(EXIT_SUCCESS);
92 } 
时间: 2025-01-13 18:00:44

android firmware 利用UDP socket发送Magic Packet的相关文章

Android Socket 发送广播包的那些坑

Socket广播包经常被用于局域网内的两台设备之间互相发现和消息传递,在Android应用开发过程中,也经常会遇到这样的需求,例如:两台Android设备之间.Android与手环等智能硬件之间.Android与Windows电脑之间等等. 本文主要介绍在Android中使用Socket开发广播包程序时需要注意的编程事项,以及解决方法. 首先给出一段Android发送广播包的示例代码: DatagramSocket socket = new DatagramSocket(8000); socke

【Android开发—智能家居系列】(四):UDP通信发送指令

思路回顾 [1]手机连接WIFI模块 [2]UDP通信对WIFI模块发送指令,以和WIFI模块保持连接状态 [3]UDP通信对WIFI模块发送指令,让其搜索可用的无线网,返回WIFI列表 [4]发送指令,让WIFI模块接入指定路由 [5]手机连接路由 [6]发送指令,获得WIFI模块的动态IP地址 UDP通信线程类 package com.jczb.smartlife.common; import java.io.IOException; import java.net.DatagramPack

Android(java)学习笔记80:UDP协议发送数据

UDP协议发送数据:我们总是先运行接收端,再运行发送端发送端: 1 package cn.itcast_02; 2 3 import java.io.IOException; 4 import java.net.DatagramPacket; 5 import java.net.DatagramSocket; 6 import java.net.InetAddress; 7 /* 8 * UDP协议发送数据: 9 * A:创建发送端Socket对象 10 * B:创建数据,并把数据打包 11 *

Socket tips: 同意socket发送UDP Broadcast

假设创建一个UDP Socket: socketHandle = socket(serverAddr->ai_family, serverAddr->ai_socktype, serverAddr->ai_protocol); 如今就用它来发送Broadcast.一定会出错的,Socket API不同意这样做.那么怎样使它支持broadcast呢?须要继续做一些设置: int broadcastPermission = 1; setsockopt(socketHandle, SOL_SO

php 利用socket发送GET,POST请求

作为php程序员一定会接触http协议,也只有深入了解http协议,编程水平才会更进一步.最近我一直在学习php的关于http的编程,许多东西恍然大悟,受益匪浅.希望分享给大家.本文需要有一定http基础的开发者阅读. 今天给大家带来的是如何利用socket发送GET,POST请求.我借用燕十八老师封装好的一个Http类给进行说明. 在日常编程中相信很多人和我一样大部分时间是利用浏览器向服务器提出GET,POST请求,那么可否利用其它方式提出GET,POST请求呢?答案必然是肯定的.了解过HTT

Linux编程之UDP SOCKET全攻略

这篇文章将对linux下udp socket编程重要知识点进行总结,无论是开发人员应知应会的,还是说udp socket的一些偏僻知识点,本文都会讲到.尽可能做到,读了一篇文章之后,大家对udp socket有一个比较全面的认识.本文分为两个专题,第一个是常用的upd socket框架,第二个是一些udp socket并不常用但又相当重要的知识点. 一.基本的udp socket编程 1. UDP编程框架要使用UDP协议进行程序开发,我们必须首先得理解什么是什么是UDP?这里简单概括一下. UD

UDP Socket

UDP的Java支持 UDP协议提供的服务不同于TCP协议的端到端服务,它是面向非连接的,属不可靠协议,UDP套接字在使用前不需要进行连接.实际上,UDP协议只实现了两个功能: 1)在IP协议的基础上添加了端口: 2)对传输过程中可能产生的数据错误进行了检测,并抛弃已经损坏的数据. Java通过DatagramPacket类和DatagramSocket类来使用UDP套接字,客户端和服务器端都通过DatagramSocket的send()方法和receive()方法来发送和接收数据,用Datag

Java TCP/UDP socket 编程流程总结

最近正好学习了一点用java socket编程的东西.感觉整体的流程虽然不是很繁琐,但是也值得好好总结一下. Socket Socket可以说是一种针对网络的抽象,应用通过它可以来针对网络读写数据.就像通过一个文件的file handler就可以都写数据到存储设备上一样.根据TCP协议和UDP协议的不同,在网络编程方面就有面向两个协议的不同socket,一个是面向字节流的一个是面向报文的. 对socket的本身组成倒是比较好理解.既然是应用通过socket通信,肯定就有一个服务器端和一个客户端.

android开发系列之socket编程

上周在项目遇到一个接口需求就是通讯系列必须是socket,所以在这篇博客里面我想谈谈自己在socket编程的时候遇到的一些问题. 其实在android里面实现一个socket通讯是非常简单的,我们只需要在代码里面实现一个Socket对象,同时在该对象里面传进一个ip/port,同时设置一些超时时间就可以了.代码如下: public class SocketThread extends Thread { private String ip = "192.168.129.1"; priva