コンソールから利用できるネットワークモニタリングツール『Mylg』

別件の調べものをしてたところ、コンソールで利用できるネットワークモニタリングツール『Mylg』というものを見かけたので、少し触ってみることにした(Githubはこちら)。
とりあえず、イメージをつかむなら公式サイトの動画を見るとよさそう。で、見る限り結構便利そうな印象だ。専用コンソールに入って操作するようだけど、かなり扱いやすそうな感じ。

見ててなんとなく予想がついたかもしれないが、Golangで記述されたツールのようだ。
一応、Mac用のパッケージもCentOSなど用のrpmファイルも提供されているようなのだが、今回はUbuntu Server 16.04 LTSにこのツールをインストールして使ってみる。

1.インストール

まず、以下のコマンドでインストールする。

sudo apt-get install libpcap-dev golang
curl -O http://mylg.io/dl/linux/mylg.amd64.deb && sudo dpkg -i mylg.amd64.deb

これでインストールが完了した。

2.使ってみる

インストールが完了したので、さっそく使ってみよう。
ユーザガイドを見る限り、結構機能があるようなのでいくつか抜粋して使ってみる。

基本的には、まず以下のコマンドでmylgのコンソールに入り、その中でコマンドを実行していく使い方になるようだ。

mylg

2-1.tracerouteをしてみる

コマンド「trace」を実行することで、対象のホストへのtracerouteを行うことができる。

local> trace orebibou.com
trace route to orebibou.com (157.112.152.17), 30 hops max
Get https://stat.ripe.net/data/prefix-overview/data.json?max_related=50&resource=172.28.0.1: net/http: TLS handshake timeout
1  XXX.XXX.XXX.1 0.664 ms 0.801 ms 0.784 ms
2  XXX.XXX.XXX.1 1.077 ms 1.026 ms 1.019 ms
3  r641.tokynt01.ap.so-net.ne.jp. (202.223.117.182) [ASN 2527/SO-NET] 5.503 ms 5.576 ms 6.062 ms
4  maru-02Gi2-9.net.so-net.ne.jp. (202.223.117.181) [ASN 2527/SO-NET] 4.690 ms 4.601 ms 5.344 ms
5  ote-gw7Ae7.net.so-net.ne.jp. (202.213.193.33) [ASN 2527/SO-NET] 5.199 ms 4.791 ms 5.692 ms
6  202.213.193.35 [ASN 2527/SO-NET] 11.180 ms 12.899 ms 13.514 ms
7  tkort2-as2527-10g.bb.sakura.ad.jp. (157.17.131.17) 13.757 ms 15.680 ms 16.418 ms
8  tkwrt1s-ort2.bb.sakura.ad.jp. (157.17.130.26) 8.959 ms 13.193 ms 12.924 ms
9  tkwrt3-wrt1s.bb.sakura.ad.jp. (59.106.247.118) 13.231 ms 9.872 ms 8.734 ms
10 157.17.131.246 16.936 ms 20.237 ms 16.301 ms
11 osnrt1s-nrt3-2.bb.sakura.ad.jp. (157.17.146.162) 14.881 ms 16.747 ms 18.039 ms
12 osnrt1b-nrt1s.bb.sakura.ad.jp. (157.17.146.138) 14.099 ms 17.479 ms 21.093 ms
13 osnrt3c-nrt1b.bb.sakura.ad.jp. (157.17.147.2) 26.285 ms 23.220 ms 20.478 ms
14 210.188.211.188 [ASN 9371/SAKURA-C] 13.934 ms 14.521 ms 13.187 ms
15 sv916.xserver.jp. (157.112.152.17) [ASN 9371/SAKURA-C] 12.231 ms 12.665 ms 12.197 ms

このとき、「-r」オプションを付与することでリアルタイムでの監視ができるようだ。
「1」「2」キーで表示を切り替えることができる。

2-2.パケットキャプチャをしてみる

コマンド「dump」でパケットキャプチャを行える。
オプションはtcpdumpに似ているので、tcpdumpの使い方がわかってればすぐに使いこなせそうだ。

地味に便利な機能として、「-s」オプションで指定したキーワードを含むパケットのみを抽出できる。
以下は、「orebibou」というキーワードを持つパケットのみ監視した結果。

