Skip to content
Wireshark Wiki 中文翻译整理专题首页原始页面

sharkd 请求语法

本页是 sharkd JSON 请求/响应的速查参考,用来确认每种 req 的用途、必填字段、返回结构和示例输出。

先读这页能解决什么

需求入口注意点
打开或关闭会话load、bye、statusdaemon mode 与 console mode 对 bye 的行为不同。
检查过滤器和补全字段check、complete适合在发起较重请求前先验证表达式。
读取帧、帧列表或捕获文件信息frame、frames、info、analyseframe 偏单帧详情,frames 偏列表,analyse 偏协议概览。
下载导出对象或跟踪流download、follow不同下载类型的参数和响应结构不同。
获取统计、图表或 tap 输出intervals、iograph、tap这些请求可能返回大量数据。
修改配置或注释setconf、dumpconf、setcomment这类请求会影响当前 sharkd 会话状态。

易混点

  • 请求名必须使用文中给出的字符串;例如 analyse 是英式拼写,analyze 不会生效。
  • 本页展示的是 sharkd 请求协议,不是 tshark 命令行参数说明。
  • 示例里常把请求和响应连续写在同一个代码块中,阅读时需要按 JSON 对象边界区分。
  • 对版本差异不确定时,以当前 sharkd 实际返回为准;本文不补写未在原页出现的字段含义。

请求类型分组

分组请求类型
会话与文件load、bye、status、info、analyse
过滤器与补全check、complete
帧与数据读取frame、frames、follow、download
统计与图表intervals、iograph、tap
配置与注释dumpconf、setconf、setcomment

analyse

列出在 packet 文件中发现的协议及其开始和结束时间。

请求

| 名称 | 值 | 类型 | M/O | req | "analyse" | string | M

M/O:M = 必填,O = 可选

注意:请求值是按英式英语拼写的 analyse,analyze 不会生效。

响应

| 名称 | 值 | 类型 | frames | 已加载文件中的 frame 数量 | integer | protocols | 已加载文件中发现的协议列表 | array of strings | first | capture 中第一条记录的时间 | 表示 epoch 时间及秒小数部分的 float | last | capture 中最后一条记录的时间 | 表示 epoch 时间及秒小数部分的 float

参数

此请求类型没有其他参数。

示例

text
{"req":"analyse"}{"frames":53882,"protocols":["frame","eth","ethertype","ip","tcp","http","tds","data-text-lines","data","arp","udp","dns","dcerpc","cldap","spnego","spnego-krb5","ldap","gss-api","ipv6","dhcpv6","kerberos","nbdgm","smb","browser","nbss","smb2","urlencoded-form"],"first":1476281874.317326069,"last":1476283715.849661112}

bye

结束 startd 会话。

如果该请求是在连接到 sharkd 的 Daemon Mode 会话中发送的,则连接终止,并且该会话的进程退出。daemon 进程会继续运行并接受新的连接。其他现有会话照常继续。

如果该请求是在 Console Mode 会话中发送的,则 sharkd 进程退出。

请求

| 名称 | 值 | 类型 | M/O | req | "bye" | string | M

M/O:M = 必填,O = 可选

响应

此请求没有响应。

示例

text
{"req":"bye"}C:\Development\wsbuild64\run\Debug\sharkd.exe (process 10396) exited with code 0.To automatically close the console when debugging stops, enable Tools->Options->Debugging->Automatically close the console when debugging stops.Press any key to close this window . . .

check

检查字段名称或过滤器表达式的有效性。

请求

| 名称 | 值 | 类型 | M/O | req | "check" | string | M | field | 完全限定的字段引用 | string | O | filter | 显示过滤器表达式 | string | O

M/O:M = 必填,O = 可选

响应

| 名称 | 值 | 类型 | err | 错误代码——始终为 0 | integer | field | 返回消息 | string | filter | 返回消息 | string

返回消息:

| 返回消息 | 说明 | "ok" | 字段或过滤器有效 | 其他值 | 如返回消息中所述

示例

text
{"req":"check", "field":"tcp.srcport"}{"err":0,"field":"ok"}{"req":"check", "field":"transum.art"}{"err":0,"field":"notfound"}{"req":"check", "filter":"tcp.dstport==80"}{"err":0,"filter":"ok"}{"req":"check", "filter":"tcp.bad_field==80"}{"err":0,"filter":"Neither \"tcp.bad_field\" nor \"80\" are field or protocol names."}{"req":"check", "filter":"tcp.dstport==abc"}{"err":0,"filter":"\"abc\" is not a valid number."}{"req":"check", "filter":"tcp.dstport==80 &| tcp.srcport==45678"}{"err":0,"filter":"Syntax error near \"tcp.srcport\"."}{"req":"check", "filter":"tcp.dstport==80 && tcp.srcport==89000"}{"err":0,"filter":"\"89000\" too big for this field, maximum 65535."}

