打开wireshark抓包工具,选择网卡,打开混杂模式。但是不知为何抓不到包。只好在路由器上抓包吧,更方便更直接。我的路由器是类unix系统,自带了tcpdump,抓包很方便。

首先telnet或ssh链接到路由器,然后去路由查看智能插座的IP地址(我的是10.1.1.216),手机的IP地址(我的是10.1.1.25),然后用ifconfig查看网卡名称。

1
tcpdump -i 网卡名称 -w broadlink.pcap host 目标IP

回车执行,这时候就拿出手机操作智能插座,一开一关即可,然后立刻按ctrl+c取消抓包。下载抓包文件。

使用wireshark打开broadlink.pcap。

发现udp协议发送包,追踪UDP流,获取到这些数据。Destination Port: 80说明目标端口是80,于是使用Python发送这些数据,果然智能插座启动了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#!/usr/bin/env python

#encoding: utf-8

#coding:utf-8

import sys, time

from socket import *

class SockUdp:

def __init__(self,ip, port):

self.sock = socket(AF_INET, SOCK_DGRAM)

self.addr = (ip, port)

self.sock.settimeout(5)

def sendto(self, buf):

self.sock.sendto(buf, self.addr)

def recvfrom(self):

buf, addr = self.sock.recvfrom(1024)

return buf

on = bytearray([0x5a, 0xa5, 0xaa, 0x55, 0x5a, 0xa5, 0xaa, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9a, 0xd2, 0x00, 0x00, 0x3e])

off = bytearray([0x5a, 0xa5, 0xaa, 0x55, 0x5a, 0xa5, 0xaa, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd3, 0xd3, 0x00, 0x00, 0x3e])

def switch(op):

print(‘switch:’ + op)

s = SockUdp(‘10.1.1.216’, 80)

for i in range(3):

if op == ‘on’:

s.sendto(on)

else:

s.sendto(off)

s.recvfrom()

s.sock.close()

if __name__ == ‘__main__’:

a = sys.argv[1]

switch(a)

使用方法:python broadlink.py on

短时间成型网页


参考文献:

1.https://blog.csdn.net/hnmsky/article/details/20124615/