我正在创建一个工作系统,我将在多个位置安装VMS,并且我将有一个中央页面,您可以在其中输入IP,它将从远程的所有MTRS中取出转储结果。
我认为实现这一目标的最佳方法是调用远程服务器上的一个页面,该页面将启动MTR,然后在Json中提供结果,
我遇到的问题是如何将MTR中的不同值和指标分解为JSON数组中的不同对象。我考虑过正则表达式,但我觉得这必须是更好的方法。 ALl帮助表示赞赏。
示例MTR供讨论。
Start: Fri Apr 21 01:56:17 2017
HOST: MTR-DC08 Loss% Snt Last Avg Best Wrst StDev
1.|-- dc03r04ds36.scalabledns.com 0.0% 10 0.1 0.1 0.1 0.1 0.0
2.|-- dc08mx01.scalabledns.com 0.0% 10 0.8 1.1 0.8 2.0 0.0
3.|-- enzu.com-gw.lax.ip4.zayo.com 0.0% 10 0.8 1.2 0.8 2.6 0.5
4.|-- ae16.cr1.lax112.us.zip.zayo.com 0.0% 10 1.0 1.4 1.0 2.5 0.3
5.|-- ae9.mpr1.lax12.us.zip.zayo.com 0.0% 10 1.0 1.0 1.0 1.2 0.0
6.|-- ae7.edge2.LosAngles.Level3.net 0.0% 10 1.0 1.6 0.9 6.8 1.7
7.|-- ae-1-60.edge3.LosAngeles1.Level3.net 0.0% 10 1.1 2.8 1.1 9.1 2.6
8.|-- a.resolvers.level3.net 0.0% 10 1.0 1.0 1.0 1.1 0.0
答案 0 :(得分:0)
如果在mtr命令上传递-j
标志或--json
,则输出将为JSON。不需要正则表达式。
$: mtr -j 8.8.8.8
{"report": {
"mtr": {
"src": "me",
"dst": "8.8.8.8",
"tos": "0x0",
"psize": "64",
"bitpattern": "0x00",
"tests": "10"
},
"hubs": [{
"count": "1",
"host": "???",
"Loss%": 0.00,
"Snt": 10,
"Last": 1.58,
"Avg": 19.83,
"Best": 1.48,
"Wrst": 183.60,
"StDev": 57.54
},
[...]
{
"count": "10",
"host": "google-public-dns-a.google.com",
"Loss%": 0.00,
"Snt": 10,
"Last": 32.19,
"Avg": 31.02,
"Best": 25.18,
"Wrst": 55.12,
"StDev": 8.87
}]
}}
请参阅手册页以获取所有支持的选项:https://www.mankier.com/8/mtr#-j
在具有多路径路由的更复杂环境中,您可能需要考虑 Dublin Traceroute (https://dublin-traceroute.net)而不是mtr。同样,输出是JSON,所以它应该让你很容易解析啤酒花。