complete

获取一个或多个字段或首选项的属性。

请求

| 名称 | 值 | 类型 | M/O | req | "complete" | string | M | field | 完全限定的字段引用 | string | O | pref | 完全限定的首选项引用 | string | O

M/O:M = 必填,O = 可选

complete 请求假定为 field 或 pref 指定的值是其引用的第一部分(即 prefix),并返回每个匹配字段的列表。这不是基于点分层级的匹配,而是直接的字符串匹配,例如:

"field":"http.request" 将返回 http.request_number 以及 http.request.line、http.request.method 等的详细信息。

响应

| 名称 | 值 | 类型 | err | 错误代码——始终为 0 | integer | field | "f":"field_reference" "t":field_type "n":"field_name" | array of objects | pref | "f":"preference_name" "d":preference_description | array of objects

field_type 是由枚举列表确定的数值——参见 ftypes.h

如果输入的 field 或 pref 值不正确,则返回空数组。

示例

text
{"req":"complete", "field":"http.request.method"}{"err":0,"field":[{"f":"http.request.method","t":26,"n":"Request Method"}]}{"req":"complete", "field":"http.request"}{"err":0,"field":[{"f":"http.request","t":2,"n":"Request"},{"f":"http.request_number","t":7,"n":"Request number"},{"f":"http.request.line","t":26,"n":"Request line"},{"f":"http.request.method","t":26,"n":"Request Method"},{"f":"http.request.uri","t":26,"n":"Request URI"},{"f":"http.request.uri.path","t":26,"n":"Request URI Path"},{"f":"http.request.uri.query","t":26,"n":"Request URI Query"},{"f":"http.request.uri.query.parameter","t":26,"n":"Request URI Query Parameter"},{"f":"http.request.version","t":26,"n":"Request Version"},{"f":"http.request.full_uri","t":26,"n":"Full request URI"},{"f":"http.request_in","t":35,"n":"Request in frame"}]}{"req":"complete", "field":"http.bad_ref"}{"err":0,"field":[]}{"req":"complete", "pref":"tcp"}{"err":0,"pref":[{"f":"tcp","d":"TCP"},{"f":"tcpencap","d":"TCPENCAP"},{"f":"tcpros","d":"TCPROS"}]}

download

获取已解码对象(导出对象、SSL secrets 或 rtp 数据);部分下载数据采用 base64 编码。

请求

| 名称 | 值 | 类型 | M/O | req | "download" | string | M | token | 要下载的 Token:

  • eo:<object_ref>
  • ssl-secrets
  • rtp:<stream_specification> | string | M

M/O:M = 必填,O = 可选

object_ref 和 stream_specification 的详细信息分别见下文 eo 和 rtp。

eo

对于 eo(Export Object)token,可以下载以下类型的数据对象:

  • DICOM
  • HTTP
  • IMF
  • SMB
  • TFTP

在请求下载导出对象之前,必须先导出它。这通过运行相应的 tap 命令完成,例如:

