使用php

时间:2017-04-21 03:36:29

标签: php json regex

我正在创建一个工作系统,我将在多个位置安装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

1 个答案:

答案 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,所以它应该让你很容易解析啤酒花。