精华内容
下载资源
问答
  • 小米局域网通讯|控制小米|通讯协议|绿米|加密机制||读设备,写设备|心跳包 等等
  • 网关局域网通信协议V2.0

    千次阅读 2018-12-21 13:41:00
    概述 绿米智能网关支持局域网通讯功能,通过开放局域网通信API,允许开发者通过局域网通信对网关下各ZigBee子设备(传感器、控制器等)进行管理。 相比HTTP通讯,局域网通讯的...

    http://docs.opencloud.aqara.cn/development/gateway-LAN-communication/

    https://github.com/aqara/opencloud-docs/

    概述

    绿米智能网关支持局域网通讯功能,通过开放局域网通信API,允许开发者通过局域网通信对网关下各ZigBee子设备(传感器、控制器等)进行管理。

    相比HTTP通讯,局域网通讯的速度更快,控制延迟更低。但是,局域网对接方式的开发成本更高,需要一台支持开发的第三方网关,并且开发者有嵌入式开发经验。

    目前主要开放的API功能有:

    • 发现与查询设备
    • 设备状态上报
    • 对设备进行读写操作
    • 设备心跳上报

    注意:如需使用多功能网关,请参考网关局域网通信协议V1.0

    修订记录

    介绍网关局域网通信协议各版本的主要变更内容。

    更新时间文档版本更新日志
    2018.07.16 V2.0.2 新增:空调伴侣空调状态上报和控制功能,空调伴侣继电器控制功能;新增:RGB控制器和空调温控器
    2018.05.18 V2.0.1 新增:魔方传感器 (sensor_cube.aqgl01)、墙壁插座(ctrl_86plug.aq1)、墙壁开关(ctrl_ln1.aq1)
    2017.10.09 V2.0.1 修改:水浸传感器的属性上报
    2017.09.20 V2.0.0 修改:基本的JSON格式变更;部分设备的model值和属性名称变更;对于属性的取值类型,模拟量统一取值为数值型。

    加密机制

    局域网通信采用key加密方式,需在APP上获取随机生成的网关KEY,该KEY使用AES-CBC 128加密,为16个字节长度的字符串。开启局域网通信协议并拥有该网关的KEY后,才能与该网关进行局域网通信。

    注意:AES-CBC 128初始向量定义为:unsigned char const AES_KEY_IV[16] = {0x17, 0x99, 0x6d, 0x09, 0x3d, 0x28, 0xdd, 0xb3, 0xba, 0x69, 0x5a, 0x2e, 0x6f, 0x58, 0x56, 0x2e}。

    获取网关KEY的具体操作如下:

    1、打开Aqara APP,选择需要进行局域网通信的网关设备;

    注意:当前仅“升级版空调伴侣”支持局域网通信协议功能。

    2、默认情况下,此页面不显示“局域网协议”,需连续点击"设备类型"10次才可显示。

    3、开启“局域网协议”,获取随机KEY,单击“确定”。

    设备发现与查询

    发现网关设备

    设备发现采用不加密方式,使用组播(IP:224.0.0.50,Port:4321,Protocal:UDP),在局域网中发现网关设备。

    以组播方式发送“whois”命令:

    {
       "cmd":"whois"
    }
    

    所有网关收到“whois”命令都要应答且回复自己的IP信息,以单播的形式回复:

    {
       "cmd":"iam",
       "ip":"192.168.0.42",   //网关IP地址
       "protocal":"UDP",
       "port":"9898",
       "model":"gateway.aq1",  //网关设备类型
       ......
    }
    

    查询子设备列表

    命令以单播方式发送给网关的UDP 9898端口,用来获取网关中有哪些子设备。

    以单播方式向网关发送“discovery”命令:

    {
       "cmd":"discovery"
    }
    

    网关以单播方式回复,返回子设备的设备id和model值:

    {
       "cmd":"discovery_rsp",
       "sid":"158d323123c9d9",     //sid为网关did
       "token":"TahkC7dalbIhXG22",    //网关生成的随机字符串
       "dev_list":[{"sid":"xxxxxxxx","model":"plug"},  
                   {"sid":"xxxxxxxx","model":"sensor_switch.aq2"}]  //sid为子设备did
    }
    

    注意:“token”为网关生成的随机字符串,每10s刷新一次,在未收到设备心跳上报的token前,用户可用此token来生成写设备时的“key”。

    设备状态上报

    当设备状态发生变化时,使用“report”命令以组播方式发送给(IP:224.0.0.50,Port:9898)上报属性状态,如门窗传感器的打开或关闭信息。利用上报的属性状态,用户可以实现智能联动操作,如关闭窗户即开启空调。

    例如:

    门窗传感器上报窗户的开关状态,格式如下:

    {
       "cmd":"report",
       "model":"sensor_magnet.aq2",
       "sid":"xxxxxxxx",
       "params":[{"window_status":"open"}] 
    }
    

    设备心跳上报

    网关心跳

    网关心跳以组播方式发送给(IP:224.0.0.50,Port:9898)。网关每10秒钟发送一次心跳报文,用来告诉PC网关正常工作。若间隔65s以上未收到心跳包即表示网关处于离线状态。网关设备心跳格式如下:

    {
        "cmd":"heartbeat",
        "model":"gateway.v3",
        "sid":"xxxxxxxx",
        "token":"1234567890abcdef",   //网关生成的随机字符串
        "params":[{"ip":"172.22.4.130"}]  //网关IP地址
     }
    

    注意:“token”为网关生成的随机字符串,每10s刷新一次,可用此token来生成写设备时的“key”。

    子设备心跳

    子设备心跳以组播方式发送给(IP:224.0.0.50,Port:9898)。子设备通过心跳告诉PC:子设备正常工作(心跳上报频率:睡眠设备是每60分钟一次,插电设备是每10分钟一次)。子设备心跳格式如下:

    {
       "cmd":"heartbeat",
       "model":"sensor_magnet.aq2",
       "sid":"xxxxxxxx",
       "params":[{"window_status":"open"}]
    }
    

    子设备心跳中可能包含子设备的属性状态,如格式中的"window_status":"open"。在设置心跳的时候,需看此属性状态的具体使用场景。

    例如:开窗关空调场景,可以使用上面的心跳(有可能正常的report报文丢失,心跳报文可以补救)。但关窗开空调场景,就不能使用上面的心跳。因为有可能人离开的时候把空调关了,但心跳报文又让空调打开,很浪费电。

    因此,针对心跳报文的使用,用户可根据使用需要自行决定是否用心跳做触发。

    设备的读写操作

    读设备

    使用“read”命令以单播方式发送给网关的UDP 9898端口。用户可以用主动读取各设备的属性状态,网关返回该设备的全部属性信息。

    例如:

    读取墙壁开关的状态:

    {
       "cmd":"read",
       "sid":"xxxxxxxx"   //墙壁开关did
    }
    

    网关以单播方式回复,格式如下:

    {
       "cmd":"read_rsp",
       "model":"ctrl_neutral2",
       "sid":"xxxxxxxx",
       "params":[{"channel_0":"on"},{"channel_1":"off"}]  
    }
    

    写设备

    使用“write”命令以单播方式发送给网关的UDP 9898端口。当用户需要控制各设备时,可使用“write”命令。

    例如:

    将墙壁开关(单火单键)的状态改为关闭:

    {
        "cmd":"write",
        "model":"ctrl_neutral1",
        "sid":"xxxxxxxx",
        "key":"3EB43E37C20AFF4C5872CC0D04D81314",
        "params":[{"channel_0":"off"}]
     }
    

    网关以单播方式回复格式:

    {
       "cmd":"write_rsp",
       "model":"ctrl_neutral1",
       "sid":"xxxxxxxx",
       "params":[{"channel_0":"on"}]  
    }
    

    该“write_rsp”只代表网关收到了write命令,params里的属性状态为当前的设备最新状态,不是write之后的最终设备状态。最终的设备状态靠report报文进行上报。

    注意:“key”为32个字节长度的字符串。当网关启用了加密模式时,会对该key进行解密并校验,以验证写命令的合法性。该“key”的生成规则是:用户收到心跳“heartbeat”里的16个字节的“token”字符串之后,使用网关的KEY(在APP里获取的随机KEY)对该字符串进行AES-CBC 128加密,生成16个字节的密文后,再转换为32个字节的ASCII码字符串。

    例如:米家智能家庭APP中16个字符长度的随机KEY为“0987654321qwerty“,”token”为”1234567890abcdef”,加密后的密文是:0x3E,0xB4,0x3E,0x37,0xC2,0x0A,0xFF,0x4C,0x58,0x72,0xCC,0x0D,0x04,0xD8,0x13,0x14。那么,”key”为:”3EB43E37C20AFF4C5872CC0D04D81314”。

    设备上报和控制报文格式

    JSON报文的基本格式:

    {
       "cmd":"write",     //命令类型,支持write/read/write_rsp/read_rsp/report/heartbeat
       "model":"ctrl_neutral2",   //设备类型
       "sid":"xxxxxxxx",    //设备的did
       "params":[{"channel_0":"on"},{"channel_1":"off"}]  //params里可以包含同一个设备的多个属性 
    }
    

    设备属性列表

    介绍Aqara产品的设备类型、属性和使用示例。

    空调伴侣

    (设备类型model:acpartner.v3)

    属性说明
    illumination 空调伴侣的光照度,取值范围一般为0~1300;支持report/read。
    proto_version 采用的通信协议版本号,如”2.0.1”。
    mid 表示music id,即音乐铃声的id。支持write。取值有:08,1013,20~29(上述为系统自带铃声),10000(表示停止播放铃声),>10001(表示用户自定义的铃声)。
    join_permission 取值“yes”/”no”,表示是否允许添加子设备。
    remove_device 取值为子设备的did(did的16进制形式的字符串),用于删除某个子设备。
    on_off_cfg 空调开关状态,取值为off、on、toggle、invalid
    mode_cfg 空调模式,取值为heat、cool、auto、dry、wind、circle、invalid
    ws_cfg 空调风速,取值为low、middle、high、auto、circle、invalid
    swing_cfg 空调扫风,取值为unswing、swing、invalid
    temp_cfg 空调温度,值为整形,取值为当前温度,17~30
    relay_status 空调继电器控制,取值为off、on、toggle

    例如:

    属性上报:

    {
       "cmd":"report",
       "model":"acpartner.v3",
       "sid":"xxxxxxxx",
       "params":["illumination:500,"proto_version":"2.0.0"}]
       //光照度为500,通信协议版本为2.0.0。
    }
    

    控制:

    播放mid为10005的自定义铃声:

    {
       "cmd":"write",
       "model":"acpartner.v3",
       "sid":"xxxxxxxx",
       "params":[{"mid":10005}]
    }
    

    停止播放铃声:

    {
       "cmd":"write",
       "model":"acpartner.v3",
       "sid":"xxxxxxxx",
       "params":[{"mid":10000}]
    }
    

    允许添加子设备:

    {
       "cmd":"write",
       "model":"acpartner.v3",
       "sid":"xxxxxxxx",
       "params":[{"join_permission":"yes"}]
    }
    

    注意:添加子设备须在30s内进行操作:长按子设备重置键3~5秒直到蓝色指示灯连续闪烁后松开,网关提示设备添加成功,即入网成功。不同子设备长按重置键,指示灯可能不一样,请根据实际情况操作。

    删除空调伴侣下的某个子设备:

    {
       "cmd":"write",
       "model":"acpartner.v3",
       "sid":"xxxxxxxx",
       "params":[{"remove_device":"158d0000f12345"}]
    }
    

    空调配置:

    {
        "cmd":"write",
        "model":"acpartner.v3",
        "sid":"xxxxxxxx",
        "params":[{"on_off_cfg":"on"}]
    }
    

    智能插座

    (设备类型model:plug)

    属性说明
    channel_0 on/off(开/关)
    load_power 负载功率,单位是瓦(W)
    energy_consumed 从产品开始被使用以来累计的负载消耗电量,单位是瓦时(Wh)

    例如:

    属性上报:

    {
       "cmd":"report",
       "model":"plug",
       "sid":"xxxxxxxx",
       "params":[{"channel_0":"on"}] //智能插座状态为“开”
    }
    

    控制:

    {
       "cmd":"write",
       "model":"plug",
       "sid":"xxxxxxxx",
       "params":[{"channel_0":"off"}]  //将智能插座状态改为“关”
    }
    

    心跳上报(~10分钟每次):

    {
       "cmd":"heartbeat",
       "model":"plug",
       "sid":"xxxxxxxx",
       "params":[{"load_power":9.57},{”energy_consumed":57}] 
       //负载功率为9.57W,负载消耗电量为57Wh。
    }
    

    墙壁插座

    (设备类型model:ctrl_86plug 和 ctrl_86plug.aq1 )

    属性说明
    channel_0 on/off/unknown(开/关/未知)
    load_power 负载功率,单位是瓦(W)
    energy_consumed 从产品开始被使用以来累计的负载消耗电量,单位是瓦时(Wh)

    例如:(以model:ctrl_86plug为例)

    属性上报:

    {
       "cmd":"report",
       "model":"ctrl_86plug",
       "sid":"xxxxxxxx",
       "params":[{"channel_0":"on"}]  //墙壁插座状态为“开”
    }
    

    控制:

    {
       "cmd":"write",
       "model":"ctrl_86plug",
       "sid":"xxxxxxxx",
       "params":[{“channel_0”:”off”}]  //将墙壁插座状态改为“关”
    }
    

    心跳上报(~10分钟每次):

    {
       "cmd":"heartbeat",
       "model":"ctrl_86plug",
       "sid":"xxxxxxxx",
       "params":[{"load_power":9.57},{"energy_consumed":57}]
       //负载功率为9.57W,负载消耗电量为57Wh。
    }
    

    墙壁开关(零火单键)

    (设备类型model:ctrl_ln1 和 ctrl_ln1.aq1)

    属性说明
    channel_0 on/off/unknown(开/关/未知)

    例如:(以model:ctrl_ln1为例)

    属性上报:

    {
       "cmd":"report",
       "model":"ctrl_ln1",
       "sid":"xxxxxxxx",
       "params":[{"channel_0":"on"}]  //墙壁开关状态为“开”
    }
    

    控制:

    {
       "cmd":"write",
       "model":"ctrl_ln1",
       "sid":"xxxxxxxx",
       "params":[{"channel_0":"off"}]   //将墙壁开关状态改为“关”
    }
    

    墙壁开关(零火双键)

    (设备类型model:ctrl_ln2)

    属性说明
    channel_0 on/off/unknown(开/关/未知)
    channel_1 on/off/unknown(开/关/未知)

    例如:

    属性上报:

    {
       "cmd":"report",
       "model":"ctrl_ln2",
       "sid":"xxxxxxxx",
       "params":[{"channel_1":"on"}]  //墙壁开关2状态为“开”
    }
    

    控制:

    {
       "cmd":"write",
       "model":"ctrl_ln2",
       "sid":"xxxxxxxx",
       "params":[{"channel_1":"off"}]  //将墙壁开关2状态改为“关”
    }
    

    墙壁开关(单火单键)

    (设备类型model:ctrl_neutral1)

    属性说明
    channel_0 on/off(开/关)

    例如:

    属性上报:

    {
       "cmd":"report",
       "model":"ctrl_neutral1",
       "sid":"xxxxxxxx",
       "params":[{"channel_0":"on"}]  //墙壁开关状态为“开”
    }
    

    控制:

    {
       "cmd":"write",
       "model":"ctrl_neutral1",
       "sid":"xxxxxxxx",
       "params":[{" channel_0":"off"}]  //将墙壁开关状态改为“关”
    }
    

    墙壁开关(单火双键)

    (设备类型model:ctrl_neutral2)

    属性说明
    channel_0 on/off(开/关)
    channel_1 on/off(开/关)

    例如:

    属性上报:

    {
       "cmd":"report",
       "model":"ctrl_neutral2",
       "sid":"xxxxxxxx",
       "params":[{"channel_0":"on"}]  //墙壁开关1状态为“开”
    }
    {
       "cmd":"report",
       "model":"ctrl_neutral2",
       "sid":"xxxxxxxx",
       "params":[{"channel_1":"on"}]  //墙壁开关2状态为“开”
    }
    

    控制:

    {
       "cmd":"write",
       "model":"ctrl_neutral2",
       "sid":"xxxxxxxx",
       "params":[{"channel_0":"on"}]  //将墙壁开关1改为“开”
    }
    {
       "cmd":"write",
       "model":"ctrl_neutral2",
       "sid":"xxxxxxxx",
       "params":[{"channel_1":"off"}]  //将墙壁开关2改为“关”
    }
    

    窗帘电机

    (设备类型model:curtain)

    属性说明
    curtain_status open/close/stop/auto (开窗帘/关窗帘/停止工作/自动工作)。支持“write”(write之后设备会上报curtain_level),不支持“report”。
    curtain_level 取值:0-100表示打开窗帘的百分比;-1或255表示位置未知。支持“write”和“report”。

    例如:

    属性上报:

    {
       "cmd":"report",
       "model":"curtain",
       "sid":"xxxxxxxx",
       "params":[{"curtain_level":50}]  //窗帘打开50%
    }
    

    控制:

    {
       "cmd":"write",
       "model":"curtain",
       "sid":"xxxxxxxx",
       "params":[{"curtain_status":"open"}]  //开窗帘
    }
    {
       "cmd":"write",
       "model":"curtain",
       "sid":"xxxxxxxx",
       "params":[{"curtain_level":25}]  //窗帘打开25%
    }
    

    上报窗帘打开状态:

    {
       "cmd":"report",
       "model":"curtain",
       "sid":"xxxxxxxx",
       "params":[{"curtain_level":25}]  //上报窗帘已打开25%
    }
    

    双路控制器

    (设备类型model:lumi.ctrl_dualchn)

    属性说明
    channel_0 on/off/toggle(开/关)
    channel_1 on/off/toggle(开/关)

    例如:

    属性上报:

    {
       "cmd":"report",
       "model":"lumi.ctrl_dualchn",
       "sid":"xxxxxxxx",
       "params":[{"channel_0":"on"}] 
    }
    

    RGB调光控制器

    (设备类型model:dimmer.rgbegl01)

    属性说明
    power_status on/off/unknown (开/关/未知)
    light_rgb 取值范围为0-0x64FFFFFF,最高字节表示亮度(0 ~ 0x64),其余3个字节表示颜色值RGB
    light_level 取值范围为0~100,表示亮度为1% ~ 100%

    例如:

    属性上报:

    {
        "cmd":"report",
        "model":"dimmer.rgbegl01",
        "sid":"xxxxxxxx",
        "params":[{"power_status":"on"}]
    }
    

    控制:

    {
        "cmd":"write",
        "model":"dimmer.rgbegl01",
        "sid":"xxxxxxxx",
        "params":[{"light_rgb":845905783}]
    }
    

    空调温控器

    (设备类型model:ctrl_hvac.aq1/airrtc.tcpecn01)

    属性说明
    on_off_cfg “on”/”off”/“toggle”/”circle”/”invalid” (开/关/切换/循环/未定义值)
    mode_cfg “heat”/”cool”/”auto”/”dry”/”wind”/”circle”/”invalid” (制热/制冷/自动/干燥/送风/循环/未定义)
    ws_cfg “low”/”middle”/”high”/”auto”/”circle”/”invalid” (低速/中速/高速/自动/循环/未定义)
    temp_cfg 值为整形,用户设定的、想达到的环境温度,单位℃
    env_temp 空调环境温度,单位℃
    on_off_status on/off (开/关),只读

    例如:

    属性上报:

    {
        "cmd":"report",
        "model":"airrtc.tcpecn01",
        "sid":"xxxxxxxx",
        "params":[{"on_off_status":"on"}]
    }
    

    控制:

    {
        "cmd":"write",
        "model":"airrtc.tcpecn01",
        "sid":"xxxxxxxx",
        "params":[{"temp_cfg":20}]
    }
    

    门窗传感器

    (设备类型model:sensor_magnet.aq2)

    门窗传感器感知窗户或门的打开/关闭状态,每动作一次发送一次report。

    属性说明
    window_status open/close/unknown(开/关/未知)
    battery_voltage 纽扣式电池电压值,单位mv,范围0~3300mv。一般情况下,小于2800mv时表示低电量。

    例如:

    属性上报:

    {
       "cmd":"report",
       "model":"sensor_magnet.aq2",
       "sid":"xxxxxxxx",
       "params":[{"window_status":"open"}]  //窗户被打开
    }
    

    心跳上报(~60分钟每次):

    {
       "cmd":"report",
       "model":"sensor_magnet.aq2",
       "sid":"xxxxxxxx",
       "params":[{"battery_voltage":3000}]
    }
    

    人体传感器

    (设备类型model:sensor_motion.aq2)

    人体传感器探测到有人移动时会立即report信息,同时上报光照度值”lux”和“illumination”。在一直有人移动的情况下,为了省电,人体传感器最快一分钟发送一次report。人体传感器在每个心跳时,也会上报当前的光照度值”lux”。其他情况下,人体传感器不上报光照度值。

    属性说明
    battery_voltage 纽扣式电池电压值,单位mv,范围0~3300mv。一般情况下,小于2800mv时表示低电量。
    motion_status 取值:motion表示探测到有人;unknown表示未知
    lux 光照度值,取值范围 0 ~ 1200。在检测到有人移动时采集光照度并上报;或者在传感器心跳时上报。
    illumination 光照度值,取值范围 0 ~ 1200,只在检测到有人移动时采集光照度并上报。

    例如:

    属性上报:

    {
       "cmd":"report",
       "model":"sensor_motion.aq2",
       "sid":"xxxxxxxx",
       "params":[{"motion_status":"motion"}]  //检测到有人移动
    }
    

    同时上报光照度值:

    {
       "cmd":"report",
       "model":"sensor_motion.aq2",
       "sid":"xxxxxxxx",
       "params":[{"lux":100},{"illumination":100}]  
    }
    

    心跳上报(~60分钟每次):

    {
       "cmd":"report",
       "model":"sensor_motion.aq2",
       "sid":"xxxxxxxx",
       "params":[{"battery_voltage":3000},{"lux":50}]
    }
    

    温湿度传感器

    (设备类型model:weather)

    温湿度传感器检测到温度变化达到0.5度或者湿度变化达到6%时,发送一次report上报,温度或湿度上报时,同时会上报气压值。温湿度传感器在每次心跳时,也会上报当前温度、湿度和气压值。

    属性说明
    temperature 温度,数值型,默认的invalid值为10000。
    humidity 湿度,数值型,默认的invalid值为0。
    pressure 大气气压值,数值型,单位帕Pa,取值范围30000~110000。默认的invalid值为0。
    battery_voltage 纽扣式电池电压值,单位mv,范围0~3300mv。一般情况下,小于2800mv时表示低电量。

    例如:

    属性上报:

    {
       "cmd":"report",
       "model":"weather",
       "sid":"xxxxxxxx",
       "params":[{"temperature":2333}]  //温度是23.33度
    }
    

    心跳上报(~60分钟每次):

    {
       "cmd":"heartbeat",
       "model":"weather",
       "sid":"xxxxxxxx",
       "params":[{"battery_voltage":3000}, {"temperature":2333},{"humidity":6678},{"pressure":99900}]
       //温度为23.33度,湿度为66.78%,大气气压为99.9KPa。
    }
    

    水浸传感器

    (设备类型model:sensor_wleak.aq1)

    属性说明
    wleak_status 取值:normal表示没有报警或者已解除报警;leak表示发生浸水报警。
    battery_voltage 纽扣式电池电压值,单位mv,范围0~3300mv。一般情况下,小于2800mv时表示低电量。

    例如:

    属性上报:

    {
       "cmd":"report",
       "model":"sensor_wleak.aq1",
       "sid":"xxxxxxxx",
       "params":[{"wleak_status":"leak"}]  //检测到发生浸水报警
    }
    

    心跳上报(~60分钟每次):

    {
       "cmd":"heartbeat",
       "model":"sensor_wleak.aq1",
       "sid":"xxxxxxxx",
       "params":[{"battery_voltage":3000}]
    }
    

    无线开关

    (设备类型model:sensor_switch.aq2)

    无线开关每按一次按键上报一个报文,400ms内按两次上报的报文是双击。

    属性说明
    button_0 click/double_click(单击/双击)
    battery_voltage 纽扣式电池电压值,单位mv,范围0~3300mv。一般情况下,小于2800mv时表示低电量。

    例如:

    属性上报:

    {
       "cmd":"report",
       "model":"sensor_switch.aq2",
       "sid":"xxxxxxxx",
       "params":[{"button_0":"click"}]  
    }
    

    心跳上报(~60分钟每次):

    {
       "cmd":"heartbeat",
       "model":"sensor_switch.aq2",
       "sid":"xxxxxxxx",
       "params":[{"battery_voltage":3000}]
    }
    

    无线开关(升级版)

    (设备类型model:sensor_switch.aq3)

    无线开关每按一次按键上报一个报文,400ms内按两次上报的报文是双击。

    属性说明
    button_0 click/double_click/shake(单击/双击/摇一摇)
    battery_voltage 纽扣式电池电压值,单位mv,范围0~3300mv。一般情况下,小于2800mv时表示低电量。

    例如:

    属性上报:

    {
       "cmd":"report",
       "model":"sensor_switch.aq3",
       "sid":"xxxxxxxx",
       "params":[{"button_0":"click"}]  //单击无线开关
    }
    

    心跳上报(~60分钟每次):

    {
       "cmd":"heartbeat",
       "model":"sensor_switch.aq3",
       "sid":"xxxxxxxx",
       "params":[{"battery_voltage":3000}]
    }
    

    86无线开关单键

    (设备类型model:sensor_86sw1.aq1)

    属性说明
    button_0 click/double_click(单击/双击)
    battery_voltage 纽扣式电池电压值,单位mv,范围0~3300mv。一般情况下,小于2800mv时表示低电量。

    例如:

    属性上报:

    {
       "cmd":"report",
       "model":"sensor_86sw1.aq1",
       "sid":"xxxxxxxx",
       "params":[{"button_0":"double_click"}]
    }
    

    86无线开关双键

    (设备类型model:sensor_86sw2.aq1)

    属性说明
    button_0 click(左键单击);double_click(左键双击)
    button_1 click(右键单击);double_click(右键双击)
    dual_channel both_click(左右键同时按)

    例如:

    属性上报:

    {
       "cmd":"report",
       "model":"sensor_86sw2.aq1",
       "sid":"xxxxxxxx",
       "params":[{"button_1":"double_click"}]
    }
    

    魔方传感器

    (设备类型model:sensor_cube.aqgl01)

    属性说明
    cube_status flip90/flip180/move/tap_twice/shake_air/swing/alert/free_fall/rotate(翻转90度/翻转180度/平移/双击/摇一摇/用力甩/静止一段时间后被触动/自由下落)
    rotate_degree 旋转的角度,单位是度(°) ,取值为正数,表示是顺时针转,负数为逆时针转。
    detect_time 旋转采样的时间长度,单位毫秒(ms)
    battery_voltage 纽扣式电池电压值,单位mv,范围0~3300mv,一般情况下,小于2800mv时表示低电量。

    例如:

    属性上报:

    旋转上报:花了500毫秒逆时针旋转了90度

    {
       "cmd":"report",
       "model":"sensor_cube.aqgl01",
       "sid":"xxxxxxxx",
       "params":[{“cube_status”:”rotate”},{"rotate_degree":-90},{"detect_time ":500}]
    }
    

    其他动作上报:

    {
        "cmd":"report",
        "model":"sensor_cube.aqgl01",
        "sid":"xxxxxxxx",
        "params":[{"cube_status":"flip90"}]
    }
    展开全文
  • 飞信局域网通讯软件

    2019-04-10 10:18:25
    (PS:飞鸽协议是开源的,不过飞秋可不是,飞秋虽然同样采用飞鸽协议,但是在此基础上增加修改了不少内容,要兼容飞秋需要用WPE抓包分析飞秋的数据包。) 分层架构模式思想: 所谓分层架构,分层架构并不是一个程序...
  • android局域网通讯框架

    2019-06-18 15:13:16
    该框架是用来实现局域网中多台机器通讯的,基于TCP协议实现了多台C连接一台S,https://github.com/MurrayDu/lan 该框架支持消息失败重复,消息发送成功或失败的返回,支持心跳包,支持服务端断网重连,话不多说直接...

    该框架是用来实现局域网中多台机器通讯的,基于TCP协议实现了多台C连接一台S,https://github.com/MurrayDu/lan

    该框架支持消息失败重复,消息发送成功或失败的返回,支持心跳包,支持服务端断网重连,话不多说直接上图

    上图是整个框架的结构图

    TcpService是服务端通讯的类,负责监听客户端连接请求,维护客户端列表

    Finder是服务端,客户端端搜索的基类

    SubordinateFinder是服务端用来发现客户端的finder,它运行一个MulticastSocket,被动的等待客户端的发现请求,当有接收到客户端消息后将自己的IP发送给客户端。

    SubTcpClient, 调用startScan启动一个局域网搜索,搜索局域网里面的所有的服务端,搜索到之后将信息返回给用户。

     connect方法是直接去连接对应的服务端。

    device里面的MsgImpl直接负责消息的发送和接收,RealTcpSender负责socket的收发,MsgImpl是消息处理的类,消息格式,包头,解决粘包的问题,发送确认,心跳包等业务层的处理

    展开全文
  • 配置局域网中的通讯协议

    千次阅读 2004-10-19 21:24:00
    无论是几台机器组成的Windows 95/98对等网,还是规模较大的Windows NT、Novell或Unix/Xenix局域网,凡是亲自组建或管理过网络的人,都遇到过如何选择和配置网络通信协议的问题。由于许多用户对网络中的协议及其功能...

    无论是几台机器组成的Windows 95/98对等网,还是规模较大的Windows NT、Novell或Unix/Xenix局域网,凡是亲自组建或管理过网络的人,都遇到过如何选择和配置网络通信协议的问题。由于许多用户对网络中的协议及其功能特点不是很清楚,所以在组网中经常选用了不符合自身网络特点的通信协议。其结果就造成了网络无法接通,或者是速度太慢,工作不稳定等现象而影响了网络的可靠性。事实上,不同的网络协议都有其存在的必要,每一种协议都有它所主要依赖的操作系统和工作环境。在一个网络上运行得很好的通信协议,在另一个看起来很相似的网络上可能完全不适合。因此,组建网络时通信协议的选择尤为重要。本文基于局域网环境,以Windows NT为主,同时兼顾NetWare、Windows 95/98等操作系统,介绍和分析了常用通信协议的特点、性能和必要的配置方法,供组网者和网络管理人员参考。 

    A、通信协议 

    组建网络时,必须选择一种网络通信协议,使得用户之间能够相互进行“交流”。协议(Protocol)是网络设备用来通信的一套规则,这套规则可以理解为一种彼此都能听得懂的公用语言。关于网络中的协议可以概括为两类:“内部协议”和“外部协议”(笔者这样区分,在专业分类上不是很严密,但确实能够解决一些在概念和应用中的混淆),下面分别予以介绍。 

    1.内部协议 

    1978年,国际标准化组织(ISO)为网络通信制定了一个标准模式,称为OSI/RM(Open System Interconnect/Reference Model,开放系统互联参考模型)体系结构。该结构共分七层,从低到高分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。其中,任何一个网络设备的上下层之间都有其特定的协议形式,同时两个设备(如工作站与服务器)的同层之间也有其使用的协议约定。在这里,我们将这种上下层之间和同层之间的协议全部定义为“内部协议”。内部协议在组网中一般很少涉及到,它主要提供给网络开发人员使用。如果你只是为了组建一个网络,可不去理会内部协议。 

    2.外部协议 

    外部协议即我们组网时所必须选择的协议。由于它直接负责计算机之间的相互通信,所以通常称为网络通信协议。自从网络问世以来,有许多公司投入到了通信协议的开发中,如IBM、Banyan、Novell、Microsoft等。每家公司开发的协议,最初一般是为了满足自己的网络通信,但随着网络应用的普及,不同网络之间进行互联的要求越来越迫切,因此通信协议就成为解决网络之间互联的关键技术。就像使用不同母语的人与人之间需要一种通用语言才能交谈一样,网络之间的通信也需要一种通用语言,这种通用语言就是通信协议。目前,局域网中常用的通信协议(外部协议)主要有NetBEUI、IPX/SPX及其兼容协议和TCP/IP三类。 

    3.选择网络通信协议的原则 

    我们在选择通信协议时一般应遵循以下的原则: 

    第一、所选协议要与网络结构和功能相一致。如你的网络存在多个网段或要通过路由器相连时,就不能使用不具备路由和跨网段操作功能的NetBEUI协议,而必须选择IPX/SPX或TCP/IP等协议。另外,如果你的网络规模较小,同时只是为了简单的文件和设备的共享,这时你最关心的就是网络速度,所以在选择协议时应选择占用内存小和带宽利用率高的协议,如NetBEUI。当你的网络规模较大,且网络结构复杂时,应选择可管理性和可扩充性较好的协议,如TCP/IP。 

    第二、除特殊情况外,一个网络尽量只选择一种通信协议。现实中许多人的做法是一次选择多个协议,或选择系统所提供的所有协议,其实这样做是很不可取的。因为每个协议都要占用计算机的内存,选择的协议越多,占用计算机的内存资源就越多。一方面影响了计算机的运行速度,另一方面不利于网络的管理。事实上一个网络中一般一种通信协议就可以满足需要。 

    第三、注意协议的版本。每个协议都有它的发展和完善过程,因而出现了不同的版本,每个版本的协议都有它最为合适的网络环境。从整体来看,高版本协议的功能和性能要比低版本好。所以在选择时,在满足网络功能要求的前提下,应尽量选择高版本的通信协议。 

    第四、协议的一致性。如果要让两台实现互联的计算机间进行对话,它们两者使用的通信协议必须相同。否则中间还需要一个“翻译”进行不同协议的转换,这样不仅影响通信速度,同时也不利于网络的安全和稳定运行。 

    B、局域网中常用的三种通信协议 

    1.NetBEUI协议 
    NetBEUI通信协议的特点。NetBEUI(NetBIOS Extended User Interface,用户扩展接口)由IBM于1985年开发完成,它是一种体积小、效率高、速度快的通信协议。NetBEUI也是微软最钟爱的一种通信协议,所以它被称为微软所有产品中通信协议的“母语”。微软在其早期产品,如DOS、LAN Manager、Windows 3.x和Windows for Workgroup中主要选择NetBEUI作为自己的通信协议。在微软如今的主流产品,如Windows 95/98和Windows NT中,NetBEUI已成为其固有的缺省协议。有人将WinNT定位为低端网络服务器操作系统,这与微软的产品过于依赖NetBEUI有直接的关系。NetBEUI是专门为几台到百余台PC所组成的单网段部门级小型局域网而设计的,它不具有跨网段工作的功能,即NetBEUI不具备路由功能。如果你在一个服务器上安装了多块网卡,或要采用路由器等设备进行两个局域网的互联时,将不能使用NetBEUI通信协议。否则,与不同网卡(每一块网卡连接一个网段)相连的设备之间,以及不同的局域网之间将无法进行通信。 

    虽然NetBEUI存在许多不尽人意的地方,但它也具有其他协议所不具备的优点。在三种通信协议中,NetBEUI占用内存最少,在网络中基本不需要任何配置。尤其在微软产品几乎独占PC操作系统的今天,它很适合于广大的网络初学者使用。 

    NetBEUI与NetBIOS之间的关系。细心的读者可能已经发现,NetBEUI中包含一个网络接口标准NetBIOS。NetBIOS(Network Basic Input/Output System,网络基本输入/输出系统)是IBM在1983年开发的一套用于实现PC间相互通信的标准,其目的是开发一种仅仅在小型局域网上使用的通信规范。该网络由PC组成,最大用户数不超过30个,其特点是突出一个“小”字。后来,IBM发现NetBIOS存在的许多缺陷,所以于1985年对其进行了改进,推出了NetBEUI通信协议。随即,微软将NetBEUI作为其客户机/服务器网络系统的基本通信协议,并进一步进行了扩充和完善。最有代表性的是在NetBEUI中增加了叫做SMB(Server Message Blocks,服务器消息块)的组成部分,以降低网络的通信堵塞。为此,有时将NetBEUI协议也称为“SMB协议”。 

    人们常将NetBIOS和NetBEUI混淆起来,其实NetBIOS只能算是一个网络应用程序的接口规范,是NetBEUI的基础,它不具有严格的通信协议功能。而NetBEUI是建立在NetBIOS基础之上的一个网络传输协议。 

    2.IPX/SPX及其兼容协议 
    IPX/SPX通信协议的特点。IPX/SPX(Internetwork Packet eXchange/Sequences Packet eXchange,网际包交换/顺序包交换)是Novell公司的通信协议集。与NetBEUI的明显区别是,IPX/SPX显得比较庞大,在复杂环境下具有很强的适应性。因为,IPX/SPX在设计一开始就考虑了多网段的问题,具有强大的路由功能,适合于大型网络使用。当用户端接入NetWare服务器时,IPX/SPX及其兼容协议是最好的选择。但在非Novell网络环境中,一般不使用IPX/SPX。尤其在Windows NT网络和由Windows 95/98组成的对等网中,无法直接使用IPX/SPX通信协议。

    IPX/SPX协议的工作方式。IPX/SPX及其兼容协议不需要任何配置,它可通过“网络地址”来识别自己的身份。Novell网络中的网络地址由两部分组成:标明物理网段的“网络ID”和标明特殊设备的“节点ID”。其中网络ID集中在NetWare服务器或路由器中,节点ID即为每个网卡的ID号(网卡卡号)。所有的网络ID和节点ID都是一个独一无二的“内部IPX地址”。正是由于网络地址的唯一性,才使IPX/SPX具有较强的路由功能。 

    在IPX/SPX协议中,IPX是NetWare最底层的协议,它只负责数据在网络中的移动,并不保证数据是否传输成功,也不提供纠错服务。IPX在负责数据传送时,如果接收节点在同一网段内,就直接按该节点的ID将数据传给它;如果接收节点是远程的(不在同一网段内,或位于不同的局域网中),数据将交给NetWare服务器或路由器中的网络ID,继续数据的下一步传输。SPX在整个协议中负责对所传输的数据进行无差错处理,所以我们将IPX/SPX也叫做“Novell的协议集”。 

    NWLink通信协议。Windows NT中提供了两个IPX/SPX的兼容协议:“NWLink SPX/SPX兼容协议”和“NWLink NetBIOS”,两者统称为“NWLink通信协议”。NWLink协议是Novell公司IPX/SPX协议在微软网络中的实现,它在继承IPX/SPX协议优点的同时,更适应了微软的操作系统和网络环境。Windows NT网络和Windows 95/98的用户,可以利用NWLink协议获得NetWare服务器的服务。如果你的网络从Novell环境转向微软平台,或两种平台共存时,NWLink通信协议是最好的选择。不过在使用NWLink协议时,其中“NWLink IPX/SPX兼容协议”类似于Windows 95/98中的“IPX/SPX兼容协议”,它只能作为客户端的协议实现对NetWare服务器的访问,离开了NetWare服务器,此兼容协议将失去作用;而“NWLink NetBIOS”协议不但可在NetWare服务器与Windows NT之间传递信息,而且能够用于Windows NT、Windows 95/98相互之间任意通信。 

    3.TCP/IP协议 

    TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是目前最常用到的一种通信协议,它是计算机世界里的一个通用协议。在局域网中,TCP/IP最早出现在Unix系统中,现在几乎所有的厂商和操作系统都开始支持它。同时,TCP/IP也是Internet的基础协议。 

    TCP/IP通信协议的特点。TCP/IP具有很高的灵活性,支持任意规模的网络,几乎可连接所有的服务器和工作站。但其灵活性也为它的使用带来了许多不便,在使用NetBEUI和IPX/SPX及其兼容协议时都不需要进行配置,而TCP/IP协议在使用时首先要进行复杂的设置。每个节点至少需要一个“IP地址”、一个“子网掩码”、一个“默认网关”和一个“主机名”。如此复杂的设置,对于一些初识网络的用户来说的确带来了不便。不过,在Windows NT中提供了一个称为动态主机配置协议(DHCP)的工具,它可自动为客户机分配连入网络时所需的信息,减轻了联网工作上的负担,并避免了出错。当然,DHCP所拥有的功能必须要有DHCP服务器才能实现。 

    同IPX/SPX及其兼容协议一样,TCP/IP也是一种可路由的协议。但是,两者存在着一些差别。TCP/IP的地址是分级的,这使得它很容易确定并找到网上的用户,同时也提高了网络带宽的利用率。当需要时,运行TCP/IP协议的服务器(如Windows NT服务器)还可以被配置成TCP/IP路由器。与TCP/IP不同的是,IPX/SPX协议中的IPX使用的是一种广播协议,它经常出现广播包堵塞,所以无法获得最佳的网络带宽。

    Windows 95/98中的TCP/IP协议。Windows 95/98的用户不但可以使用TCP/IP组建对等网,而且可以方便地接入其它的服务器。值得注意的是,如果Windows 95/98工作站只安装了TCP/IP协议,它是不能直接加入Windows NT域的。虽然该工作站可通过运行在Windows NT服务器上的代理服务器(如Proxy Server)来访问Internet,但却不能通过它登录Windows NT服务器的域。如果要让只安装TCP/IP协议的Windows 95/98用户加入到Windows NT域,还必须在Windows 95/98上安装NetBEUI协议。 

    TCP/IP协议在局域网中的配置。在提到TCP/IP协议时,有许多用户便被其复杂的描述和配置所困扰,而不敢放心地去使用。其实就局域网用户来说,只要你掌握了一些有关TCP/IP方面的知识,使用起来也非常方便。 

    IP地址基础知识。前面在谈到IPX/SPX协议时就已知道,IPX的地址由“网络ID”(NetWork ID)和“节点ID”(Node ID)两部分组成,IPX/SPX协议是靠IPX地址来进行网上用户的识别的。同样,TCP/IP协议也是靠自己的IP地址来识别在网上的位置和身份的,IP地址同样由“网络ID”和“节点ID”(或称HOST ID,主机地址)两部分组成。一个完整的IP地址用32位(bit)二进制数组成,每8位(1个字节)为一个段(Segment),共4段(Segment1~Segment4),段与段之间用“.”号隔开。为了便于应用,IP地址在实际使用时并不直接用二进制,而是用大家熟悉的十进制数表示,如192.168.0.1等。IP地址的完整组成:“网络ID”和“节点ID”都包含在32位二进制数中。目前,IP地址主要分为A、B、C三类(除此之外,还存在D和E两类地址,现在局域网中这两类地址基本不用,故本文暂且不涉及),A类用于大型网络,B类用于中型网络,C类一般用于局域网等小型网络中。其中,A类地址中的最前面一段Segment1用来表示“网络ID”,且Segment1的8位二进制数中的第一位必须是“0”。其余3段表示“节点ID”;B类地址中,前两段用来表示“网络ID”,且Segment1的8位二进制数中的前二位必须是“10”。后两段用来表示“节点ID”;在C类地址中,前三段表示“网络ID”,且Segment1的8位二进制数中的前三位必须是“110”。最后一段Segment4用来表示“节点ID”。 

    值得一提的是,IP地址中的所有“网络ID”都要向一个名为InterNIC(Internet Network Information Center,互联网络信息中心)申请,而“节点ID”可以自由分配。目前可供使用的IP地址只有C类,A类和B类的资源均已用尽。不过在选用IP地址时,总的原则是:网络中每个设备的IP地址必须唯一,在不同的设备上不允许出现相同的IP地址。列出了IP地址中的“网络ID”的有关属性,“节点ID”在互不重复的情况下由用户自由分配。其实,将IP地址进行分类,主要是为了满足网络的互联。如果你的网络是一个封闭式的网络,只要在保证每个设备的IP地址唯一的前提下,三类地址中的任意一个都可以直接使用(为以防万一,你还是老老实实地使用C类IP地址为好)。 

    子网掩码。对IP地址的解释称之为子网掩码。从名称可以看出,子网掩码是用于对子网的管理,主要是在多网段环境中对IP地址中的“网络ID”进行扩展。举个例子来说明:例如某个节点的IP地址为192.168.0.1,它是一个C类网。其中前面三段共24位用来表示“网络ID”,是非常珍贵的资源;而最后一段共8位可以作为“节点ID”自由分配。但是,如果公司的局域网是分段管理的,或者该网络是由多个局域网互联而成,是否要给每个网段或每个局域网都申请分配一个“网络ID”呢?这显然是不合理的。此时,我们可以使用子网掩码的功能,将其中一个或几个节点的IP地址全部充当成“网络ID”来使用,用来扩展“网络ID”不足的困难。 

    当我们将某一节点的IP地址如192.168.0.1已设置成一个“网络ID”时,网络上的其它设备又怎样知道它是一个“网络ID”,而不是一个节点IP地址呢?这就要靠子网掩码来告知。子网掩码是这样做的:如果某一位的二进制数是“1”,它就知道是“网络ID”的一部分;如果是“0”便认作是“节点ID”的一部分。如将192.168.0.1当做“网络ID”时,其子网掩码就是11111111.11111111.11111111.00000001,对应的十进制数表示为255.255.255.1。否则它的子网掩码就是11111111.11111111.11111111.00000000,对应的十进制数表示应为255.255.255.0 。有了子网掩码,便可方便地实现用户跨网段或跨网络操作。不过,为了让子网掩码能够正常工作,同一子网中的所有设备都必须支持子网掩码,且子网掩码相同。列出了A、B、C三类网络的缺省子网掩码。 

    网关。网关(Gateway)是用来连接异种网络的设置。它充当了一个翻译的身份,负责对不同的通信协议进行翻译,使运行不同协议的两种网络之间可以实现相互通信。如运行TCP/IP协议的Windows NT用户要访问运行IPX/SPX协议的Novell网络资源时,则必须由网关作为中介。如果两个运行TCP/IP协议的网络之间进行互联,则可以使用Windows NT所提供的“默认网关”(Default Gateway)来完成。网关的地址该如何分配呢?可举一个例子来回答:假如A网络的用户要访问B网络上的资源,必须在A网络中设置一个网关,该网关的地址应为B网络的“网络ID”(一般可理解为B网络服务器的IP地址)。当A网络的用户同时还要访问C网络的资源时又该怎么呢?你只需将C网络的“网络ID”添加到A网络的网关中即可。依次类推……网关连多少个网络,就拥有多少个IP地址。 

    主机名。网络中唯一能够代表用户或设备身份的只有IP地址。但一般情况下,众多的IP地址不容易记忆,操作起来也不方便。为了改善这种状况,我们可给予每个用户或设备一个有意义的名称,如“WANGQUN”。至于在网络中用到“WANGQUN”时,怎样知道其对应的IP地址呢?这完全由操作系统自己完成,我们大可不必考虑。 

    C、通信协议的安装、设置和测试 

    局域网中的一些协议,在安装操作系统时会自动安装。如在安装Windows NT或Windows 95/98时,系统会自动安装NetBEUI通信协议。在安装NetWare时,系统会自动安装IPX/SPX通信协议。其中三种协议中,NetBEUI和IPX/SPX在安装后不需要进行设置就可以直接使用,但TCP/IP要经过必要的设置。所以下文主要以Windows NT环境下的TCP/IP协议为主,介绍其安装、设置和测试方法,其他操作系统中协议的有关操作与Windows NT基本相同,甚至更为简单。 

    TCP/IP通信协议的安装。在Windows NT中,如果未安装有TCP/IP通信协议,可选择“开始/设置/控制面板/网络”,将出现“网络”对话框,选择对话框中的“协议/添加”,选取其中的TCP/IP协议,然后单击“确定”按钮。系统会询问你是否要进行“DHCP服务器”的设置?如果你的IP地址是固定的(一般是这样),可选择“否”。随后,系统开始从安装盘中复制所需的文件。 

    TCP/IP通信协议的设置。在“网络”对话框中选择已安装的TCP/IP协议,打开其“属性”。在指定的位置输入已分配好的“IP地址”和“子网掩码”。如果该用户还要访问其它Widnows NT网络的资源,还可以在“默认网关”处输入网关的地址。 

    TCP/IP通信协议的测试。当TCP/IP协议安装并设置结束后,为了保证其能够正常工作,在使用前一定要进行测试。笔者建议大家使用系统自带的工具程序:PING.EXE,该工具可以检查任何一个用户是否与同一网段的其他用户连通,是否与其他网段的用户连接正常,同时还能检查出自己的IP地址是否与其他用户的IP地址发生冲突。假如服务器的IP地址为192.168.0.1,如要测试你的机器是否与服务器接通时,只需切换到DOS提示符下,并键入命令“PING 192.168.0.1”即可。如果出现类似于“Reply from 192.168.0.1……”的回应,说明TCP/IP协议工作正常;如果显示类似于“Request timed out”的信息,说明双方的TCP/IP协议的设置可能有错,或网络的其它连接(如网卡、HUB或连线等)有问题,还需进一步检查。 

    D、小结 

    在组建局域网时,具体选择哪一种网络通信协议主要取决于网络规模、网络间的兼容性和网络管理几个方面。如果正在组建一个小型的单网段的网络,并且对外没有连接的需要,这时最好选择NetBEUI通信协议。如果你正从NetWare迁移到Windows NT,或两种平台共存时,IPX/SPX及其兼容协议可提供一个很好的传输环境。如果你正在规划一个高效率、可互联性和可扩展性的网络,TCP/IP则将是理想的选择。

    展开全文
  • Mac OS X 下捕获App局域网通讯

    千次阅读 2015-04-01 19:43:00
    Mac OS X 下捕获App局域网通讯包一.抓包模式因为工作关系,经常要分析App wifi通讯协议。我的开发电脑是Mac Book. 大体有如下几种模式: + App与服务器进行http通讯,这种情况下Http调试神器Charles 就派上用场。...

    Mac OS X 下捕获App局域网通讯包

    一.抓包模式

    因为工作关系,经常要分析App wifi通讯协议。我的开发电脑是Mac Book.
    大体有如下几种模式:
    + App与服务器进行http通讯,这种情况下Http调试神器Charles 就派上用场。(这个参见本人其它博文)
    + App 与智能设备进行Wifi设备,一般是TCP包居多,往往不需要联入互联网,只是局域通讯。它需要用抓包软件Wireshark.

    本文就是这种局域网Tcp模式,这种模式下无法使用Charles代理器模式,直接在电脑上只能抓自身的wifi包,无法抓到手机与智能设备之间的通讯。

    后来综合找到一种可行模式,即Mac OS X打开互联网共享充当一个路由器。然后手机和智能设备均接这个虚拟路由器进行通讯,在Mac OS X 运行Wireshark 来捕获所有经过这个虚拟路由器的包。

    二.打开Mac OS X 互联网共享

    在英文版也称为Air port 共享。
    它需要几个条件:
    1. 以太网需接入互联网,通常就是用网线接到自家的真正的路由器上,即使通讯无需互联网,也要如此,否则无法调出互联网共享模式。

    1. 智能设备能使用路由器通讯(一般这个是标准功能)

    打开方法如下:

    打开系统偏好设置–>共享
    Alt text

    在互联网共享中,作如下设置
    1. 选择以太网作路由器WAN口联接。
    2. 选择“Wi-Fi”共享给其它设备
    3. 点击”Wifi 选项”设置这个虚拟路由器的热点名,密码
    4. 点击”互联网共享“打开虚拟路由器

    Alt text

    Alt text

    启动后,在左上角的Wifi 标志会出现一个小箭头,表示进入wifi共享模式
    Alt text

    三.安装wireshark

    wireshark 是基于Linux X11图形界面的强大网络工具,因此天然是支持Linux.随着X11 被移植到windows和Mac OS X。WireShark也支持多个操作系统。

    Mac OS X 10.10 安装X11应用程序XQuartz

    苹果最早在10.3 加入X11支持库,但是在10.10 又移走了对X11的支持,因此开发者必须手工先安装x11支持库 XQuartz .

    首先下载
    http://xquartz.macosforge.org/downloads/SL/XQuartz-2.7.7.dmg
    运行dmg安装,但很奇怪没有在应用程序栏出现图标。重启机器。
    但它是安装在 /Applications/Utilities/XQuartz.app 之下,因此你可以手工打开这个应用程序,它会出现一个终端窗口。

    安装WireShark

    这里 https://www.wireshark.org/download.html
    下载mac版安装

    在XQuartz终端下执行即可执行

    sudo wireshark

    Alt text

    注意这里的sudo是必须的,否则没有权限使用wifi的设备结点。

    Alt text

    这是运行界面。

    注意在Mac Book 下,实际的wifi设备结点是 en1.只有捕获这个网卡的包,才是手机和智能设备之间的包。
    Alt text

    开始抓包吧!

    这样当你的手机操作时,这时能就看到它的通讯包了!
    Alt text

    四.后记

    本架构也能捕获App移动互联网http通讯包。但是这一架构过于复杂,需要以太网,wifi,以及WireShark 的界面过于复杂。因此用App作http通讯时,抓包还是用Charles 简单好用(只需wifi即可)

    windows7 也能通过虚拟wifi功能实现同样机制,具体参见
    http://www.cnblogs.com/94YY/archive/2012/03/03/2378865.html

    展开全文
  • 1、tcp和udp的关系tcp/ip是一个协议组,它可以分为四个部分,分别是:链路层、网络层、传输层、应用层tcp和udp同属于tcp/ip的传输层tcp是基于连接的协议,也就是说,在正式发送数据前,必须简历可靠的连接。...
  • 无论是广域网还是局域网,在其进行各种网络通讯,完成网络功能时都依赖于各种网络通信协议的支持。从现况看,不同的网络协议都有其存在的必要性,每一种协议都有它所主要依赖的操作系统和工作环境。在一个网络上运行得很
  • 说明:这一协议以通道方式穿过防火墙,允许防火墙后面的人通过一个IP地址访问INTERNET。理论上它应该只允许内部的通信向外到达INTERNET。但是由于错误的配置,它会允许位于防火墙外部的***穿过防火墙。WinGate常会...
  • 自动称重带无线通讯WIFI传输功能设备详情内容/ Content details支持: 远程数据库功能,支持OPCUA协议,能实时上传各种称重信息;通过SQLServer等实现称重数据与记录的上传到ERP或者服务器,同时支持自定义协议串口...
  • [精仿]QQ2013局域网通讯(10.30更新版-带最新版界面库)

    千次下载 热门讨论 2013-11-02 16:18:45
    (C#)CC2013局域网通讯源码一份, 可引用至工具箱最新版CSkin.dll-10.30版本界面库一份。 界面库更新说明: CC2013-10.30 1.由于SkinForm名字太多人使用,界面库命名正式改为CSkin.dll,官网www.cskin.net。 2....
  •  WebSocket是HTML5开始提供的一种浏览器与服务器建进行全双工通讯的网络协议,它的出现是为了解决HTTP协议效率低下的问题,WebSocket能更好的节省服务器资源和带宽并达到实时通信! Demo下载 Client: ...
  • 导读什么是ARP协议ARP协议的工作流程 上一篇文章我简单讲述了一个数据报文是如何在局域网中转发的,简单的回顾一下流程: 主机封装数据报文,其中包含请求体、源IP、目标IP和源MAC地址等信息。 报文经过交换机,...
  • // 创建PeerConnection实例 (参数为null则没有iceserver,即使没有stunserver和turnserver,仍可在局域网通讯) _this.pc = new webkitRTCPeerConnection(null); _this.hasBindLocalVideo = false; // 发送...
  • 通讯协议

    2020-10-10 11:03:13
    局域网的三大通讯协议(UDP,TCP,SCTP)概述 是什么? 什么时候用? 怎么用? 关于三大通讯协议的介绍 首先先说下容易乱的点,我们都知道http ,tcp/ip协议,Soap协议和我们上面说的协议有什么区别呢? 我们...
  • 飞秋(FeiQ)是一款局域网聊天传送文件的绿色软件,它参考了飞鸽传书(IPMSG)和QQ, 完全兼容飞鸽传书(IPMSG)协议,具有局域网传送方便,速度快,操作简单的优点,同时具有QQ中的一些功能,是飞鸽的完善代替者。
  • 飞秋(FeiQ)是一款局域网聊天传送文件的绿色软件,它参考了飞鸽传书(IPMSG)和QQ,  完全兼容飞鸽传书(IPMSG)协议,具有局域网传送方便,速度快,操作简单的优点,同  时具有QQ中的一些功能。
  • 局域网 - LIN通讯介绍

    2020-12-06 22:53:02
    通常,使用LIN协议,去控制车灯。 使用的LIN协议速率,通常为19.2Kbit/s 协议通常要兼容LIN 2.0/2.1/2.2
  • 本软件采用UDP协议,使用数据报发送文件和聊天信息。Port:5006用于文件传输的应答信息传送,Port:4999用语聊天信息传送。Port:5001用于文件数据流。一共有六个线程,SendThread是聊天信息发送线程,,ReceiveThread...
  • 网络通讯协议

    2019-09-30 15:18:32
    思维路线 目的是要链接互联网中的其他计算机 物理层 用物理介质链接其他计算机 数据链路层 用MAC地址来通讯,但仅限于同一局域网 网络层 用ip确定全球范围的某个局域网中的某一台计算机 ...网络通讯协议 什么是...
  • 所以抽时间我重新封装了一个基于UDP的局域网通讯类库,该类库具有局域网内同一网段自我发现及互相注册能力,可以与指定的客户端进行点对点通讯,客户端属于平行关系,无客户端与服务器的关系。 通过此类库,我们...
  • DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),前身是BOOTP协议,是一个局域网的网络协议,使用UDP协议工作,统一使用两个IANA分配的端口:67(服务器端),68(客户端)。DHCP通常被用于局域网...
  • SSH---局域网通讯连接

    千次阅读 2018-01-12 15:27:30
    SSH是secure shell的缩写,SSH为建立在应用层和传输层基础上的安全协议。一般分为:客户端和服务端。 2.SSH使用: 目的:博主通过SSH使得自己的主机(win10系统)访问到服务器(ubuntu14.04) 2.
  • 是计算机之间互相通讯的层次,以及各层中的协议和层次之间接口的集合,它为网络硬件,软件,协议,存取控制和网络拓扑提供标准。 网络拓扑结构: 定义: 指用传输媒体互连各种设备的物理布局,即用什么方式把网络中的...
  • 无线局域网(Wireless LAN,以下简称WLAN)是近年来发展迅速的无线数据通讯网。MAC作为无线局域网的关键技术之一,决定WLAN的网络性能。本文探讨了WLAN中MAC协议的网络工作方式,介绍了MAC典型技术CSMA/CS,最后提出WLAN...
  • client.c 发送消息 ``` #include #include #include #include #include #include #include #include #include #include #include int main (void) { int sock ; if((sock=socket(PF_INET,SOCK_...
  • 魔兽局域网协议之TCP部份分析-原创前面先费话一点.在网上看到了一篇关于魔兽争霸war3的数据包分析,但可惜只有UDP部份的部份数据包.而魔兽的主要数据通讯是采用TCP的,UDP主要就在于做局域网广播.之后连接.地图下载都...
  • 局域网用MAC通讯为什么还要IP?

    千次阅读 2014-08-19 16:29:01
    虽然这个问题很傻,但是我还是喜欢你这样的问题。...那这样局域网就不是通过MAC通讯的了吗? 要IP才能调用MAC,那就是通过IP通讯了啊 回答 LAN中是采用MAC通信,但是上层协议没法直接调用MA

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 894
精华内容 357
关键字:

局域网通讯协议