text
{"jsonrpc":"2.0","id":3,"method":"tap", "params":{"tap0":"eo:http"&#125;&#125;

然后可以像这样发出请求:

text
{"jsonrpc":"2.0","id":3,"method":"download", "params":{"token":"eo:http_0"&#125;&#125;

object_ref 是通过在类型后追加下划线字符(_),再跟上检测到的对象表中的索引来创建的。在 Wireshark 中,如果显示示例文件的 HTTP Export Objects,可能会看到类似如下内容:

要获取第一个对象,应使用请求:

text
{"req":"download","token":"eo:http_0"}

要获取第二个对象,应使用请求:

text
{"req":"download","token":"eo:http_1"}

依此类推。

ssl-secrets

sharkd 可以导出并下载特定于 capture 文件中流量的 session keys。要提取 session keys,必须先使用服务器私有(RSA)密钥解密流量。这通过 TLS preferences 传入私钥完成;可以使用 Wireshark 编辑 prefs 文件,也可以在加载 trace 文件之前使用 sharkd setconf 请求。

文件解密后,即可下载 Session Keys(ssl-secrets)。

更多信息请参见此 wiki 的 TLS 页面。

rtp

使用此选项,可以将 rtp stream 中的音频内容作为 x-wav MIME 数据文件下载。请求必须包含唯一标识 stream 的 stream_specification,格式如下:

source-ip_source-port_destination-ip_destination-port_synchronization-source-identifier

完整请求如下所示:

text
{"req":"download","token":"rtp:200.57.7.204_8000_200.57.7.196_40376_0xd2bd4e3e"}

响应

| 名称 | 值 | 类型 | file | 建议的文件名 | string | mime | 对象的 MIME content-type | string | data | Base64 编码的对象 | string

注意:如果请求不存在的 token,sharkd 只响应 \r\n\r\n,即没有 JSON 响应。

eo

导出的对象可以是 HTML 页面、jpg 图像、CSS 样式表等。文件名等同于 URL path 的最后一个元素,例如 index.html 或 favicon.ico

如果尝试下载不存在的导出对象,sharkd 将没有响应。

ssl-secret

输出格式为:

text
RSA Session-ID:xxxx Master-Key:yyyy\n

其中:

  • xxxx 是十六进制的 session ID(最多 64 个字符)
  • yyyy 是十六进制的 Master Key(始终为 96 个字符)

因此总长度最多为 3+1+11+64+1+11+96+2 = 189 个字符

或者,输出为:

text
CLIENT_RANDOM zzzz yyyy\n

其中:

  • zzzz 是 client random(始终为 64 个字符)
  • yyyy 与上文相同

因此长度始终为 13+1+64+1+96+2 = 177 个字符

rtp

rtp 下载的 file 值是字符串 "rtp:" 后缀加上 stream specification。参见下面的 rtp 示例。

示例

text
{"req":"download","token":"eo:http_0"}{"file":"About","mime":"text/html","data":"PCFET0NUWV ... ib2R5Pg0KPC9odG1sPg0K"}{"req":"download","token":"rtp:200.57.7.204_8000_200.57.7.196_40376_0xd2bd4e3e"}{"file":"rtp:200.57.7.204_8000_200.57.7.196_40376_0xd2bd4e3e","mime":"audio/x-wav","data":"UklGRv////9XQVZF ... AQQAsj/eABwA5AC6P4Y/8gB8AJQAzAC"}

dumpconf

列出一个或所有配置参数。

请求

| 名称 | 值 | 类型 | M/O | req | "dumpconf" | string | M | pref | 完全限定的首选项引用 | string | O

M/O:M = 必填,O = 可选

如果未指定 pref 值,则列出所有 preferences。

响应

| 名称 | 数组中的对象 | 类型 | prefs | | array of objects | | pref_name | | | "b":binary_value | 0 - 未设置,1 - 已设置 | | "d":"description" | string | | "e":[Drop_down_list]

  • "v":value
  • "s":selected
  • "d":"description" | array of objects | | "r":"[range_of_values]" | 包含逗号分隔数字列表的 string,或指定为 start-end 的范围 | | "s":"string_value" | string | | "t":[table_of_values] | array of objects | | "u":unsigned_integer_value | integer

示例

text
{"req":"dumpconf","pref":"tcp.desegment_tcp_streams"}{"prefs":{"tcp.desegment_tcp_streams":{"b":1&#125;&#125;}{"req":"dumpconf"}{"prefs": ..."ber.decode_primitive":{"b":0}, ..."bgp.asn_len":{"e":[{"v":0,"s":1,"d":"Auto-detect"},{"v":2,"d":"2 octet"},{"v":4,"d":"4 octet"}]} ..."bjnp.udp.port":{"r": "8611-8614"}, ..."couchbase.tls.port":{"u": 11207}, ..."couchbase.tcp.port":{"r": "11210"}, ...

follow

获取特定协议或 stream 的 client 与 server 信息,以及指定协议承载的数据 payload。协议 payload 使用 JSON-Base64 编码,以适配二进制内容。

请求

| 名称 | 值 | 类型 | M/O | req | "follow" | string | M | follow | 要输出的协议 payload | string | M | filter | 过滤器表达式 | string | M

M/O:M = 必填,O = 可选

响应

| 名称 | 值 | 类型 | err | 错误代码 | integer | shost | Service IP 地址 | string(点分 IP 地址) | sport | Service 端口号 | string | sbytes | 从 service 到 client 的总字节数 | integer | chost | Client IP 地址 | string(点分 IP 地址) | cport | Client 端口号 | string | cbytes | 从 client 到 service 的总字节数 | integer | payloads | stream 中 packet 所指定协议承载的 payload | array of objects | - "n": | payload 中的字节数 | integer | - "d": | 协议 payload | 以 JSON-Base64 编码的 bytes | - "s": | 流向 缺失 - client 到 service 1 - service 到 client | integer

请注意,此请求会传送 stream 中的所有数据,因此响应可能非常大。

示例

text
{"req":"follow","follow":"HTTP","filter":"tcp.stream==0"}{"err":0,"shost":"192.168.3.78","sport":"80","sbytes":110,"chost":"192.168.3.85","cport":"46815","cbytes":5339,"payloads":[{"n":4,"d":"R0VUIC9NeUFwcC9Ib21lL0Fib3V ... 5NQ0KDQo=","s":1},{"n":9,"d":"PCFET0 ... KPC9odG1sPg0K","s":1}]}{"req":"follow","follow":"TCP","filter":"tcp.stream==1"}{"err":0,"shost":"192.168.3.79","sport":"1433","sbytes":163222,"chost":"192.168.3.78","cport":"50442","cbytes":66745,"payloads":[{"n":5,"d":"AQkBBAAAA ... hAHQAZQA="},{"n":6,"d":"BAEBCQBH ... AYAAAA=","s":1},{"n":22741,"d":"BgAAABoAQwByAGUAYQB0AGkAdgBlACAAQQByAHQAcwAAAAAAALb7XKyOAAAAAAAABAIAAAAIAAAAAAAAAA+q/xEAwQAKAAAAAAAAAHkAAAAA/gAA4AAAAAAAAAAAAA==","s":1}]}{"req":"follow","follow":"TCP","filter":"tcp.stream==10000"}{"err":0,"shost":"NONE","sport":"0","sbytes":0,"chost":"NONE","cport":"0","cbytes":0}

frame

获取关于某个 frame 的完整信息,包括协议树。

请求

| 名称 | 值 | 类型 | M/O | req | "frame" | string | M | frame | Frame 编号 | integer | M | proto | 如果存在,则输出协议树 | 任何有效 JSON 值 | O | ref_frame | 如果存在,则输出时间参考 frame 编号 这似乎不起作用 | 任何有效 JSON 值 | O | prev_frame | 如果存在,则输出上一个已显示 frame 编号 这似乎不起作用 | 任何有效 JSON 值 | O | columns | 如果存在,则输出 frame columns | 任何有效 JSON 值 | O | color | 如果存在,则输出 color-filter bg/fg | 任何有效 JSON 值 | O | bytes | 如果存在,则输出 frame bytes | 任何有效 JSON 值 | O | hidden | 如果存在,则输出隐藏的 tree fields | 任何有效 JSON 值 | O

注意:对于类型为任何有效 JSON 值的任意字段,true 值是可接受的。不过,false 值也会被视为 true,即 {"req":"frame", "frame":4, "bytes":false} 会输出 frame bytes。

M/O:M = 必填,O = 可选

响应

| 名称 | 值 | 类型 | err | 错误代码 | integer | tree | 协议树信息——见下文 | array of objects | col | column data 数组 | array | bytes | 使用 Base64 编码的 Frame bytes | string of base64 | ds | 其他数据源 | array of objects | comment | Frame 注释 | string | fol | Follow 过滤器: [0] - protocol [1] - filter string | array of objects | i | 如果 frame 被忽略则为 true | boolean | m | 如果 frame 被标记则为 true | boolean | bg | Color filter - 十六进制背景色 | string | fg | Color filter - 十六进制前景色 | string

tree 数组中的值

| 名称 | 值 | 类型 | l | 字段标签 | string | t | tree 或 subtree 节点的类型——"proto"、"framenum" 或 "url" | string | f | 过滤器变量(可在表达式中使用的变量) | string | s | 严重性,例如 "Chat" | string | e | Subtree ett 索引 | integer | n | subtree 节点数组 | array of objects | h | 两项数组:(item 起始位置,item 长度) | array of integers | i | 两项数组:(appendix 起始位置,appendix 长度) | array of integers | p | [RESERVED] 两项数组:(protocol 起始位置,protocol 长度) | array of integers | ds | Data src 索引 | | url | URL | string | fnum | 用于在文件中其他位置引用 frame | integer | g | 如果字段由 Wireshark 生成则为 true | boolean | v | 如果字段被隐藏则为 true | boolean

示例

text
{"req":"frame", "frame":4}{"err":0,"fol":[["HTTP","tcp.stream eq 0"],["TCP","tcp.stream eq 0"]]}{"req":"frame", "frame":4, "proto":true}{"err":0,"tree":[{"l":"Frame 4: 176 bytes on wire (1408 bits), 176 bytes captured (1408 bits) on interface \\Device\\NPF_{304D305E-652F-47CD-B730-94986169FE76}, id 0","h":[0,176],"t":"proto","f":"frame","e":10538,"n":[{"l":"Interface id: 0 (\\Device\\NPF_{304D305E-652F-47CD-B730-94986169FE76})","f":"frame.inter ... rue},{"l":"Req Spread: 0.000000000 seconds","f":"transum.reqspread == 0.000000000","g":true},{"l":"Rsp Spread: 0.000164000 seconds","f":"transum.rspspread == 0.000164000","g":true},{"l":"Trace clip filter: tcp.stream==0 && frame.number&gt;=4 && frame.number&lt;=9 && tcp.len&gt;0","f":"transum.clip_filter == \"tcp.stream==0 && frame.number&gt;=4 && frame.number&lt;=9 && tcp.len&gt;0\"","g":true},{"l":"Calculation: Generic TCP","f":"transum.calculation == \"Generic TCP\"","g":true}]}],"fol":[["HTTP","tcp.stream eq 0"],["TCP","tcp.stream eq 0"]]}{"req":"frame", "frame":4, "columns":true}{"err":0,"col":["4","0.000319","192.168.3.85","192.168.3.78","HTTP","176","GET /MyApp/Home/About HTTP/1.1 "],"fol":[["HTTP","tcp.stream eq 0"],["TCP","tcp.stream eq 0"]]}{"req":"frame", "frame":4, "color":true}{"err":0,"bg":"e4ffc7","fg":"12272e","fol":[["HTTP","tcp.stream eq 0"],["TCP","tcp.stream eq 0"]]}{"req":"frame", "frame":4, "bytes":"true"}{"err":0,"bytes":"AAwp+/kTAAwp2dO1CABFAACimmFAAEAGGAHAqANVwKgDTrbfAFAefnCL/KwyboAYAOU0GwAAAQEICgSv6tUOKKxsR0VUIC9NeUFwcC9Ib21lL0Fib3V0IEhUVFAvMS4xDQpDb25uZWN0aW9uOiBjbG9zZQ0KVXNlci1BZ2VudDogSmFrYXJ0YSBDb21tb25zLUh0dHBDbGllbnQvMy4xDQpIb3N0OiB3ZWIwMQ0KDQo=","fol":[["HTTP","tcp.stream eq 0"],["TCP","tcp.stream eq 0"]]}

frames

获取某个 packet 范围的 Packet List 信息。

请求

| 名称 | 值 | 类型 | M/O | req | "frames" | string | M | column0...columnXX | 请求的 columns,可以是范围 [0..NUM_COL_FMTS] 内的数字,或 custom(语法 <dfilter>:<occurence>)。

如果未指定 column0,则会使用当前 profile column set。 | integer or string | O | filter | 输出通过此过滤器表达式的那些 frames | string | O | skip | 跳过 N 个 frames | integer | O | limit | 将输出限制为 N 个 frames | integer | O | refs | 基于此列表(逗号分隔)的有序时间参考 frame 编号输出。 | string | O

M/O:M = 必填,O = 可选

有关每个 column 内容的详细信息,请参见 sharkd Info Request Output Example wiki 页面中列出的 columns。

响应

响应是一个对象数组。对象的元素如下:

| 名称 | 值 | 类型 | c | columns 的输出,作为 strings | array of strings | num | Frame 编号 | integer | bg | Color filter - 十六进制背景色 | string | fg | Color filter - 十六进制前景色 | string

示例

text
{"req":"frames","filter":"frame.number&lt;=2"}[{"c":["1","0.000000","192.168.3.85","192.168.3.78","TCP","74","46815  80 [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=78637781 TSecr=0 WS=128"],"num":1,"bg":"e4ffc7","fg":"12272e"},{"c":["2","0.000075","192.168.3.78","192.168.3.85","TCP","74","80  46815 [SYN, ACK] Seq=0 Ack=1 Win=8192 Len=0 MSS=1460 WS=256 SACK_PERM=1 TSval=237546604 TSecr=78637781"],"num":2,"bg":"e4ffc7","fg":"12272e"}]{"req":"frames","limit":2}[{"c":["1","0.000000","192.168.3.85","192.168.3.78","TCP","74","46815  80 [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=78637781 TSecr=0 WS=128"],"num":1,"bg":"e4ffc7","fg":"12272e"},{"c":["2","0.000075","192.168.3.78","192.168.3.85","TCP","74","80  46815 [SYN, ACK] Seq=0 Ack=1 Win=8192 Len=0 MSS=1460 WS=256 SACK_PERM=1 TSval=237546604 TSecr=78637781"],"num":2,"bg":"e4ffc7","fg":"12272e"}]{"req":"frames","skip":2,"limit":2}[{"c":["3","0.000195","192.168.3.85","192.168.3.78","TCP","66","46815  80 [ACK] Seq=1 Ack=1 Win=29312 Len=0 TSval=78637781 TSecr=237546604"],"num":3,"bg":"e4ffc7","fg":"12272e"},{"c":["4","0.000319","192.168.3.85","192.168.3.78","HTTP","176","GET /MyApp/Home/About HTTP/1.1 "],"num":4,"bg":"e4ffc7","fg":"12272e"}]{"req":"frames","skip":2,"limit":1, "column0":20, "column1":"transum.art:1"}[{"c":["VMware_d9:d3:b5","0.000075000"],"num":1,"bg":"e4ffc7","fg":"12272e"}]

备注

使用 frames 请求时有一些注意事项:

  • columns 必须在 Default profile 中预先定义

  • 隐藏 columns 的值会包含在响应中

  • 使用 Wireshark 对 columns 做出更改后,必须:

  • 关闭 Wireshark 以保存更改

  • 重启 sharkd,包括整个 daemon(如果使用 Daemon Mode),而不仅仅是正在运行的会话

  • columns 只是作为带引号的逗号分隔变量列出

  • 没有与 columns 关联的标签或字段名称

info

获取 sharkd clients 可用的格式和统计信息类型列表。

请求

| 名称 | 值 | 类型 | M/O | req | "info" | string | M

M/O:M = 必填,O = 可选

响应

| 名称 | 值 | 类型 | columns | | array of objects | stats | | array of objects | ftypes | | array of objects | version | | string | nstat | | array of objects | convs | | array of objects | sequ | | array of objects | taps | | array of objects | eo | | array of objects | srt | | array of objects | rtd | | array of objects | follow | | array of objects

有关 info 请求输出的完整示例,请参见 sharkd Info Request Output Example wiki 页面。

待完成

示例

text
{"req":"info"}{"columns":[{"name":"802.1Q VLAN id","format":"%q"},..."stats":[{"name":"29West/Queues/Advertisements by Queue","tap":"stat:lbmr_queue_ads_queue"},..."ftypes":["FT_NONE","FT_PROTOCOL","FT_BOOLEAN","FT_CHAR","FT_UINT8","FT_UINT16","FT_UINT24","FT_UINT32",..."version":"v3.5.0rc0-595-g0d820ddc8d2d","nstat":[{"name":"A-I/F BSMAP Statistics","tap":"nstat:ansi_a,bsmap"},..."convs":[{"name":"Conversation List/Bluetooth","tap":"conv:Bluetooth"},..."seqa":[{"name":"All Flows","tap":"seqa:any"},..."taps":[{"name":"RTP streams","tap":"rtp-streams"},{"name":"Expert Information","tap":"expert"}],"eo":[{"name":"Export Object/DICOM","tap":"eo:dicom"},..."srt":[{"name":"Service Response Time/AFP","tap":"srt:afp"},..."rtd":[{"name":"Response Time Delay/H.225 RAS","tap":"rtd:h225_ras"},..."follow":[{"name":"Follow/HTTP","tap":"follow:HTTP"}, ... }

intervals

此请求对 packet 数据进行聚合,以生成每个 interval 中的 frame 数量计数和字节数总和。聚合基于固定时间 interval 执行(默认为一秒)。

请求

| 名称 | 值 | 类型 | M/O | req | "intervals" | string | M | interval | Interval 时间,单位为毫秒 | integer | O | filter | 在生成样本集之前应用的显示过滤器项 | string | O

M/O:M = 必填,O = 可选

响应

| 名称 | 值 | 类型 | intervals | 数据数组,由整数值数组组成,格式为 [x,y,z],其中: x - interval 编号 y - 此 interval 中的 frame 数量 z - 此 interval 中的字节数 | 逗号分隔整数数组的数组 | last | 样本中的最后一个 interval 编号 | integer | frames | 样本中的 frame 总数 | integer | bytes | 样本中的总字节数 | integer

注意:如果某个 interval 内没有 packets,则不会为该 interval 生成值

示例

text
{"req":"intervals","filter":"frame.number&lt;=60"}{"intervals":[[0,13,6812],[1,38,31459],[2,9,3775]],"last":2,"frames":60,"bytes":42046}{"req":"intervals","interval":100,"filter":"frame.number&lt;=60"}{"intervals":[[0,12,6758],[1,1,54],[10,15,14783],[12,23,16676],[20,9,3775]],"last":20,"frames":60,"bytes":42046}

最后一个示例中的输出缺少一些 intervals,因为这些 intervals 内没有 packets。

iograph

创建用于绘图的时间顺序值列表;默认按秒生成。

请求

| 名称 | 值 | 类型 | M/O | req | "iographs" | string | M | interval | Interval 时间,单位为毫秒 | integer | O | filter | 在生成样本集之前应用的显示过滤器项 | string | O | graph0 | 第一个 graph 请求——详情见下文 | string | M | graph1...graph9 | 其他 graph 请求——详情见下文 | string | O | filter0 | 第一个 graph 过滤器 | string | O | filter1...filter9 | 其他 graph 过滤器 | string | O

M/O:M = 必填,O = 可选

Graph 请求:

| 名称 | 值 | 类型 | graph0...graph9 | "packets" | string | graph0...graph9 | "bytes" | string | graph0...graph9 | "bits" | string | graph0...graph9 | "sum:<field>" | string | graph0...graph9 | "frames:<field>" | string | graph0...graph9 | "max:<field>" | string | graph0...graph9 | "min:<field>" | string | graph0...graph9 | "avg:<field>" | string | graph0...graph9 | "load:<field>" | string

注意:我们想绘制的任何字段都必须出现在相应的过滤器表达式中。如果没有出现,则不会生成值。

尝试绘制非 numeric 字段会产生空的输出数组。

响应

| 名称 | 值 | 类型 | iograph | 输出对象的顶层数组,每个 graph 对应一个对象 | 对象数组 | items | 为指定的某个 graph 生成的值数组 | integer

注意:如果某个 interval 内没有 packets,则不会为该 interval 生成值

示例

text
{"req":"iograph","graph0":"packets","filter0":"frame.number&lt;=100"}{"iograph":[{"items":[13.000000,38.000000,23.000000,25.000000,1.000000]}]}{"req":"iograph","graph0":"sum:tcp.len","filter0":"http && frame.number&lt;=100 && tcp.len"}{"iograph":[{"items":[2553.000000,4640.000000,955.000000,5416.000000]}]}{"req":"iograph","graph0":"sum:frame.len","filter0":"http && frame.number&lt;=100 && frame.len","graph1":"sum:tcp.len","filter1":"http && frame.number&lt;=100 && tcp.len"}{"iograph":[{"items":[2685.000000,4904.000000,1153.000000,5614.000000]},{"items":[2553.000000,4640.000000,955.000000,5416.000000]}]}{"req":"iograph","graph0":"http.request","filter0":"http && frame.number&lt;=100 && http.request"}{"iograph":[]}

load

加载 packet trace 文件以进行分析。

请求

| 名称 | 值 | 类型 | M/O | req | "load" | string | M | file | 要加载文件的路径和名称 | string | M

M/O:M = 必填,O = 可选

响应

| 名称 | 值 | 类型 | err | 错误代码 | integer

错误代码:

| 错误代码 | 说明 | 0 | 操作成功 | 2 | 文件不存在

示例

text
{"req":"load","file":"c:/traces/Contoso_01/web01/web01_00001_20161012151754.pcapng"}{"err":0}{"req":"load","file":"c:/traces/Contoso_01/web01/wrong_name.pcapng"}{"err":2}

setcomment

在 sharkd 会话期间为 frame 设置注释,即 PCAPNG 文件不会被修改,因此该注释不会持久保存。

请求

| 名称 | 值 | 类型 | M/O | req | "setcomment" | string | M | frame | 设置注释的 frame | integer | M | comment | 注释文本 | string | O

M/O:M = 必填,O = 可选

响应

| 名称 | 值 | 类型 | err | 错误代码 | integer

错误代码:

| 错误代码 | 说明 | 0 | 操作成功

示例

text
{"req":"setcomment","frame":1,"comment":"Hello world"}{"err":0}{"req":"frame", "frame":1, "proto":"true"}{"err":0,"comment":"Hello world","tree":[{"l":"Packet comments","t":"proto","f":"pkt_comment","s":"Comment","e":10541,"n":[{"l":"Hello world","f":"frame.comment == \"Hello world\"","s":"Comment","e":55379,"n":[{"l":"Expert Info (Comment/Comment): Hello world","t":"pro ...

setconf

在 sharkd 会话期间设置 preference,即 preference 文件不会被修改,因此该设置不会持久保存。

请求

| 名称 | 值 | 类型 | M/O | req | "setconf" | string | M | name | preference 的名称 | string | M | value | preference 的新值 | 根据需要 | M

M/O:M = 必填,O = 可选

响应

| 名称 | 值 | 类型 | err | 错误代码 | integer

错误代码:

| 错误代码 | 说明 | 0 | 操作成功

示例

text
{"req":"setconf","name":"tcp.desegment_tcp_streams","value":false}{"err":0}{"req":"dumpconf","pref":"tcp.desegment_tcp_streams"}{"prefs":{"tcp.desegment_tcp_streams":{"b":0&#125;&#125;}{"req":"setconf","name":"tcp.desegment_tcp_streams","value":true}{"err":0}{"req":"dumpconf","pref":"tcp.desegment_tcp_streams"}{"prefs":{"tcp.desegment_tcp_streams":{"b":1&#125;&#125;}

status

获取已加载文件的基本信息(名称、大小、frame 数量等)。

请求

| 名称 | 值 | 类型 | M/O | req | "status" | string | M

M/O:M = 必填,O = 可选

响应

| 名称 | 值 | 类型 | frames | 当前已加载 frames 的计数 | integer | duration | 第一个 frame 的时间与最后一个已加载 frame 的时间之间的差值 | number | filename | Capture 文件名——仅在文件已加载时存在 | string | filesize | Capture 文件大小——仅在文件已加载时存在 | integer

示例

text
{"req":"status"}{"frames":53882,"duration":1841.532335000,"filename":"web01_00001_20161012151754.pcapng","filesize":36433896}

tap

设置最多 16 个统计 taps,并从中获取统计信息;tap 类型包括 stats、nstat、conv、host、rtp-streams、rtp-analyse、eo、expert、rtd、srt 和 flow。

请求

| 名称 | 值 | 类型 | M/O | req | "tap" | string | M | tap0 | 第一个 tap 类型请求 | string | M | tap1 ... tap15 | 其他 tap 类型请求 | string | O

M/O:M = 必填,O = 可选

Tap 类型

此属性的格式为 "tap0":"<type>:<subtype>"

类型和子类型很多——多到无法在此列出,而且随着 Wireshark 添加新协议,该列表也会变化。使用 info 请求获取可用值的完整列表——点击此处查看 info 输出示例。

响应

| 名称 | 值 | 类型 | err | 错误代码 | integer | taps | 每个指定 tap 对应一个数组 | array of objects | - tap | Tap 类型——见上文 | string | - type | Tap 类型——见上文 | string | - details | 对象数组,每个 packet 一个对象 | array of objects

details 字段中的对象:

| 名称 | 值 | 类型 | conv | | | | | | eo | | | | | | flow | | | | | | host | | | | | | expert | | | f | Frame 编号 | integer | g | Expert group | string | | "Sequence" | | m | Expert message | string | p | 此 message 适用的 Protocol | string | s | 此 message 的严重性 | string | | "Chat" | | nstat | | | | | | rtd | | | | | | rtp-streams | | | | | | rtp-analyse | | | | | | srt | | | | | | stat | | | | |

待完成。

注意:其中许多 taps 会产生大量数据。

示例

text
{"req":"tap","tap0":"conv:Ethernet"}{"taps":[{"tap":"conv:Ethernet","type":"conv","convs":[{"saddr":"VMware_d9:d3:b5","daddr":"VMware_fb:f9:13","rxf":1,"rxb":74,"txf":1,"txb":74,"start":0.000000000,"stop":0.000075000,"filter":"eth.addr==00:0c:29:d9:d3:b5 && eth.addr==00:0c:29:fb:f9:13"}],"proto":"Ethernet","geoip":false}],"err":0}{"taps":[{"tap":"expert","type":"expert","details":[{"f":2,"s":"Chat","g":"Sequence","m":"Connection establish acknowledge (SYN+ACK): server port 80","p":"TCP"},{"f":1,"s":"Chat","g":"Sequence","m":"Connection establish request (SYN): server port 80","p":"TCP"}]}],"err":0}{"req":"tap","tap0":"seqa:tcp"}sharkd_session_process_tap() count=1{"taps":[{"tap":"seqa:tcp","type":"flow","nodes":["192.168.3.85","192.168.3.78"],"flows":[{"t":"0.000000","n":[0,1],"pn":[46815,80],"c":"Seq = 0"},{"t":"0.000075","n":[1,0],"pn":[80,46815],"c":"Seq = 0 Ack = 1"}]}],"err":0}{"req":"tap","tap0":"stat:http_req"}{"taps":[{"tap":"stats:http_req","type":"stats","name":"HTTP/Requests","stats":[{"name":"HTTP Requests by HTTP Host","count":1,"rate":0.1431,"perc":100,"burstrate":0.0100,"bursttime":0.000,"sub":[{"name":"web01","count":1,"rate":0.1431,"perc":100.00,"burstrate":0.0100,"bursttime":0.000,"sub":[{"name":"/MyApp/Home/About","count":1,"rate":0.1431,"perc":100.00,"burstrate":0.0100,"bursttime":0.000}]}]}]}],"err":0}

原始页面图片

export_object_screenshot
export_object_screenshot

相关 Wireshark Wiki 页面

网络分析技术档案