Appearance
Appearance
本页是 sharkd JSON 请求/响应的速查参考,用来确认每种 req 的用途、必填字段、返回结构和示例输出。
| 需求 | 入口 | 注意点 |
|---|---|---|
| 打开或关闭会话 | load、bye、status | daemon mode 与 console mode 对 bye 的行为不同。 |
| 检查过滤器和补全字段 | check、complete | 适合在发起较重请求前先验证表达式。 |
| 读取帧、帧列表或捕获文件信息 | frame、frames、info、analyse | frame 偏单帧详情,frames 偏列表,analyse 偏协议概览。 |
| 下载导出对象或跟踪流 | download、follow | 不同下载类型的参数和响应结构不同。 |
| 获取统计、图表或 tap 输出 | intervals、iograph、tap | 这些请求可能返回大量数据。 |
| 修改配置或注释 | setconf、dumpconf、setcomment | 这类请求会影响当前 sharkd 会话状态。 |
analyse 是英式拼写,analyze 不会生效。| 分组 | 请求类型 |
|---|---|
| 会话与文件 | load、bye、status、info、analyse |
| 过滤器与补全 | check、complete |
| 帧与数据读取 | frame、frames、follow、download |
| 统计与图表 | intervals、iograph、tap |
| 配置与注释 | dumpconf、setconf、setcomment |
列出在 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
此请求类型没有其他参数。
{"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}结束 startd 会话。
如果该请求是在连接到 sharkd 的 Daemon Mode 会话中发送的,则连接终止,并且该会话的进程退出。daemon 进程会继续运行并接受新的连接。其他现有会话照常继续。
如果该请求是在 Console Mode 会话中发送的,则 sharkd 进程退出。
| 名称 | 值 | 类型 | M/O | req | "bye" | string | M
M/O:M = 必填,O = 可选
此请求没有响应。
{"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 . . .检查字段名称或过滤器表达式的有效性。
| 名称 | 值 | 类型 | M/O | req | "check" | string | M | field | 完全限定的字段引用 | string | O | filter | 显示过滤器表达式 | string | O
M/O:M = 必填,O = 可选
| 名称 | 值 | 类型 | err | 错误代码——始终为 0 | integer | field | 返回消息 | string | filter | 返回消息 | string
返回消息:
| 返回消息 | 说明 | "ok" | 字段或过滤器有效 | 其他值 | 如返回消息中所述
{"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."}获取一个或多个字段或首选项的属性。
| 名称 | 值 | 类型 | 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 值不正确,则返回空数组。
{"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"}]}获取已解码对象(导出对象、SSL secrets 或 rtp 数据);部分下载数据采用 base64 编码。
| 名称 | 值 | 类型 | M/O | req | "download" | string | M | token | 要下载的 Token:
M/O:M = 必填,O = 可选
object_ref 和 stream_specification 的详细信息分别见下文 eo 和 rtp。
对于 eo(Export Object)token,可以下载以下类型的数据对象:
在请求下载导出对象之前,必须先导出它。这通过运行相应的 tap 命令完成,例如:
{"jsonrpc":"2.0","id":3,"method":"tap", "params":{"tap0":"eo:http"}}然后可以像这样发出请求:
{"jsonrpc":"2.0","id":3,"method":"download", "params":{"token":"eo:http_0"}}object_ref 是通过在类型后追加下划线字符(_),再跟上检测到的对象表中的索引来创建的。在 Wireshark 中,如果显示示例文件的 HTTP Export Objects,可能会看到类似如下内容:
要获取第一个对象,应使用请求:
{"req":"download","token":"eo:http_0"}要获取第二个对象,应使用请求:
{"req":"download","token":"eo:http_1"}依此类推。
sharkd 可以导出并下载特定于 capture 文件中流量的 session keys。要提取 session keys,必须先使用服务器私有(RSA)密钥解密流量。这通过 TLS preferences 传入私钥完成;可以使用 Wireshark 编辑 prefs 文件,也可以在加载 trace 文件之前使用 sharkd setconf 请求。
文件解密后,即可下载 Session Keys(ssl-secrets)。
更多信息请参见此 wiki 的 TLS 页面。
使用此选项,可以将 rtp stream 中的音频内容作为 x-wav MIME 数据文件下载。请求必须包含唯一标识 stream 的 stream_specification,格式如下:
source-ip_source-port_destination-ip_destination-port_synchronization-source-identifier
完整请求如下所示:
{"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 响应。
导出的对象可以是 HTML 页面、jpg 图像、CSS 样式表等。文件名等同于 URL path 的最后一个元素,例如 index.html 或 favicon.ico
如果尝试下载不存在的导出对象,sharkd 将没有响应。
输出格式为:
RSA Session-ID:xxxx Master-Key:yyyy\n其中:
因此总长度最多为 3+1+11+64+1+11+96+2 = 189 个字符
或者,输出为:
CLIENT_RANDOM zzzz yyyy\n其中:
因此长度始终为 13+1+64+1+96+2 = 177 个字符
rtp 下载的 file 值是字符串 "rtp:" 后缀加上 stream specification。参见下面的 rtp 示例。
{"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"}列出一个或所有配置参数。
| 名称 | 值 | 类型 | 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]
{"req":"dumpconf","pref":"tcp.desegment_tcp_streams"}{"prefs":{"tcp.desegment_tcp_streams":{"b":1}}}{"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"}, ...获取特定协议或 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 中的所有数据,因此响应可能非常大。
{"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 的完整信息,包括协议树。
| 名称 | 值 | 类型 | 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
{"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>=4 && frame.number<=9 && tcp.len>0","f":"transum.clip_filter == \"tcp.stream==0 && frame.number>=4 && frame.number<=9 && tcp.len>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"]]}获取某个 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
{"req":"frames","filter":"frame.number<=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 关联的标签或字段名称
获取 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 页面。
待完成
{"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"}, ... }此请求对 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 生成值
{"req":"intervals","filter":"frame.number<=60"}{"intervals":[[0,13,6812],[1,38,31459],[2,9,3775]],"last":2,"frames":60,"bytes":42046}{"req":"intervals","interval":100,"filter":"frame.number<=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。
创建用于绘图的时间顺序值列表;默认按秒生成。
| 名称 | 值 | 类型 | 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 生成值
{"req":"iograph","graph0":"packets","filter0":"frame.number<=100"}{"iograph":[{"items":[13.000000,38.000000,23.000000,25.000000,1.000000]}]}{"req":"iograph","graph0":"sum:tcp.len","filter0":"http && frame.number<=100 && tcp.len"}{"iograph":[{"items":[2553.000000,4640.000000,955.000000,5416.000000]}]}{"req":"iograph","graph0":"sum:frame.len","filter0":"http && frame.number<=100 && frame.len","graph1":"sum:tcp.len","filter1":"http && frame.number<=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<=100 && http.request"}{"iograph":[]}加载 packet trace 文件以进行分析。
| 名称 | 值 | 类型 | M/O | req | "load" | string | M | file | 要加载文件的路径和名称 | string | M
M/O:M = 必填,O = 可选
| 名称 | 值 | 类型 | err | 错误代码 | integer
错误代码:
| 错误代码 | 说明 | 0 | 操作成功 | 2 | 文件不存在
{"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}在 sharkd 会话期间为 frame 设置注释,即 PCAPNG 文件不会被修改,因此该注释不会持久保存。
| 名称 | 值 | 类型 | M/O | req | "setcomment" | string | M | frame | 设置注释的 frame | integer | M | comment | 注释文本 | string | O
M/O:M = 必填,O = 可选
| 名称 | 值 | 类型 | err | 错误代码 | integer
错误代码:
| 错误代码 | 说明 | 0 | 操作成功
{"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 ...在 sharkd 会话期间设置 preference,即 preference 文件不会被修改,因此该设置不会持久保存。
| 名称 | 值 | 类型 | M/O | req | "setconf" | string | M | name | preference 的名称 | string | M | value | preference 的新值 | 根据需要 | M
M/O:M = 必填,O = 可选
| 名称 | 值 | 类型 | err | 错误代码 | integer
错误代码:
| 错误代码 | 说明 | 0 | 操作成功
{"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}}}{"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}}}获取已加载文件的基本信息(名称、大小、frame 数量等)。
| 名称 | 值 | 类型 | M/O | req | "status" | string | M
M/O:M = 必填,O = 可选
| 名称 | 值 | 类型 | frames | 当前已加载 frames 的计数 | integer | duration | 第一个 frame 的时间与最后一个已加载 frame 的时间之间的差值 | number | filename | Capture 文件名——仅在文件已加载时存在 | string | filesize | Capture 文件大小——仅在文件已加载时存在 | integer
{"req":"status"}{"frames":53882,"duration":1841.532335000,"filename":"web01_00001_20161012151754.pcapng","filesize":36433896}设置最多 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 会产生大量数据。
{"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}