截取usb数据包,控制usb设备----Relay设备

在项目开发当中,我们需要一个usb转继电器的设备当开关控制无线发射设备,采购部采购时并未详细了解Relay设备的运行环境就买了一批设备,之后发现设备厂家只提供了windows库,而我们是要在linux中开发。无语中。。。。。。

Relay设备虽然是无驱的,可我并不知道它的协议,怎么办呢? I have no choice ,but I have bus hound,LOL.

厂家提供了windows的管理工具,可以实现Relay的开断,因此我通过Bus Hound截取usb数据包,得到通信协议。  LOL 可以编程咯。。。。。。

Bus Hound截取的数据包如下:

open device:

lock relay:

unlock relay:

Codes如下,只是个简单的测试程序,并未讲究编程中的那些xxxxxxxx

 1 /* It is a simple testing */
 2
 3 #include </usr/local/include/libusb-1.0/libusb.h>  // libusb head file
 4 #include <stdio.h>
 5 #include <sys/types.h>
 6 #include <string.h>
 7
 8 #define VID 0x16c0      // get of lsusb
 9 #define PID 0x05df      // get of lsusb
10
11 struct libusb_device_handle *devh = NULL;
12
13 //unsigned char openstr[] = {0xa1, 0x01, 0x00, 0x03, 0x00, 0x00, 0x08, 0x00};
14
15 int main()
16 {
17     /* usb init before libusb_open* */
18     int ret = libusb_init(NULL);
19     if (ret < 0) {
20         perror("libusb_init");
21         return ret;
22     }
23     /* end */
24
25     /* open device with vid and pid, must after libusb_init */
26     devh = libusb_open_device_with_vid_pid(NULL, VID, PID);
27     if (!devh) {
28         perror("libusb_open_device_with_pid_vid");
29         libusb_exit(NULL);
30     }
31     /* end */
32
33     /* claim interface */
34     ret = libusb_claim_interface(devh, 0);
35     if (ret < 0) {
36         perror("libusb_claim_interface");
37         devh = NULL;
38         libusb_close(devh);
39         return ret;
40     }
41     /* end */
42
43     /* open device data */
44     unsigned char open_data[8];
45     memset(open_data, 0, sizeof(open_data));
46     if ( 0 > libusb_control_transfer(devh, 0xa1, 0x01, 0x3000, 0x00, open_data, 0x08, 1000)) {
47         perror("libusb_control_transfer");
48     }
49     printf("receive data: %s\n", open_data);
50     int i = 0;
51     for(i = 0; i < 8; i++) {
52         printf("%02x\t", open_data[i]);
53     }
54     putchar(10);
55     /* end */
56
57     /* lock relay */
58     unsigned char lock_data[] = {0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
59     if (0 > libusb_control_transfer(devh, 0x21, 0x09, 0x0000, 0x00, lock_data, 0x08, 1000)) {
60         perror("libusb_control_transfer");
61     }
62     /* end */
63
64     /* delay */
65     sleep(2);
66
67     /* unlock relay */
68     unsigned char unlock_data[] = {0xfd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
69     if (0 > libusb_control_transfer(devh, 0x21, 0x09, 0x3000, 0x00, unlock_data, 0x08, 1000)) {
70         perror("libusb_control_transfer");
71     }
72     /* end */
73
74     /* release claim interface */
75     libusb_release_interface(devh, 0);
76     /* end */
77
78     /* close device */
79     libusb_close(devh);
80
81     return 0;
82 }

后记:

  哈哈,开心啊,终于实现了控制Relay设备。

  一句话:没有解决不了的问题!致自己,致大家,希望在挣扎中和大家一起进步。

时间: 09-22

截取usb数据包,控制usb设备----Relay设备的相关文章

解决访问burpsuite不能截取https数据包的问题

1.如果还不知道如何配置代理地址,可以看同一个分类中的另一篇随笔.这里不再详细介绍. 2.导入证书打开端口,配置好浏览器代理(以firefox为例) 3.在地址栏输入http://burp,回车下载证书 4.注意这里的证书不能是零字节,不然去找破解版(因为这个原因,浪费了我一天的时间,才找到原因) 5.最后就是向浏览器中导入证书,在firefox中,选项--> 高级-->证书-->查看证书-->证书机构-->导入 6.最后自己找个url测试一下,如果找到包,大功告成!!!

深入USB流量数据包的抓取与分析

0x01 问题提出 在一次演练中,我们通过wireshark抓取了一个如下的数据包,我们如何对其进行分析? 0x02 问题分析 流量包是如何捕获的? 首先我们从上面的数据包分析可以知道,这是个USB的流量包,我们可以先尝试分析一下USB的数据包是如何捕获的. 在开始前,我们先介绍一些USB的基础知识.USB有不同的规格,以下是使用USB的三种方式: l USB UART l USB HID l USB Memory UART或者Universal Asynchronous Receiver/Tr

利用Wireshark截取数据包,并对数据包进行解析

利用Wireshark截取ICMP数据包,并对数据包进行解析 wireshark安装文件下载地址:http://yunpan.cn/QiHGK5sPtWRyN (提取码:0bbc) 安装步骤: 解压文件之后,在\wireshark-win32-1.4.9中文版\文件夹中找到安装文件,双击即可安装. 安装完成之后,双击wireshark图标即可启动,界面如下: 抓包步骤: 1.点击开始按钮列出可以抓包的接口: 2.点击选项可以配置抓包参数: 3.配置完成点击开始,即可开始抓包: 4.点击停止完成抓

Fiddler:在PC和移动设备上抓取HTTPS数据包

Fiddler是一个免费的Web调试代理,支持任何浏览器.系统以及平台.这个工具是进行Web和App网络开发的必备工具,戳此处下载. 根据Fiddler官网的描述,具有以下六大特点: Web调试 性能测试 HTTP/HTTPS流量记录 Web会话处理 安全测试 自定义扩展性 本文讨论的主要内容是如何设置Fiddler,使PC和移动设备上可以抓取HTTPS数据包. 首先,在菜单栏选择Tools->FiddlerOptions,切换到Connections选项卡 第二步,勾选允许远程连接,并设置一个

winPcap_5_打开适配器并捕获数据包

知道如何获取适配器的信息了,那我们就开始一项更具意义的工作,打开适配器并捕获数据包.编写一个程序,将每一个通过适配器的数据包打印出来. 打开设备的函数是 pcap_open(). (Open a generic source in order to capture / send (WinPcap only) traffic.) pcap_t* pcap_open ( const char * source, int snaplen, int flags, int read_timeout, st

Winpcap笔记3之打开适配器并捕获数据包

上一讲中知道了如何获取适配的信息,这一将我们讲写一个程序蒋每一个通过适配器的数据包打印出来. 打开设备的函数是pcap_open().函数原型是 pcap_t* pcap_open(const char* source,int snaplen,int flags,int read_timeout,struct pcap_rmtauth *auth,char * errbuf):' pcap_rmatauth { int type. char *username;;//Zero-terminate

IP数据包的分片与重组过程

一.IP分片 (一)IP分片的原理: 分片和重新组装的过程对传输层是透明的,其原因是当IP数据报进行分片之后,只有当它到达下一站时,才可进行重新组装,且它是由目的端的IP层来完成的.分片之后的数据报根据需要也可以再次进行分片.    IP分片和完整IP报文差不多拥有相同的IP头,ID域对于每个分片都是一致的,这样才能在重新组装的时候识别出来自同一个IP报文的分片.在IP头里面,16位识别号唯一记录了一个IP包的ID(ipid),具有同一个ID的IP分片将会重新组装:而13位片偏移则记录了某IP片

使用Wireshark追踪分析PVS PXE启动数据包

Citrix Provisioning Service使用了PXE技术来启动虚拟机给用户使用. 首先, 虚拟机默认下必须设置为网卡启动,网卡通过PXE bootROM在网络中发送FIND帧,该数据帧包含了自己的MAC网卡地址,DHCP服务器接收到该数据帧后,会向网卡返回数据包,其中包括了DHCP为网卡分配的IP地址.子网掩码.网关等信息,网卡收到服务器的指派的参数后,会通过TFTP向服务器发起连接请求,以便和服务器建立连接,并开始数据通信. 客户端和TFTP服务器建立通讯之后,就会从实现DHCP

Linux内核--网络栈实现分析(七)--数据包的传递过程(下)

本文分析基于Linux Kernel 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7545855 更多请查看专栏,地址http://blog.csdn.net/column/details/linux-kernel-net.html 作者:闫明 注:标题中的”(上)“,”(下)“表示分析过程基于数据包的传递方向:”(上)“表示分析是从底层向上分析.”(下)“表示分析是从上向下分析. 在博文Linux内核--网络栈