local> dump -i eth0 -x -s orebibou
Interface: eth0, capture size: 6144 bytes
21:43:39.396 IPv4/TCP BS-PUB-UBUNTU-01.BLACKNON.LOCAL.:47768 > sv916.xserver.jp.:80(http) [P.], win 229, len: 76
00000000 47 45 54 20 2f 20 48 54 54 50 2f 31 2e 31 0d 0a |GET / HTTP/1.1..|
00000010 48 6f 73 74 3a 20 6f 72 65 62 69 62 6f 75 2e 63 |Host: orebibou.c|
00000020 6f 6d 0d 0a 55 73 65 72 2d 41 67 65 6e 74 3a 20 |om..User-Agent: |
00000030 63 75 72 6c 2f 37 2e 34 37 2e 30 0d 0a 41 63 63 |curl/7.47.0..Acc|
00000040 65 70 74 3a 20 2a 2f 2a 0d 0a 0d 0a             |ept: */*....    |

21:43:39.422 IPv4/TCP sv916.xserver.jp.:80(http) > BS-PUB-UBUNTU-01.BLACKNON.LOCAL.:47768 [P.], win 46, len: 504
00000000 48 54 54 50 2f 31 2e 31 20 33 30 31 20 4d 6f 76 |HTTP/1.1 301 Mov|
00000010 65 64 20 50 65 72 6d 61 6e 65 6e 74 6c 79 0d 0a |ed Permanently..|
00000020 44 61 74 65 3a 20 57 65 64 2c 20 31 32 20 4f 63 |Date: Wed, 12 Oc|
00000030 74 20 32 30 31 36 20 31 32 3a 34 33 3a 33 39 20 |t 2016 12:43:39 |
00000040 47 4d 54 0d 0a 53 65 72 76 65 72 3a 20 41 70 61 |GMT..Server: Apa|
00000050 63 68 65 0d 0a 4c 6f 63 61 74 69 6f 6e 3a 20 68 |che..Location: h|
00000060 74 74 70 73 3a 2f 2f 6f 72 65 62 69 62 6f 75 2e |ttps://orebibou.|
00000070 63 6f 6d 2f 0d 0a 43 61 63 68 65 2d 43 6f 6e 74 |com/..Cache-Cont|
00000080 72 6f 6c 3a 20 6d 61 78 2d 61 67 65 3d 31 0d 0a |rol: max-age=1..|
00000090 45 78 70 69 72 65 73 3a 20 57 65 64 2c 20 31 32 |Expires: Wed, 12|
000000a0 20 4f 63 74 20 32 30 31 36 20 31 32 3a 34 33 3a | Oct 2016 12:43:|
000000b0 34 30 20 47 4d 54 0d 0a 56 61 72 79 3a 20 41 63 |40 GMT..Vary: Ac|
000000c0 63 65 70 74 2d 45 6e 63 6f 64 69 6e 67 0d 0a 43 |cept-Encoding..C|
000000d0 6f 6e 74 65 6e 74 2d 4c 65 6e 67 74 68 3a 20 32 |ontent-Length: 2|
000000e0 32 39 0d 0a 43 6f 6e 74 65 6e 74 2d 54 79 70 65 |29..Content-Type|
000000f0 3a 20 74 65 78 74 2f 68 74 6d 6c 3b 20 63 68 61 |: text/html; cha|
00000100 72 73 65 74 3d 69 73 6f 2d 38 38 35 39 2d 31 0d |rset=iso-8859-1.|
00000110 0a 0d 0a 3c 21 44 4f 43 54 59 50 45 20 48 54 4d |...<!DOCTYPE HTM|
00000120 4c 20 50 55 42 4c 49 43 20 22 2d 2f 2f 49 45 54 |L PUBLIC "-//IET|
00000130 46 2f 2f 44 54 44 20 48 54 4d 4c 20 32 2e 30 2f |F//DTD HTML 2.0/|
00000140 2f 45 4e 22 3e 0a 3c 68 74 6d 6c 3e 3c 68 65 61 |/EN">.<html><hea|
00000150 64 3e 0a 3c 74 69 74 6c 65 3e 33 30 31 20 4d 6f |d>.<title>301 Mo|
00000160 76 65 64 20 50 65 72 6d 61 6e 65 6e 74 6c 79 3c |ved Permanently<|
00000170 2f 74 69 74 6c 65 3e 0a 3c 2f 68 65 61 64 3e 3c |/title>.</head><|
00000180 62 6f 64 79 3e 0a 3c 68 31 3e 4d 6f 76 65 64 20 |body>.<h1>Moved |
00000190 50 65 72 6d 61 6e 65 6e 74 6c 79 3c 2f 68 31 3e |Permanently</h1>|
000001a0 0a 3c 70 3e 54 68 65 20 64 6f 63 75 6d 65 6e 74 |.<p>The document|
000001b0 20 68 61 73 20 6d 6f 76 65 64 20 3c 61 20 68 72 | has moved <a hr|
000001c0 65 66 3d 22 68 74 74 70 73 3a 2f 2f 6f 72 65 62 |ef="https://oreb|
000001d0 69 62 6f 75 2e 63 6f 6d 2f 22 3e 68 65 72 65 3c |ibou.com/">here<|
000001e0 2f 61 3e 2e 3c 2f 70 3e 0a 3c 2f 62 6f 64 79 3e |/a>.</p>.</body>|
000001f0 3c 2f 68 74 6d 6c 3e 0a                         |</html>.|

このキーワードサーチだけでもかなり便利な気がする。

2-3.dig+traceをしてみる

digを行い、名前解決について確認する。
NSやMXレコードなど、デフォルトで一発出力してくれるらしい。

local> dig orebibou.com
Trying to query server: 172.28.0.1  your local dns server
;; opcode: QUERY, status: NOERROR, id: 41176
;; flags: qr rd ra;
orebibou.com.   21599   IN      NS      ns2.xserver.jp.
orebibou.com.   21599   IN      NS      ns1.xserver.jp.
orebibou.com.   21599   IN      SOA     ns1.xserver.jp. root.sv0.xserver.jp. 0 10800 3600 604800 3600
orebibou.com.   21599   IN      NS      ns3.xserver.jp.
orebibou.com.   21599   IN      A       157.112.152.17
orebibou.com.   21599   IN      NS      ns4.xserver.jp.
orebibou.com.   21599   IN      NS      ns5.xserver.jp.
orebibou.com.   21599   IN      MX      0 orebibou.com.
;; Query time: 112 ms

;; CHAOS CLASS BIND
version.bind.   0       CH      TXT     "dnsmasq-2.55"

ただ、それよりも注目したいのが「+trace」サブオプション。
どうも名前解決をtraceしてくれてるようだ。状況によっては地味に便利そうな機能だ。

local> dig orebibou.com +trace
.       6439    IN      NS      d.root-servers.net.
.       6439    IN      NS      m.root-servers.net.
.       6439    IN      NS      b.root-servers.net.
.       6439    IN      NS      e.root-servers.net.
.       6439    IN      NS      a.root-servers.net.
.       6439    IN      NS      f.root-servers.net.
.       6439    IN      NS      h.root-servers.net.
.       6439    IN      NS      j.root-servers.net.
.       6439    IN      NS      k.root-servers.net.
.       6439    IN      NS      g.root-servers.net.
.       6439    IN      NS      l.root-servers.net.
.       6439    IN      NS      c.root-servers.net.
.       6439    IN      NS      i.root-servers.net.
from: XXX.XXX.XXX.1#53 in 5 ms
com.    172800  IN      NS      a.gtld-servers.net.
com.    172800  IN      NS      j.gtld-servers.net.
com.    172800  IN      NS      g.gtld-servers.net.
com.    172800  IN      NS      k.gtld-servers.net.
com.    172800  IN      NS      f.gtld-servers.net.
com.    172800  IN      NS      c.gtld-servers.net.
com.    172800  IN      NS      i.gtld-servers.net.
com.    172800  IN      NS      d.gtld-servers.net.
com.    172800  IN      NS      l.gtld-servers.net.
com.    172800  IN      NS      m.gtld-servers.net.
com.    172800  IN      NS      e.gtld-servers.net.
com.    172800  IN      NS      b.gtld-servers.net.
com.    172800  IN      NS      h.gtld-servers.net.
from: d.root-servers.net.#53 in 85 ms
orebibou.com.   172800  IN      NS      ns1.xserver.jp.
orebibou.com.   172800  IN      NS      ns2.xserver.jp.
orebibou.com.   172800  IN      NS      ns3.xserver.jp.
orebibou.com.   172800  IN      NS      ns4.xserver.jp.
orebibou.com.   172800  IN      NS      ns5.xserver.jp.
from: a.gtld-servers.net.#53 in 114 ms
orebibou.com.   86400   IN      SOA     ns1.xserver.jp. root.sv0.xserver.jp. 0 10800 3600 604800 3600
orebibou.com.   86400   IN      MX      0 orebibou.com.
orebibou.com.   86400   IN      NS      ns1.xserver.jp.
orebibou.com.   86400   IN      NS      ns4.xserver.jp.
orebibou.com.   86400   IN      NS      ns3.xserver.jp.
orebibou.com.   86400   IN      A       157.112.152.17
orebibou.com.   86400   IN      NS      ns5.xserver.jp.
orebibou.com.   86400   IN      NS      ns2.xserver.jp.
from: ns1.xserver.jp.#53 in 13 ms

2-4.LAN内で使われているIPアドレスを調べる

前にこちらで、LAN内で利用されているIPアドレスの調査方法について記述したことがあるが、その機能も持っている。
コマンド「disc」で、使われているすべてのインターフェイスが接続しているネットワークのIPアドレスを抽出してくる。
こちらも、地味にキーワードサーチ機能がついているようだ(「disc キーワード」で検索できる)。

2-5.ポートスキャン、IPアドレスの所有者確認を行う

「scan」コマンドで、対象ホストに対しポートスキャンを実施することができる。

local> scan BS-PUB-CENT7-01
+----------+------+--------+-------------+
| PROTOCOL | PORT | STATUS | DESCRIPTION |
+----------+------+--------+-------------+
| TCP      |   22 | Open   |             |
+----------+------+--------+-------------+
Scan done: 1 opened port(s) found in 2.051 seconds
local> scan google.co.jp
+----------+------+--------+-------------+
| PROTOCOL | PORT | STATUS | DESCRIPTION |
+----------+------+--------+-------------+
| TCP      |   80 | Open   |             |
| TCP      |  443 | Open   |             |
+----------+------+--------+-------------+
Scan done: 2 opened port(s) found in 2.039 seconds

IPアドレスの所有者を確認する場合は、「whois」コマンドを実行する。

local> whois 8.8.8.8
+------------+-------+--------------------------+
|   PREFIX   |  ASN  |          HOLDER          |
+------------+-------+--------------------------+
| 8.8.8.0/24 | 15169 | GOOGLE - Google Inc., US |
+------------+-------+--------------------------+

その他、hpingやnms、peeringなどいろいろなコマンドがそろっている。
これ一個で大体のことができると考えると、だいぶよさげなツールではなかろうか。
一応、「mylg」コマンドの後ろに内部コマンドを入れることでそのまま実行できるので、他のコマンドとパイプでつなげて実行するのにも困らない。

blacknon@BS-PUB-UBUNTU-01:~$ mylg dig orebibou.com
Trying to query server: 172.28.0.1  your local dns server
;; opcode: QUERY, status: NOERROR, id: 39603
;; flags: qr rd ra;
orebibou.com.   21599   IN      NS      ns3.xserver.jp.
orebibou.com.   21599   IN      SOA     ns1.xserver.jp. root.sv0.xserver.jp. 0 10800 3600 604800 3600
orebibou.com.   21599   IN      NS      ns5.xserver.jp.
orebibou.com.   21599   IN      MX      0 orebibou.com.
orebibou.com.   21599   IN      NS      ns4.xserver.jp.
orebibou.com.   21599   IN      A       157.112.152.17
orebibou.com.   21599   IN      NS      ns1.xserver.jp.
orebibou.com.   21599   IN      NS      ns2.xserver.jp.
;; Query time: 103 ms

;; CHAOS CLASS BIND
version.bind.   0       CH      TXT     "dnsmasq-2.55"