分类 未分类 下的文章

Windows下著名的当然是wireshark,这个在linux下也有,apt-get install wireshark就可以了,不过需要图形界面才能运行,不适合ssh登录。
ssh命令行下的抓包,就是tcpdump,包很小,1M左右,所以在openwrt下也能使用。
使用参考这篇文章12 Tcpdump Commands – A Network Sniffer Tool

抓包

抓指定网口
-i eth0
抓指定协议tcp ip udp
tcp
抓指定目的ip
dst 192.168.0.118
抓指定源ip
src 192.168.0.118
抓指定ip
host 192.168.0.118
抓指定端口
port 80

逻辑方式

和、或
host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 )
'host 210.27.48.1 and (210.27.48.2 or 210.27.48.3 )'

host 210.27.48.1 and ! 210.27.48.2

查看

抓5个包
-c 5
ASCII形式看包内容
-A
16进制看包内容
-XX
看有哪些硬件端口
-D

保存

存到文件
-w cap001.pcap
从文件读
-r cap001.pcap

可以通过命令上使用

Usage: uci [<options>] <command> [<arguments>]

Commands:
        batch
        export     [<config>]
        import     [<config>]
        changes    [<config>]
        commit     [<config>]
        add        <config> <section-type>
        add_list   <config>.<section>.<option>=<string>
        del_list   <config>.<section>.<option>=<string>
        show       [<config>[.<section>[.<option>]]]
        get        <config>.<section>[.<option>]
        set        <config>.<section>[.<option>]=<value>
        delete     <config>[.<section>[[.<option>][=<id>]]]
        rename     <config>.<section>[.<option>]=<name>
        revert     <config>[.<section>[.<option>]]
        reorder    <config>.<section>=<position>

Options:
        -c <path>  set the search path for config files (default: /etc/config)
        -d <str>   set the delimiter for list values in uci show
        -f <file>  use <file> as input instead of stdin
        -m         when importing, merge data into an existing package
        -n         name unnamed sections on export (default)
        -N         don't name unnamed sections
        -p <path>  add a search path for config change files
        -P <path>  add a search path for config change files and use as default
        -q         quiet mode (don't print error messages)
        -s         force strict mode (stop on parser errors, default)
        -S         disable strict mode
        -X         do not use extended syntax on 'show'

/

斜杠划分不同的级别,如

“sport/tennis/player1”

#

井号通配当前级别以下的所有内容
如“sport/tennis/player1/#”匹配:
· “sport/tennis/player1”
· “sport/tennis/player1/ranking”
· “sport/tennis/player1/score/wimbledon”
如果只是一个#,则匹配所有。

+

加号匹配单级内容
如 “sport/tennis/+” 匹配 “sport/tennis/player1” 和 “sport/tennis/player2”, 但是不匹配 “sport/tennis/player1/ranking”,也不匹配““sport/tennis”

$

美元符号在发布时放在主题名称前面,用作系统特定的一些消息发布,并且不能被#、+通配符所匹配到。
$SYS/一般用于发布和服务器系统相关的信息
应用不应使用$开头的名称。

20201/5/17更新: Windows上也支持mosquitto了,在mosquitto官网上有windows版本的下载, 可以使用. 以前的似乎不能用:windows(win10) 就别费劲了。。。两个版本win32和cygwin装完都不能运行,坑爹的是它还需要一大堆的dll,这些dll它不提供还要你去找。。。
ubuntu上装起来很容易,直接

sudo apt-get install mosquitto

就可以了。装完了直接作为服务运行。开始还奇怪,为什么运行mosquitto老是提示地址被占用(Address already in use.)
装完服务装客户端,命令是

sudo apt-get install mosquitto-clients

mosquitto_sub命令

这样你才可以用mosquitto-sub命令
输入

mosquitto_sub -t 'test/topic' -v

订阅消息,等待消息输出。
使用-h命令可以指定服务器地址, 否则是以本机为服务器.
mosquitto的payload可以是二进制数据, 如果要以16进制显示, 使用-F命令跟上格式%x, 注意-F命令在旧版的mosquitto上不支持:

mosquitto_sub -h 192.168.0.108 -t rgb/show -F %x

mosquitto_pub

另开一个终端,输入:

mosquitto_pub -t 'test/topic' -m 'hello world'

在前一个终端窗口就能看到消息了。

远程连接MQTT服务器,加入参数 -h xxx.xxx.xxx.xxx 就可以了。

mosquitto pub发送二进制的方式

命令行直接发送(限于Linux BASH)

echo -ne "\x45\x23\x43" | mosquitto_pub -h test.mosquitto.org -t 'test/binary' -s

通过文件发送

mosquitto_pub -t test -f filename

转载并翻译自溢栈Stackoveflow

作者是Marc Gravell

JSON

  • 人类可读写
  • 解析时不需要知道范式
  • 浏览器支持极佳
  • 不像XML那么累赘

XML

  • 人类可读写
  • 解析时不需要知道范式
  • SOAP等的标准
  • 工具支持好(xsd、xslt、sax、dom等)
  • 超累赘

protobuf

  • 数据很密(输出少)
  • 不知道范式很难解析(数据格式内部是模糊的,需要范式去明确)
  • 处理极快
  • 不是为人眼阅读准备的(高密度二进制)
    以上在大多数平台都有很好的支持。
    个人来说,我现在几乎不用XML了。如果消费方是浏览器或者公共API我倾向于用JSON。内部API,由于性能原因我倾向于用protobuf。公共API两个都提供也可以(通过headers或者独立的endpoints)

RPC(remote process call)远程过程调用,指的是要调用一个本机上没有的方法,并获取结果。
这听上去和API差不多,通常API都是基于http的,准确的说是http/1.1。并且以JSON作为返回值。
更理想和漂亮的API调用就是Restful的API,同样基于HTTP/1.1,使用了协议提供的get,post,delete,put等方法。
然而追求效率的程序猿们发现HTTP/1.1协议本身的问题造成延迟,导致响应速度有些慢,于是google提出了一种基于HTTP/2(更快的HTTP)的gRPC协议。
当然作用是比Restful API更快了。
这儿还有一个gRPC和Restful相互转换的项目grpc-gateway
nodejs使用grpc,看这儿
简单来说,nodejs中,需要
1. 定义服务接口, 在xxx.proto文件中定义。定义采用的是protocol buffer数据结构,哦,又是另一种XML、JSON的替代品。但protocol buffer(现在是第三版proto3)不止如此,它更是一种语言
2. 定义服务端,在server的.js文件中定义。
3. 客户端调用。

MQTT,全称Message Queue Telemetry Transport消息队列遥测传输,是一种开销较小的、使用订阅机制传输信息的协议。
协议中两种设备,Broker和client,broker相当于服务器的角色。
例如,Client B, C是两个显示屏,向Broker订阅(Subscribe)温度主题(topic)。
温度传感器为client A,向broker发布(Publish)一个温度主题。此时,broker向已订阅温度的client B、C发送温度信息。
协议原文