Giter VIP home page Giter VIP logo

mylg's Introduction

Build Status Go Report Card Gitter GORef

IMAGE

myLG, Command line Network Diagnostic Tool

myLG is an open source software utility which combines the functions of the different network probes in one network diagnostic tool.

Features

  • Popular looking glasses (ping/trace/bgp): Telia, Level3, NTT, Cogent, KPN
  • More than 200 countries DNS Lookup information
  • Local ping and real-time trace route
  • Packet analyzer - TCP/IP and other packets
  • Quick NMS (network management system)
  • Local HTTP/HTTPS ping (GET, POST, HEAD)
  • RIPE information (ASN, IP/CIDR)
  • PeeringDB information
  • Port scanning
  • Network LAN Discovery
  • Internet Speed Test
  • Web dashboard
  • Configurable options
  • Direct access to commands from shell
  • Support vi and emacs mode, almost all basic features
  • CLI auto complete and history features

Demo

IMAGE Demo

IMAGE ALT TEXT HERE IMAGE ALT TEXT HERE IMAGE ALT TEXT HERE IMAGE ALT TEXT HERE

Usage

=================================================
                          _    ___
                _ __ _  _| |  / __|
               | '  \ || | |_| (_ |
               |_|_|_\_, |____\___|
                      |__/

                 My Looking Glass
           Free Network Diagnostic Tool
             www.facebook.com/mylg.io
                  http://mylg.io
================== myLG v0.2.6 ==================

local> hping https://www.google.com -trace -c 4
HPING www.google.com (216.58.194.196), Method: HEAD, DNSLookup: 17.2923 ms
HTTP Response seq=0, proto=HTTP/1.1, status=200, time=183.097 ms, connection=34.789 ms, first byte read=148.167 ms
HTTP Response seq=1, proto=HTTP/1.1, status=200, time=164.960 ms, connection=27.764 ms, first byte read=137.096 ms
HTTP Response seq=2, proto=HTTP/1.1, status=200, time=153.559 ms, connection=27.881 ms, first byte read=125.526 ms
HTTP Response seq=3, proto=HTTP/1.1, status=200, time=164.309 ms, connection=28.904 ms, first byte read=135.296 ms

--- www.google.com HTTP ping statistics --- 
4 requests transmitted, 4 replies received, 0% requests failed
HTTP Round-trip min/avg/max = 153.56/164.05/183.10 ms
HTTP Code [200] responses : [████████████████████] 100.00% 
 
local> whois 577
BACOM - Bell Canada, CA
+--------------------+-----------+
|      LOCATION      | COVERED % |
+--------------------+-----------+
| Canada - ON        |   61.3703 |
| Canada             |   36.2616 |
| Canada - QC        |    1.3461 |
| United States - MA |    0.7160 |
| Canada - BC        |    0.1766 |
| Canada - AB        |    0.0811 |
| United States      |    0.0195 |
| United States - NJ |    0.0143 |
| Belgium            |    0.0048 |
| United States - NC |    0.0048 |
| United States - TX |    0.0048 |
| Canada - NB        |    0.0000 |
| Canada - NS        |    0.0000 |
+--------------------+-----------+

local> scan www.google.com -p 1-500
+----------+------+--------+-------------+
| PROTOCOL | PORT | STATUS | DESCRIPTION |
+----------+------+--------+-------------+
| TCP      |   80 | Open   |             |
| TCP      |  443 | Open   |             |
+----------+------+--------+-------------+
Scan done: 2 opened port(s) found in 5.605 seconds

lg/telia/los angeles> bgp 8.8.8.0/24
Telia Carrier Looking Glass - show route protocol bgp 8.8.8.0/24 table inet.0

Router: Los Angeles

Command: show route protocol bgp 8.8.8.0/24 table inet.0

inet.0: 661498 destinations, 5564401 routes (657234 active, 509 holddown, 194799 hidden)
+ = Active Route, - = Last Active, * = Both

8.8.8.0/24         *[BGP/170] 33w0d 01:36:06, MED 0, localpref 200
                      AS path: 15169 I, validation-state: unverified
                    > to 62.115.36.170 via ae4.0
                    [BGP/170] 8w3d 11:19:40, MED 0, localpref 200, from 80.91.255.95
                      AS path: 15169 I, validation-state: unverified
                      to 62.115.119.84 via xe-1/1/0.0
                      to 62.115.119.88 via xe-1/2/0.0
                      to 62.115.119.90 via xe-11/0/3.0
                      to 62.115.119.102 via xe-9/0/0.0
                      to 62.115.119.92 via xe-9/0/2.0
                    > to 62.115.119.86 via xe-9/1/2.0
                      to 62.115.119.98 via xe-9/2/2.0
                      to 62.115.119.100 via xe-9/2/3.0
                      to 62.115.119.94 via xe-9/3/1.0
                      to 62.115.119.96 via xe-9/3/3.0

ns/united states/redwood city> dig yahoo.com
Trying to query server: 204.152.184.76 united states redwood city
;; opcode: QUERY, status: NOERROR, id: 19850
;; flags: qr rd ra;
yahoo.com.	728	IN	MX	1 mta6.am0.yahoodns.net.
yahoo.com.	728	IN	MX	1 mta5.am0.yahoodns.net.
yahoo.com.	728	IN	MX	1 mta7.am0.yahoodns.net.
yahoo.com.	143013	IN	NS	ns4.yahoo.com.
yahoo.com.	143013	IN	NS	ns6.yahoo.com.
yahoo.com.	143013	IN	NS	ns2.yahoo.com.
yahoo.com.	143013	IN	NS	ns5.yahoo.com.
yahoo.com.	143013	IN	NS	ns1.yahoo.com.
yahoo.com.	143013	IN	NS	ns3.yahoo.com.

;; ADDITIONAL SECTION:
ns1.yahoo.com.	561456	IN	A	68.180.131.16
ns2.yahoo.com.	27934	IN	A	68.142.255.16
ns3.yahoo.com.	532599	IN	A	203.84.221.53
ns4.yahoo.com.	532599	IN	A	98.138.11.157
ns5.yahoo.com.	532599	IN	A	119.160.247.124
ns6.yahoo.com.	143291	IN	A	121.101.144.139
ns1.yahoo.com.	51624	IN	AAAA	2001:4998:130::1001
ns2.yahoo.com.	51624	IN	AAAA	2001:4998:140::1002
ns3.yahoo.com.	51624	IN	AAAA	2406:8600:b8:fe03::1003
ns6.yahoo.com.	143291	IN	AAAA	2406:2000:108:4::1006
;; Query time: 1204 ms

;; CHAOS CLASS BIND
version.bind.	0	CH	TXT	"9.10.4-P1"
hostname.bind.	0	CH	TXT	"fred.isc.org"

local> peering 6327
The data provided from www.peeringdb.com
+-------------------+---------------+---------------+--------------------+------+
|       NAME        |    TRAFFIC    |     TYPE      |      WEB SITE      | NOTE |
+-------------------+---------------+---------------+--------------------+------+
| Shaw Cablesystems | 500-1000 Gbps | Cable/DSL/ISP | http://www.shaw.ca |      |
+-------------------+---------------+---------------+--------------------+------+
+------------------+--------+--------+-----------------+-------------------------+
|       NAME       | STATUS | SPEED  |    IPV4 ADDR    |        IPV6 ADDR        |
+------------------+--------+--------+-----------------+-------------------------+
| Equinix Ashburn  | ok     |  20000 | 206.126.236.20  | 2001:504:0:2::6327:1    |
| Equinix Ashburn  | ok     |  20000 | 206.223.115.20  |                         |
| Equinix Chicago  | ok     |  30000 | 206.223.119.20  | 2001:504:0:4::6327:1    |
| Equinix San Jose | ok     |  30000 | 206.223.116.20  | 2001:504:0:1::6327:1    |
| Equinix Seattle  | ok     |  20000 | 198.32.134.4    | 2001:504:12::4          |
| Equinix New York | ok     |  10000 | 198.32.118.16   | 2001:504:f::10          |
| SIX Seattle      | ok     | 100000 | 206.81.80.54    | 2001:504:16::18b7       |
| NYIIX            | ok     |  20000 | 198.32.160.86   | 2001:504:1::a500:6327:1 |
| TorIX            | ok     |  10000 | 206.108.34.12   |                         |
| PIX Vancouver    | ok     |  10000 | 206.223.127.2   |                         |
| PIX Toronto      | ok     |   1000 | 206.223.127.132 |                         |
| Equinix Toronto  | ok     |  10000 | 198.32.181.50   | 2001:504:d:80::6327:1   |
+------------------+--------+--------+-----------------+-------------------------+

local> disc
Network LAN Discovery
+--------------+-------------------+------+-----------+-------------------+
|      IP      |        MAC        | HOST | INTERFACE | ORGANIZATION NAME |
+--------------+-------------------+------+-----------+-------------------+
| 172.16.0.0   | ff:ff:ff:ff:ff:ff | NA   | en0       | NA                |
| 172.16.1.1   | e4:8d:8c:7a:66:26 | NA   | en0       | Routerboard.com   |
| 172.16.1.10  | ac:bc:32:b4:33:23 | NA   | en0       | Apple, Inc.       |
| 172.16.1.205 | 74:e5:b:97:11:28  | NA   | en0       | NA                |
| 172.16.1.254 | 54:4a:0:33:b4:2f  | NA   | en0       | NA                |
| 172.16.2.12  | d4:f4:6f:7b:8f:cf | NA   | en0       | Apple, Inc.       |
| 172.16.2.13  | 5c:ad:cf:23:7:f9  | NA   | en0       | Apple, Inc.       |
| 172.16.2.111 | d0:a6:37:72:cf:2d | NA   | en0       | Apple, Inc.       |
| 192.168.33.0 | ff:ff:ff:ff:ff:ff | NA   | vboxnet0  | NA                |
| 192.168.33.1 | a:0:27:0:0:0      | NA   | vboxnet0  | NA                |
| 224.0.0.251  | 1:0:5e:0:0:fb     | NA   | en0       | NA                |
+--------------+-------------------+------+-----------+-------------------+
11 host(s) has been found

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

local> dump -d
+----------+-------------------+--------+-------+--------------------------------+-----------+-----------+--------------+----------+
|   NAME   |        MAC        | STATUS |  MTU  |          IP ADDRESSES          | MULTICAST | BROADCAST | POINTTOPOINT | LOOPBACK |
+----------+-------------------+--------+-------+--------------------------------+-----------+-----------+--------------+----------+
| lo0      |                   | UP     | 16384 | 127.0.0.1/8 ::1/128 fe80::1/64 | ✓         |           |              | ✓        |
| gif0     |                   | DOWN   |  1280 |                                | ✓         |           | ✓            |          |
| stf0     |                   | DOWN   |  1280 |                                |           |           |              |          |
| en0      | ac:bc:32:b4:33:23 | UP     |  1500 | fe80::181b:3d55:e9a2:e3df/64   | ✓         | ✓         |              |          |
|          |                   |        |       | 192.168.0.103/24               |           |           |              |          |
| p2p0     | 0e:bc:32:b4:33:23 | UP     |  2304 |                                | ✓         | ✓         |              |          |
| awdl0    | ee:3a:98:da:44:5c | UP     |  1484 | fe80::ec3a:98ff:feda:445c/64   | ✓         | ✓         |              |          |
| en1      | 4a:00:03:9c:8d:60 | UP     |  1500 |                                |           | ✓         |              |          |
| en2      | 4a:00:03:9c:8d:61 | UP     |  1500 |                                |           | ✓         |              |          |
| bridge0  | 4a:00:03:9c:8d:60 | UP     |  1500 |                                | ✓         | ✓         |              |          |
| utun0    |                   | UP     |  2000 | fe80::ec23:f621:ae74:5271/64   | ✓         |           | ✓            |          |
| utun1    |                   | UP     |  1380 | fe80::d187:7734:49d9:9d84/64   | ✓         |           | ✓            |          |
| vboxnet0 | 0a:00:27:00:00:00 | DOWN   |  1500 |                                | ✓         | ✓         |              |          |
+----------+-------------------+--------+-------+--------------------------------+-----------+-----------+--------------+----------+

local> dump 
20:29:36.415 IPv4/TCP  ec2-52-73-80-145.compute-1.amazonaws.com.:443(https) > 192.168.0.104:61479 [P.], win 166, len: 33
20:29:36.416 IPv4/TCP  192.168.0.104:61479 > ec2-52-73-80-145.compute-1.amazonaws.com.:443(https) [.], win 4094, len: 0
20:29:36.417 IPv4/TCP  192.168.0.104:61479 > ec2-52-73-80-145.compute-1.amazonaws.com.:443(https) [P.], win 4096, len: 37
20:29:36.977 IPv4/UDP  192.168.0.104:62733 > 192.168.0.1:53(domain) , len: 0
20:29:37.537 IPv4/TCP  ec2-54-86-120-119.compute-1.amazonaws.com.:443(https) > 192.168.0.104:61302 [.], win 124, len: 0
20:29:38.125 IPv4/TCP  192.168.0.104:61304 > ec2-52-23-213-161.compute-1.amazonaws.com.:443(https) [P.], win 4096, len: 85
20:29:38.126 IPv4/TCP  ec2-52-23-213-161.compute-1.amazonaws.com.:443(https) > 192.168.0.104:61304 [.], win 1048, len: 0
20:29:38.760 IPv4/TCP  ec2-54-165-12-100.compute-1.amazonaws.com.:443(https) > 192.168.0.104:61296 [.], win 2085, len: 0
20:29:39.263 IPv4/ICMP 192.168.0.104 > ir1.fp.vip.ne1.yahoo.com.: EchoRequest id 20859, seq 27196, len: 56
20:29:39.265 IPv4/UDP  192.168.0.1:53(domain) > 192.168.0.104:62733 , len: 0

local> dump tcp and port 443 -c 10
23:26:56.026 IPv4/TCP  192.168.0.104:64686 > 192.0.80.242:443(https) [F.], win 8192, len: 0
23:26:56.045 IPv4/TCP  192.168.0.104:64695 > i2.wp.com.:443(https) [F.], win 8192, len: 0
23:26:56.048 IPv4/TCP  i2.wp.com.:443(https) > 192.168.0.104:64695 [F.], win 62, len: 0
23:26:56.081 IPv4/TCP  192.168.0.104:63692 > ec2-54-88-144-213.compute-1.amazonaws.com.:443(https) [P.], win 4096, len: 37
23:26:56.082 IPv4/TCP  192.168.0.104:64695 > i2.wp.com.:443(https) [.], win 8192, len: 0
23:26:56.083 IPv4/TCP  192.0.80.242:443(https) > 192.168.0.104:64686 [.], win 64, len: 0
23:26:56.150 IPv4/TCP  ec2-54-88-144-213.compute-1.amazonaws.com.:443(https) > 192.168.0.104:63692 [.], win 166, len: 0
23:26:56.259 IPv4/TCP  ec2-54-172-56-148.compute-1.amazonaws.com.:443(https) > 192.168.0.104:63623 [P.], win 1316, len: 85
23:26:56.260 IPv4/TCP  192.168.0.104:63623 > ec2-54-172-56-148.compute-1.amazonaws.com.:443(https) [.], win 4093, len: 0
23:26:56.820 IPv4/TCP  192.168.0.104:64691 > 192.30.253.116:443(https) [.], win 4096, len: 0

local> dump -s http -x
22:10:15.770 IPv4/TCP  151.101.44.143:443(https) > 10.0.9.9:50771 [P.], win 59, len: 156
00000000  16 03 03 00 64 02 00 00  60 03 03 a2 32 19 4b 78  |....d...`...2.Kx|
00000010  77 ed 40 75 f6 4c 55 74  43 1d b7 6c f2 59 f8 d8  |[email protected]..|
00000020  09 8a 3e 03 62 56 38 45  d2 bc 02 20 bd 52 8a 42  |..>.bV8E... .R.B|
00000030  5b 01 33 7d 2b 0b 41 da  eb 38 87 79 f1 37 62 5c  |[.3}+.A..8.y.7b\|
00000040  f3 ed 5a 7c 07 6c e9 28  9b fe fa 76 c0 2f 00 00  |..Z|.l.(...v./..|
00000050  18 ff 01 00 01 00 00 05  00 00 00 10 00 0b 00 09  |................|
00000060  08 68 74 74 70 2f 31 2e  31 14 03 03 00 01 01 16  |.http/1.1.......|
00000070  03 03 00 28 fc 20 2d 6f  1a 94 78 53 55 0f 8c 05  |...(. -o..xSU...|
00000080  3e ae 12 34 79 af d2 a9  bd 22 e5 3f b1 2b f5 36  |>..4y....".?.+.6|
00000090  ba 51 31 37 f5 0b e6 d2  40 fb 88 a5              |.Q17....@...    |

local> dump !udp -w /home/user1/mypcap -c 100000

local> ping google.com -6
PING google.com (2607:f8b0:400b:80a::200e): 56 data bytes
64 bytes from 2607:f8b0:400b:80a::200e icmp_seq=0 time=23.193988 ms
64 bytes from 2607:f8b0:400b:80a::200e icmp_seq=1 time=21.265492 ms
64 bytes from 2607:f8b0:400b:80a::200e icmp_seq=2 time=24.521306 ms
64 bytes from 2607:f8b0:400b:80a::200e icmp_seq=3 time=25.313072 ms

local> trace google.com
trace route to google.com (172.217.4.142), 30 hops max
1  192.168.0.1 4.705 ms 1.236 ms 0.941 ms 
2  142.254.236.25 [ASN 20001/ROADRUNNER-WEST] 13.941 ms 13.504 ms 12.303 ms 
3  agg59.snmncaby01h.socal.rr.com. (76.167.31.241) [ASN 20001/ROADRUNNER-WEST] 14.834 ms 11.625 ms 13.050 ms 
4  agg20.lamrcadq01r.socal.rr.com. (72.129.10.128) [ASN 20001/ROADRUNNER-WEST] 17.617 ms 18.064 ms 15.612 ms 
5  agg28.lsancarc01r.socal.rr.com. (72.129.9.0) [ASN 20001/ROADRUNNER-WEST] 16.291 ms 24.079 ms 20.456 ms 
6  bu-ether26.lsancarc0yw-bcr00.tbone.rr.com. (66.109.3.230) [ASN 7843/TWCABLE-BACKBONE] 18.339 ms 23.278 ms 23.434 ms 
7  216.0.6.25 [ASN 2828/XO-AS15] 19.842 ms 21.025 ms 35.105 ms 
8  216.0.6.42 [ASN 2828/XO-AS15] 16.666 ms 18.252 ms 18.872 ms 
9  209.85.245.199 [ASN 15169/GOOGLE] 14.358 ms 17.478 ms 
   209.85.246.125 [ASN 15169/GOOGLE] 18.593 ms 
10 72.14.239.121 [ASN 15169/GOOGLE] 21.635 ms 
   72.14.238.213 [ASN 15169/GOOGLE] 16.133 ms 
   72.14.239.121 [ASN 15169/GOOGLE] 21.541 ms 
11 lax17s14-in-f14.1e100.net. (172.217.4.142) [ASN 15169/GOOGLE] 18.127 ms 17.151 ms 18.892 ms 

local> show config 
set ping     timeout    2s
set ping     interval   1s
set ping     count      4
set hping    timeout    2s
set hping    method     HEAD
set hping    data       mylg
set hping    count      5
set web      port       8080
set web      address    127.0.0.1
set scan     port       1-1024

local> set hping count 10

sh-3.2# mylg peering 577
The data provided from www.peeringdb.com
+----------------------+---------+------+--------------------+------+
|         NAME         | TRAFFIC | TYPE |      WEB SITE      | NOTE |
+----------------------+---------+------+--------------------+------+
| Bell Canada Backbone |         | NSP  | http://www.bell.ca |      |
+----------------------+---------+------+--------------------+------+
+-------------------+--------+-------+-----------------+------------------------+
|       NAME        | STATUS | SPEED |    IPV4 ADDR    |       IPV6 ADDR        |
+-------------------+--------+-------+-----------------+------------------------+
| Equinix Ashburn   | ok     | 20000 | 206.126.236.203 | 2001:504:0:2::577:1    |
| Equinix Chicago   | ok     | 20000 | 206.223.119.66  | 2001:504:0:4::577:1    |
| Equinix Palo Alto | ok     | 10000 | 198.32.176.94   | 2001:504:d::5e         |
| Equinix New York  | ok     | 10000 | 198.32.118.113  | 2001:504:f::577:1      |
| SIX Seattle       | ok     | 10000 | 206.81.80.217   | 2001:504:16::241       |
| NYIIX             | ok     | 10000 | 198.32.160.36   | 2001:504:1::a500:577:1 |
+-------------------+--------+-------+-----------------+------------------------+

local> nms
nms> connect core1-sjc
Connected: Juniper Networks, Inc. qfx10008 Ethernet Switch, kernel JUNOS 15.1X53 ...
nms/core1-sjc> show interface xe-.*
15 interfaces has been found
+--------------+---------+---------------------------------+------------+-------------+------------+-------------+------------+-------------+----------+-----------+
|  INTERFACE   | STATUS  |           DESCRIPTION           | TRAFFIC IN | TRAFFIC OUT | PACKETS IN | PACKETS OUT | DISCARD IN | DISCARD OUT | ERROR IN | ERROR OUT |
+--------------+---------+---------------------------------+------------+-------------+------------+-------------+------------+-------------+----------+-----------+
| xe-7/0/0:1   | Up      | RSW011-01-SJC-002               | 192.58 K   | 75.72 K     | 64.60      | 56.60       | 0.00       | 0.00        | 0.00     | 0.00      |
| xe-7/0/0:2   | Down    |                                 | 0.00       | 0.00        | 0.00       | 0.00        | 0.00       | 0.00        | 0.00     | 0.00      |
| xe-7/0/0:3   | Down    |                                 | 0.00       | 0.00        | 0.00       | 0.00        | 0.00       | 0.00        | 0.00     | 0.00      |
| xe-7/0/0:0   | Up      | RSW012-01-SJC-001               | 61.40 K    | 10.04 K     | 8.60       | 5.00        | 0.00       | 0.00        | 0.00     | 0.00      |
| xe-6/0/0:0   | Down    | CORE1-SAN-XE-2/2/0-AGGIPER40GLR | 0.00       | 0.00        | 0.00       | 0.00        | 0.00       | 0.00        | 0.00     | 0.00      |
| xe-6/0/0:1   | Down    |                                 | 0.00       | 0.00        | 0.00       | 0.00        | 0.00       | 0.00        | 0.00     | 0.00      |
| xe-6/0/0:2   | Down    |                                 | 0.00       | 0.00        | 0.00       | 0.00        | 0.00       | 0.00        | 0.00     | 0.00      |
| xe-6/0/0:3   | Down    |                                 | 0.00       | 0.00        | 0.00       | 0.00        | 0.00       | 0.00        | 0.00     | 0.00      |
| xe-6/0/1:0   | Up      | CORE1-SAN-XE-10/3/1-10GTEK      | 11.79 M    | 1.39 M      | 1.82 K     | 1.02 K      | 0.00       | 0.00        | 0.00     | 0.00      |
| xe-6/0/1:1   | Down    |                                 | 0.00       | 0.00        | 0.00       | 0.00        | 0.00       | 0.00        | 0.00     | 0.00      |
| xe-6/0/1:2   | Down    |                                 | 0.00       | 0.00        | 0.00       | 0.00        | 0.00       | 0.00        | 0.00     | 0.00      |
| xe-6/0/1:3   | Down    |                                 | 0.00       | 0.00        | 0.00       | 0.00        | 0.00       | 0.00        | 0.00     | 0.00      |
| xe-6/0/2:0   | Up      | CORE2-SJC-XE-1/2/0-AGG59        | 5.25 K     | 409.60      | 0.20       | 0.01        | 0.00       | 0.00        | 0.00     | 0.00      |
| xe-6/0/2:1   | Up      | CORE3-SJC-XE-1/3/0-AGG31        | 5.44 K     | 0.00        | 0.31       | 0.00        | 0.00       | 0.00        | 0.00     | 0.00      |
| xe-6/0/3:0   | Down    | CORE3-SJC-XE-1/0/0-40GTEK       | 0.00       | 0.00        | 0.00       | 0.00        | 0.00       | 0.00        | 0.00     | 0.00      |
+--------------+---------+---------------------------------+------------+-------------+------------+-------------+------------+-------------+----------+-----------+
* units per seconds

Build

It can be built for Linux and Darwin. there is libpcap dependency:

- LINUX
apt-get install libpcap-dev
- OSX
brew install homebrew/dupes/libpcap

Given that the Go Language compiler (version 1.7 or greater is required) is installed, you can build it with:

go get github.com/mehrdadrad/mylg
cd $GOPATH/src/github.com/mehrdadrad/mylg/
go build mylg.go

License

This project is licensed under MIT license. Please read the LICENSE file.

Contribute

Welcomes any kind of contribution, please follow the next steps:

  • Fork the project on github.com.
  • Create a new branch.
  • Commit changes to the new branch.
  • Send a pull request.

mylg's People

Contributors

gummiboll avatar jbub avatar jungle-boogie avatar mehrdadrad avatar presbrey avatar raymondchen625 avatar shawnps avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mylg's Issues

trace panic in external lg mode

Just install this nice tool and played around for awhile and noticed that I got a panic when trying to do trace on external looking glass mode. It works correct in local mode.

local> lg
lg> trace www.google.com
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x48 pc=0x404a82]

goroutine 1 [running]:
panic(0x8fd8e0, 0xc42000c180)
	/usr/local/go/src/runtime/panic.go:500 +0x1a1
main.trace()
	/home/vagrant/golang/src/github.com/mehrdadrad/mylg/mylg.go:312 +0xb2
main.main()
	/home/vagrant/golang/src/github.com/mehrdadrad/mylg/mylg.go:157 +0x1e6

Unable to install CentOS 7

I'm unable to install it, please could you advise. Here is some details:

[root@localhost programs_install]# rpm -ihv mylg-0-2.6.x86_64.rpm
error: Failed dependencies:
libpcap.so.0.8()(64bit) is needed by mylg-0-2.6.x86_64

[root@localhost programs_install]# rpm -qa | grep libpcap
libpcap-1.5.3-8.el7.x86_64
libpcap-devel-1.5.3-8.el7.x86_64

[root@localhost programs_install]# ls -alh /usr/lib64/ | grep libpcap
lrwxrwxrwx. 1 root root 12 Dec 29 15:06 libpcap.so -> libpcap.so.1
lrwxrwxrwx. 1 root root 16 Dec 29 15:06 libpcap.so.1 -> libpcap.so.1.5.3

[root@localhost programs_install]# uname -a
Linux localhost.localdomain 3.10.0-514.2.2.el7.x86_64 #1 SMP Tue Dec 6 23:06:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

[root@localhost programs_install]# cat /etc/*-release
CentOS Linux release 7.3.1611 (Core)
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

CentOS Linux release 7.3.1611 (Core)
CentOS Linux release 7.3.1611 (Core)

Thanks

hping with ipv6

Hi,

From looking at the hping options, it doesn't seem there's an option to connect via ipv6:

    usage:
          hping url [options]

    options:
          -c   count        Send 'count' requests (default: 5)
          -t   timeout      Set a time limit for requests in ms/s (default: 2s)
          -i   interval     Set a wait time between sending each request in ms/s (default: 1s)
          -m   method       HTTP methods: GET/POST/HEAD (default: head)
          -d   data         Sending the given data (text/json) (default: "mylg")
          -u   user agent   Set user agent
          -q                Quiet reqular output
          -k                Enable keep alive
          -dc               Disable compression
          -nc               Don_t check the server certificate
          -trace            Provides the events within client requests
          -json             Export statistics as json format

    Proxy:
        hping parses environment variables HTTP(S)_PROXY to determine which/if any
        proxies should be used.

scan - be tolerant with "too many open files"

I'm reviewing scan/scan.go.

I have a feature request:

When calling net.DialTimeout, if you get an error that says "too many open files", pause that go routine and then retry.

If you do that, you'll be able to reduce the 8ms sleep. Additionally, if you do that, your tool will be robust when doing large scans in environments with restrictive ulimits.

Unfortunately, I am unable to contribute a similar PR for your scanner. My current employer's rules of engagement prohibit it; and I'm not ready to change employers. (sadface!)

hping display port

Hi,

I think it would be really useful to have hping support an option for a destination port.

local> hping http://192.168.0.17:8080 -c 1
HPING 192.168.0.17 (192.168.0.17), Method: HEAD, DNSLookup: 0.0207 ms
HTTP Response seq=0, proto=HTTP/1.0, status=404, time=8.066 ms

--- 192.168.0.17 HTTP ping statistics ---
1 requests transmitted, 1 replies received, 0% requests failed
HTTP Round-trip min/avg/max = 8.07/8.07/8.07 ms
HTTP Code [404] responses : [████████████████████] 100.00%

don't exit trace -r -c 5

Hi All,

trace freebsd.org -c 10 -r will correct traceroute to the host ten times but then immediately close once the tenth scan is finished. Is it possible to keep the results open to review them, or cat it to standard out and return to mylg prompt?

Inconceivable result in concurrent-mtr jobs

I used your code and compared with linux mtr, the result is same, very good!

but when I run more than 10 mtr jobs concurrently, the result is inconceivable,


Look, the first picture is concurrent-mtr test, the second picture is single-mtr test.

Lets compare the same target 183.131.7.137, the first result is mostly different with the second one. In fact, the second result is expected.

And there isn't this problem of linux mtr.

Thx!

operation not permitted in `disc`

Just installed mylg using download link in the website on Ubuntu 16.10 .

When I run disc I get the messages Operation not permitted. I tried running it as sudo and also as an admin user, same result:

✗ 14:35:14 kousha-ubuntu:kousha ~/Downloads% sudo mylg 
[sudo] password for kousha: 


=================================================	
                          _    ___ 
                _ __ _  _| |  / __|
               | '  \ || | |_| (_ |
               |_|_|_\_, |____\___|
                      |__/          
	
                 My Looking Glass
           Free Network Diagnostic Tool
                  http://mylg.io
================== myLG v0.2.6 ==================
local> disc 
please wait . operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
operation not permitted
invalid argument
please wait ..  
Network LAN Discovery
+----------------+-------------------+--------------------------+-----------+---------------------------+
|       IP       |        MAC        |           HOST           | INTERFACE |     ORGANIZATION NAME     |
+----------------+-------------------+--------------------------+-----------+---------------------------+
| 192.168.29.1   | ------------------ | cellspot.router.         | wlan0     | ASUSTek COMPUTER INC.     |
| 192.168.29.146 | ------------------ | Chromecast.T-mobile.com. | wlan0     | AzureWave Technology Inc. |
+----------------+-------------------+--------------------------+-----------+---------------------------+
2 host(s) has been found
local>  

Dashes in domain name truncate the name

If a domain name contains a dash, then the name of the domain name is changed.

local> ping kinetic-compute.com
PING kinetic.com (70.32.91.17): 56 data bytes
64 bytes from 70.32.91.17 icmp_seq=0 time=71.118377 ms
64 bytes from 70.32.91.17 icmp_seq=1 time=69.045624 ms
64 bytes from 70.32.91.17 icmp_seq=2 time=69.663396 ms
64 bytes from 70.32.91.17 icmp_seq=3 time=69.578468 ms

--- kinetic.com ping statistics ---
4 packets transmitted,  4 packets received, 0% packet loss
round-trip min/avg/max = 69.046/69.726/71.118 ms

Yet....

0:0 ᐅ dig kinetic-compute.com
; <<>> DiG 9.8.3-P1 <<>> kinetic-compute.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8924
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 3

;; QUESTION SECTION:
;kinetic-compute.com.       IN  A

;; ANSWER SECTION:
kinetic-compute.com.    1800    IN  A   67.207.149.103

;; AUTHORITY SECTION:
kinetic-compute.com.    77023   IN  NS  b.ns.joker.com.
kinetic-compute.com.    77023   IN  NS  a.ns.joker.com.
kinetic-compute.com.    77023   IN  NS  c.ns.joker.com.

;; ADDITIONAL SECTION:
a.ns.joker.com.     163320  IN  A   184.172.157.218
b.ns.joker.com.     163320  IN  A   159.25.97.69
c.ns.joker.com.     163320  IN  A   85.25.110.247

;; Query time: 53 msec
;; SERVER: 10.6.99.20#53(10.6.99.20)
;; WHEN: Mon Sep 12 11:52:03 2016
;; MSG SIZE  rcvd: 158

Does mylg hping do something different every 100 pings?

Every 100 pings we see ridiculously slow times, is mylg hping doing something different on those requests? Or is this really bizarre ISP behavior? (We're trying to diagnose some bad network problems which is why we're running this at all, so that could easily be the case).

HTTP Response seq=98, proto=HTTP/1.1, status=200, time=13.749 ms
HTTP Response seq=99, proto=HTTP/1.1, status=200, time=13.664 ms
HTTP Response seq=100, proto=HTTP/1.1, status=200, time=5026.282 ms
HTTP Response seq=101, proto=HTTP/1.1, status=200, time=13.309 ms
HTTP Response seq=102, proto=HTTP/1.1, status=200, time=13.260 ms
...
HTTP Response seq=198, proto=HTTP/1.1, status=200, time=13.488 ms
HTTP Response seq=199, proto=HTTP/1.1, status=200, time=11.810 ms
HTTP Response seq=200, proto=HTTP/1.1, status=200, time=11040.815 ms
HTTP Response seq=201, proto=HTTP/1.1, status=200, time=14.015 ms
HTTP Response seq=202, proto=HTTP/1.1, status=200, time=13.150 ms

Proposal: make the different utilities directly accessible from the shell

If you follow the unix philosophy that every program should do only one thing but that very good it would be nice if you would consider to create subcommands or different binaries for every tool. This would reduce the necessary steps to use trace from two (mylg and then trace foo.ba) to one (either trace foo.bar or mylg trace foo.bar)

IPv6 trace

So, fairly certain this has worked before but get this when I try to do a trace over IPv6 now:

root@c1841:~# mylg trace google.com -6
trace route to google.com (2a00:1450:400e:801::200e), 30 hops max
invalid argument

Built with go 1.7.3 on Ubuntu 16.04. Works without a glitch over IPv4 and also works with -6 if I run with -u.

trace doesn't show error when ran without privilege

Jasons-MacBook:mylg jfesler$ mylg trace ipv4.test-ipv6.com
trace route to ipv4.test-ipv6.com (216.218.228.125), 30 hops max
1  * * * 
2  * * * 
3  * * * 
4  * * * 
...

Hmm.

Jasons-MacBook:mylg jfesler$ sudo mylg trace ipv4.test-ipv6.com
trace route to ipv4.test-ipv6.com (216.218.228.125), 30 hops max
1  192.168.1.1 1.329 ms 1.853 ms 1.737 ms 
2  96.120.88.149 [ASN 7922/COMCAST-7922] 14.051 ms 13.164 ms 18.417 ms 
3  be-10022-sur03.santaclara.ca.sfba.comcast.net. (68.87.196.209) [ASN 7922/COMCAST-7922] 15.282 ms 12.996 ms 14.741 ms 
4  hu-0-3-0-4-ar01.santaclara.ca.sfba.comcast.net. (68.87.192.177) [ASN 7922/COMCAST-7922] 13.817 ms 
   hu-0-3-0-5-ar01.santaclara.ca.sfba.comcast.net. (68.87.192.181) [ASN 7922/COMCAST-7922] 12.332 ms 11.371 ms 
5  be-33651-cr01.sunnyvale.ca.ibone.comcast.net. (68.86.90.93) [ASN 7922/COMCAST-7922] 24.571 ms 20.224 ms 10.765 ms 
...

Clearly, sudo, setuid, setcap, etc are needed. No dispute there :-). However, it would be good if, when trying to work with the raw sockets, recognizing our lack of privilege and to warn accordingly.

Issue with IPv6 targets.

Hi!

When trying to trace hostnames resolving to a IPv6 AAAA, I got the following error:

dial udp: too many colons in address 2001:db8:a:b::1:80

Indeed, the far right ":80" is the transport layer port number. I am currently using the most current osx binary available on your website.

Thanks!

discovery: show ipv6?

Hi,

Can disc display the ipv6 of hosts it finds?

example of what it currently displays:

+---------------+-------------------+--------------------------+-----------+------------------------------+
|      IP       |        MAC        |           HOST           | INTERFACE |      ORGANIZATION NAME       |
+---------------+-------------------+--------------------------+-----------+------------------------------+
| 192.168.0.8   | 00:04:f2:35:c9:68 | NA                       | bge0      | Polycom                      | 
+---------------+-------------------+--------------------------+-----------+------------------------------+ 

ping range

Hi All,

when pinging 192.168.0.0/24, a result is duplicated:

% sudo /usr/bin/time mylg ping 192.168.0.0/24 | ack alive
Password:
192.168.0.1 is alive (1.3574 ms)
192.168.0.3 is alive (0.4098 ms)
192.168.0.4 is alive (10.5379 ms)
192.168.0.5 is alive (2.4246 ms)
192.168.0.6 is alive (0.3861 ms)
192.168.0.7 is alive (83.5629 ms)
192.168.0.8 is alive (14.9203 ms)
192.168.0.11 is alive (4.3422 ms)
192.168.0.12 is alive (9.0886 ms)
192.168.0.13 is alive (0.2380 ms)
192.168.0.15 is alive (0.0939 ms)
192.168.0.17 is alive (0.4137 ms)
192.168.0.20 is alive (12.5586 ms)
192.168.0.22 is alive (0.4163 ms)
192.168.0.26 is alive (0.4149 ms)
192.168.0.100 is alive (0.9317 ms)
192.168.0.137 is alive (0.6224 ms)
192.168.0.140 is alive (0.4299 ms)
192.168.0.15 is alive (0.0967 ms)
      477.88 real         0.71 user         0.05 sys

Notice 192.168.0.15 in listed twice. 192.168.0.15 is the machine I'm running mylg from.

failed to unpack truncated message

Hi,

I'm getting this on a few different nodes:

ns/italy/arezzo> dig github.com
Trying to query server: 62.149.132.2 italy arezzo
dns: failed to unpack truncated message

This bypasses /etc/resolve.conf and uses whatever node I select, right?

web interface: disable trace

Hi There,

When entering the IP address/host you would like to trace, it's a continuous trace, like mtr. However, there's a slider that when you hover over it, says enable/disable trace. Is the purpose of this to stop a trace after it has started? If so, I'm observing it continuing to ping.

change config path: PR #66

Hi All,

This is regarding pull request #66

There's discussion on the table to move ~/.mylg.config to ~/.config/mylg/mylg.config and how to handle this on existing mylg installs.

install instructions

Hi There,

First, thank you for creating this tool. It's very nice and I'm presently surprised to see it written in go.

There must be a reason your install instructions explain a bit longer way to install your project from source. What's the reason?

go get github.com/mehrdadrad/mylg would work just fine.

Additionally, I recommend updating the install instructions here http://mylg.io/doc/ to indicate you need to copy to /usr/local/sbin (at least on FreeBSD)
Currently you have:
curl -O http://mylg.io/dl/freebsd/mylg && chmod +x mylg && mv mylg /usr/bin/

*BSD's put base installed applications in /usr/ whereas installed packages go /usrl/local. I say sbin as well because you need elevated privileges to use mylg:

local> ping yahoo.com
PING yahoo.com (2001:4998:58:c02::a9): 56 data bytes
listen ip6:ipv6-icmp : socket: operation not permitted icmp_seq=0
listen ip6:ipv6-icmp : socket: operation not permitted icmp_seq=0
listen ip6:ipv6-icmp : socket: operation not permitted icmp_seq=0
listen ip6:ipv6-icmp : socket: operation not permitted icmp_seq=0

--- yahoo.com ping statistics ---
4 packets transmitted,  0 packets received, 100% packet loss 

scan does not support ipv6

Jasons-MacBook:~ jfesler$ mylg dig ipv6.test-ipv6.com 
Trying to query server: 192.168.1.1  your local dns server
;; opcode: QUERY, status: NOERROR, id: 17040
;; flags: qr rd ra;
ipv6.test-ipv6.com. 70  IN  AAAA    2001:470:1:18::125
ipv6.test-ipv6.com. 70  IN  AAAA    2001:470:1:18::119
;; Query time: 2 ms

;; CHAOS CLASS BIND
Jasons-MacBook:~ jfesler$ mylg scan ipv6.test-ipv6.com 
no suitable address found

While the dig results may vary depending on where you query from; they will always return just AAAA records for ipv6.test-ipv6.com.

scan -p 80 fails; scan -p 80-80 works

Forcing this to use IPv4 for the sake of demonstration..

Jasons-MacBook:~ jfesler$ mylg  scan ipv4.test-ipv4.com -p 80
+----------+------+--------+-------------+
| PROTOCOL | PORT | STATUS | DESCRIPTION |
+----------+------+--------+-------------+
+----------+------+--------+-------------+
there isn't any opened port

Jasons-MacBook:~ jfesler$ mylg  scan ipv4.test-ipv4.com -p 80-80
+----------+------+--------+-------------+
| PROTOCOL | PORT | STATUS | DESCRIPTION |
+----------+------+--------+-------------+
| TCP      |   80 | Open   |             |
+----------+------+--------+-------------+
Scan done: 1 opened port(s) found in 0.014 seconds
Jasons-MacBook:~ jfesler$ 

homebrew install libpcap command out of date

When going to install libpcap via homebrew I get the following output:

joegallo@xor ~/dev/mylg brew install libpcap
Error: No available formula with the name "libpcap"
==> Searching for similarly named formulae...
Error: No similarly named formulae found.
==> Searching taps...
This formula was found in a tap:
homebrew/dupes/libpcap
To install it, run:
  brew install homebrew/dupes/libpcap

hping for https and traceroute using any TCP/UDP port

Your Message: Since all of our hosted URLs are now HTTPS and reject HTTP can your tool provide a HTTPS ping and traceroute? Most times when we are troubleshooting we see ping and traceroute work fine but HTTPs has an issue or the carrier is treating HTTP traffic (its route etc) different. It would be great to be able to issue a ping and traceroute at a TCP or UDP layer that is be able to ping or tr using any selected TCP/UDP destination port. thanks so far love the program

set Snmp community

Hi ,

When you set the snmp community with command set snmp community testSnmp it will make the community name to lowercase.

log from router :
snmpd[1698]: SNMPD_AUTH_FAILURE: nsa_log_community: unauthorized SNMP community from 1xx.xx.xxx.1 to 1xx.xx.x.2 (testsnmp)
If you use the command : connect 1xx.xxx.x.2 -c testSnmp it works.

I also checked the config file and see that the community is in lowercase.

I use the latest version.

Feature request: add support for command line scripting

There are some instances when it would be very useful to expose the tool's functionalities as script-friendly command line interface.
I foresee using this tool as a replacement for other network tool packages in minimal Docker containers for example. An all-in-one tool also means not need to remember all the different packages that need to be installed in a host to accomplish the same/similar desired results.

chain commands together

Hi,

Instead of this:

local> ns
ns> connect iceland
ns/iceland> node reykjavik
ns/iceland/reykjavik>

Could ns connect iceland reykjavik be used?

running that command at the shell prompt generates a panic:

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x4 pc=0x80e6cea]

goroutine 1 [running]:
panic(0x8524140, 0x39422008)
        /usr/local/go/src/runtime/panic.go:500 +0x334
github.com/mehrdadrad/mylg/cli.(*Readline).UpdateCompleter(0x0, 0x858a8f6, 0x7, 0x0, 0x0, 0x0)
        /home/user/bin/gopath/src/github.com/mehrdadrad/mylg/cli/cli.go:130 +0x8a
main.setNS()
        /home/user/bin/mylg/mylg.go:494 +0x64
main.main()
        /home/user/bin/mylg/mylg.go:129 +0xfd

real-time traceroute stops sending packets

# ./mylg trace www.heise.de -4 -r -I

──[ myLG ]── traceroute to www.heise.de (193.99.144.85), 30 hops max, elapsed: 8m41s ... () -> Hanover (DE) 3664 miles
Press [q] to quit, [r] to reset statistics, [1,2] to change display mode
Host                                                        ASN    Holder         Loss%      Sent       Last   Avg    Best   Wrst
[1 ] XXX-REDACTED-XXX                                      31400  ACCELERATED-IT  0.0        2          0.40   0.41   0.40   0.43
[2 ] 82.211.0.1                                            31400  ACCELERATED-IT  0.0        2          0.48   0.53   0.48   0.57
[3 ] fra3.xe-0-0-0.accelerated.de.                         31400  ACCELERATED-IT  0.0        2          2.56   1.58   0.60   2.56
[4 ] te0-0-2-3.c350.f.de.plusline.net.                                            0.0        2          4.23   2.97   1.72   4.23
[5 ] 82.98.102.5                                           12306  PLUSLINE        0.0        2          1.57   1.39   1.21   1.57
[6 ] 212.19.61.13                                          12306  PLUSLINE        0.0        2          1.06   1.07   1.06   1.08
[7 ] ???                                                                          100.0      2
[8 ] ???                                                                          100.0      2
[9 ] ???                                                                          100.0      1
[10] ???                                                                          100.0      1
[11] ???                                                                          100.0      1
[12] ???                                                                          100.0      1
[13] ???                                                                          100.0      1
[14] ???                                                                          100.0      1
[15] ???                                                                          100.0      1
[16] ???                                                                          100.0      1
[17] ???                                                                          100.0      1
[18] ???                                                                          100.0      1
[19] ???                                                                          100.0      1
[20] ???                                                                          100.0      1
[21] ???                                                                          100.0      1
[22] ???                                                                          100.0      1
[23] ???                                                                          100.0      1
[24] ???                                                                          100.0      1
[25] ???                                                                          100.0      1
[26] ???                                                                          100.0      1
[27] ???                                                                          100.0      1
[28] ???                                                                          100.0      1
[29] ???                                                                          100.0      1
[30] ???                                                                          100.0      1

# mtr -4 www.heise.de
                                                            My traceroute  [v0.86]
XXX-REDACTED-XXX  (0.0.0.0)                                                                                         
Keys:  Help   Display mode   Restart statistics   Order of fields   quit
                                                                                                      Packets               Pings
 Host                                                                                               Loss%   Snt   Last   Avg  Best  Wrst StDev
 1. XXX-REDACTED-XXX                                                                                 0.0%    55    1.7   0.4   0.1   5.8   0.8
 2. 82.211.0.1                                                                                       0.0%    55    0.3   2.1   0.2  27.1   4.4
 3. fra3.xe-0-0-0.accelerated.de                                                                     0.0%    55    1.1   2.1   0.3  25.6   3.7
 4. te0-0-2-3.c350.f.de.plusline.net                                                                 0.0%    55    3.2   2.8   1.3  11.0   1.9
 5. 82.98.102.5                                                                                      0.0%    55    3.5   4.3   0.9  84.9  11.7
 6. 212.19.61.13                                                                                     0.0%    54    0.9   1.9   0.9   7.8   1.6
 7. www.heise.de    

other options on web interface

Is there a way to web interface have more options than ping and trace only ?
according to terminal on lg we have scan , whois , dig and local discovery that could be implemented on web interface .
Is there a way to put those options there or am i missing something and it is only possible to use those commands over the terminal ?

May want to update installation instructions

You may want to add a note to define (if it isn't already) GOPATH prior to running 'go get ...'. If its not defined you will get an error:

$ go get github.com/mehrdadrad/mylg
package github.com/mehrdadrad/mylg: cannot download, $GOPATH not set. For more details see: go help gopath

Great tool thanks for writing it!

Panic Error

Hello.

Anyone with this error?
Just logged in and i have error.

=================================================
_ ___
_ __ _ | | / __|
| ' \ || | |
| (_ |
|||_, |____|
|
/

             My Looking Glass
       Free Network Diagnostic Tool
              http://mylg.io

================== myLG v0.2.6 ==================
local>
local>
local> panic: runtime error: index out of range

goroutine 7 [running]:
panic(0x905420, 0xc42000c0d0)
/usr/local/go/src/runtime/panic.go:500 +0x1a1
github.com/mehrdadrad/mylg/ns.fetchNSHosts(0x0, 0x0, 0x0)
/home/vagrant/golang/src/github.com/mehrdadrad/mylg/ns/ns.go:357 +0x98d
github.com/mehrdadrad/mylg/ns.(*Request).Init(0xc42004a770)
/home/vagrant/golang/src/github.com/mehrdadrad/mylg/ns/ns.go:99 +0x7f
created by main.init.1
/home/vagrant/golang/src/github.com/mehrdadrad/mylg/mylg.go:104 +0x125
axtelecom@laboratorio:~/pacotes$

Regards,
Leandro de Lima Camargo

increase scan port range

Thanks to the hard work of @gummiboll and @mehrdadrad, #46 is working much better!

This is a request to increase scan range from:
1-500
to
1-1024

<1024 will require root to run so it's beneficial to see what else is listening to those lower ports.

dump results in panic

Hello,

Started this: dump port 53 then performed this dump port 53 resulted in this panic:

local> dump port 53                                                                                                                                           
Interface: fxp0, capture size: 6144 bytes                                                                      
00:01:31.198 IPv4/UDP  192.168.0.22:29690 > in.example.net.:53(domain) , len: 0                             
00:01:31.651 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:65158 > d0.org.afilias-nst.org.:53(domain), len: 0
00:01:32.090 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:12904 > x.arin.net.:53(domain), len: 0           
00:01:32.091 IPv6/UDP  d0.org.afilias-nst.org.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:65158, len: 0
00:01:32.091 IPv6/UDP  x.arin.net.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:12904, len: 0   
00:01:32.456 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:58320 > b.gtld-servers.net.:53(domain), len: 0
00:01:32.581 IPv4/UDP  in.example.net.:18244 > m.gtld-servers.net.:53(domain) , len: 0                            
00:01:32.737 IPv4/UDP  in.example.net.:38624 > j.gtld-servers.net.:53(domain) , len: 0                            
00:01:33.072 IPv4/UDP  in.example.net.:64451 > g.gtld-servers.net.:53(domain) , len: 0                        
00:01:33.126 IPv4/UDP  in.example.net.:6676 > i.gtld-servers.net.:53(domain) , len: 0                     
00:01:33.127 IPv4/UDP  in.example.net.:9455 > m.gtld-servers.net.:53(domain) , len: 0                              
00:01:34.079 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:34322 > b0.dig.afilias-nst.info.:53(domain), len: 0
00:01:34.080 IPv6/UDP  b.gtld-servers.net.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:58320, len: 0     
00:01:34.475 IPv4/UDP  in.example.net.:28975 > ns5.linode.com.:53(domain) , len: 0                              
00:01:34.477 IPv6/UDP  b0.dig.afilias-nst.info.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:34322, len: 0
00:01:34.477 IPv4/UDP  in.example.net.:9897 > u.arin.net.:53(domain) , len: 0                                      
00:01:34.477 IPv4/UDP  ns5.linode.com.:53(domain) > in.example.net.:28975 , len: 0                                
00:01:35.822 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:25658 > ns1.linode.com.:53(domain), len: 0        
00:01:35.835 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:22222 > ns5.linode.com.:53(domain), len: 0         
00:01:35.836 IPv4/UDP  in.example.net.:13192 > ns5.linode.com.:53(domain) , len: 0         
00:01:35.848 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:23084 > ns3.linode.com.:53(domain), len: 0         
00:01:35.861 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:34551 > ns2.linode.com.:53(domain), len: 0         
00:01:35.861 IPv4/UDP  i.gtld-servers.net.:53(domain) > in.example.net.:6676 , len: 0
00:01:35.862 IPv4/UDP  j.gtld-servers.net.:53(domain) > in.example.net.:38624 , len: 0
00:01:35.863 IPv4/UDP  in.example.net.:46986 > ns5.linode.com.:53(domain) , len: 0
00:01:35.875 IPv4/UDP  in.example.net.:43394 > ns1.linode.com.:53(domain) , len: 0
00:01:35.876 IPv4/UDP  ns5.linode.com.:53(domain) > in.example.net.:13192 , len: 0
00:01:35.877 IPv6/UDP  ns3.linode.com.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:23084, len: 0
00:01:35.877 IPv6/UDP  ns2.linode.com.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:34551, len: 0
00:01:35.878 IPv6/UDP  ns5.linode.com.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:22222, len: 0
00:01:35.879 IPv4/UDP  ns5.linode.com.:53(domain) > in.example.net.:46986 , len: 0
00:01:35.880 IPv6/UDP  ns1.linode.com.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:25658, len: 0
00:01:35.880 IPv4/UDP  in.example.net.:53(domain) > 192.168.0.22:29690 , len: 0
00:01:35.881 IPv4/UDP  u.arin.net.:53(domain) > in.example.net.:9897 , len: 0
00:01:36.341 IPv4/UDP  in.example.net.:9122 > x.arin.net.:53(domain) , len: 0
00:01:36.342 IPv4/UDP  ns1.linode.com.:53(domain) > in.example.net.:43394 , len: 0
00:01:36.342 IPv4/UDP  x.arin.net.:53(domain) > in.example.net.:9122 , len: 0
00:01:37.238 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:57130 > arin.authdns.ripe.net.:53(domain), len: 0
00:01:37.239 IPv4/UDP  m.gtld-servers.net.:53(domain) > in.example.net.:18244 , len: 0
00:01:37.240 IPv4/UDP  in.example.net.:52589 > ns5.linode.com.:53(domain) , len: 0
00:01:37.240 IPv4/UDP  m.gtld-servers.net.:53(domain) > in.example.net.:9455 , len: 0
00:01:37.241 IPv4/UDP  in.example.net.:43024 > ns1.linode.com.:53(domain) , len: 0
00:01:37.241 IPv4/UDP  ns5.linode.com.:53(domain) > in.example.net.:52589 , len: 0
00:01:37.242 IPv4/UDP  g.gtld-servers.net.:53(domain) > in.example.net.:64451 , len: 0
00:01:37.253 IPv4/UDP  in.example.net.:49663 > ns3.linode.com.:53(domain) , len: 0
00:01:37.254 IPv4/UDP  ns1.linode.com.:53(domain) > in.example.net.:43024 , len: 0                                                                              
00:01:37.255 IPv4/UDP  ns3.linode.com.:53(domain) > in.example.net.:49663 , len: 0
00:01:37.255 IPv6/UDP  arin.authdns.ripe.net.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:57130, len: 0
00:01:37.438 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:61966 > av4.nstld.com.:53(domain), len: 0
00:01:37.439 IPv6/UDP  av4.nstld.com.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:61966, len: 0
00:01:37.439 IPv4/UDP  in.example.net.:46733 > x.arin.net.:53(domain) , len: 0
00:01:37.440 IPv4/UDP  x.arin.net.:53(domain) > in.example.net.:46733 , len: 0
00:01:38.065 IPv4/UDP  in.example.net.:21830 > cumin.apnic.net.:53(domain) , len: 0
00:01:38.320 IPv4/UDP  in.example.net.:20633 > sns-pb.isc.org.:53(domain) , len: 0
00:01:38.320 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:31655 > 2620:74:19::33:53(domain), len: 0
00:01:38.320 IPv4/UDP  sns-pb.isc.org.:53(domain) > in.example.net.:20633 , len: 0
00:01:38.322 IPv6/UDP  2620:74:19::33:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:31655, len: 0
00:01:38.322 IPv4/UDP  cumin.apnic.net.:53(domain) > in.example.net.:21830 , len: 0
00:01:38.323 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:5708 > av4.nstld.com.:53(domain), len: 0
00:01:38.323 IPv6/UDP  av4.nstld.com.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:5708, len: 0
00:01:38.795 IPv4/UDP  in.example.net.:40718 > ns1.arin.net.:53(domain) , len: 0
00:01:38.795 IPv4/UDP  ns1.arin.net.:53(domain) > in.example.net.:40718 , len: 0
00:01:38.918 IPv4/UDP  in.example.net.:59386 > arin.authdns.ripe.net.:53(domain) , len: 0
00:01:38.919 IPv4/UDP  arin.authdns.ripe.net.:53(domain) > in.example.net.:59386 , len: 0
00:01:39.020 IPv4/UDP  in.example.net.:29485 > a1.verisigndns.com.:53(domain) , len: 0
00:01:39.021 IPv4/UDP  a1.verisigndns.com.:53(domain) > in.example.net.:29485 , len: 0
00:01:39.341 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:39096 > u.arin.net.:53(domain), len: 0
00:01:39.342 IPv6/UDP  u.arin.net.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:39096, len: 0
00:01:39.822 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:28022 > z.arin.net.:53(domain), len: 0
00:01:39.824 IPv6/UDP  z.arin.net.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:28022, len: 0
00:01:39.824 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:60818 > z.arin.net.:53(domain), len: 0
00:01:39.824 IPv6/UDP  z.arin.net.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:60818, len: 0
00:01:39.955 IPv4/UDP  in.example.net.:26369 > y.arin.net.:53(domain) , len: 0
00:01:39.956 IPv4/UDP  y.arin.net.:53(domain) > in.example.net.:26369 , len: 0
00:01:39.956 IPv4/UDP  in.example.net.:59675 > a2.verisigndns.com.:53(domain) , len: 0
00:01:39.957 IPv4/UDP  a2.verisigndns.com.:53(domain) > in.example.net.:59675 , len: 0
00:01:39.958 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:39757 > z.arin.net.:53(domain), len: 0
00:01:39.959 IPv6/UDP  z.arin.net.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:39757, len: 0
00:01:40.158 IPv4/UDP  in.example.net.:47106 > z.arin.net.:53(domain) , len: 0
00:01:40.159 IPv4/UDP  z.arin.net.:53(domain) > in.example.net.:47106 , len: 0
00:01:40.160 IPv4/UDP  in.example.net.:62126 > a2.verisigndns.com.:53(domain) , len: 0
00:01:40.160 IPv4/UDP  a2.verisigndns.com.:53(domain) > in.example.net.:62126 , len: 0
00:01:40.161 IPv4/UDP  in.example.net.:57547 > u.arin.net.:53(domain) , len: 0
00:01:40.162 IPv4/UDP  u.arin.net.:53(domain) > in.example.net.:57547 , len: 0
00:01:40.162 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:22966 > arin.authdns.ripe.net.:53(domain), len: 0
00:01:40.164 IPv6/UDP  arin.authdns.ripe.net.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:22966, len: 0
00:01:40.164 IPv4/UDP  in.example.net.:39058 > a1.verisigndns.com.:53(domain) , len: 0
00:01:40.166 IPv4/UDP  a1.verisigndns.com.:53(domain) > in.example.net.:39058 , len: 0
00:01:40.166 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:12068 > arin.authdns.ripe.net.:53(domain), len: 0
00:01:40.167 IPv6/UDP  arin.authdns.ripe.net.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:12068, len: 0
00:01:40.167 IPv4/UDP  in.example.net.:49029 > y.arin.net.:53(domain) , len: 0
00:01:40.168 IPv4/UDP  y.arin.net.:53(domain) > in.example.net.:49029 , len: 0
00:01:40.393 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:11472 > a1.verisigndns.com.:53(domain), len: 0                                                
00:01:40.394 IPv6/UDP  a1.verisigndns.com.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:11472, len: 0
00:01:40.395 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:65316 > x.arin.net.:53(domain), len: 0
00:01:40.396 IPv6/UDP  x.arin.net.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:65316, len: 0
00:01:40.429 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:15428 > a.in-addr-servers.arpa.:53(domain), len: 0
00:01:40.430 IPv6/UDP  a.in-addr-servers.arpa.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:15428, len: 0
00:01:40.431 IPv4/UDP  in.example.net.:45750 > sec3.apnic.net.:53(domain) , len: 0
00:01:40.431 IPv4/UDP  sec3.apnic.net.:53(domain) > in.example.net.:45750 , len: 0
00:01:40.582 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:15969 > a0.dig.afilias-nst.info.:53(domain), len: 0
00:01:40.583 IPv4/UDP  in.example.net.:38976 > a0.dig.afilias-nst.info.:53(domain) , len: 0
00:01:40.617 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:61846 > d0.dig.afilias-nst.info.:53(domain), len: 0
00:01:40.655 IPv4/UDP  in.example.net.:12319 > d0.dig.afilias-nst.info.:53(domain) , len: 0
00:01:40.656 IPv4/UDP  in.example.net.:23690 > a0.dig.afilias-nst.info.:53(domain) , len: 0
00:01:40.657 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:34508 > b0.dig.afilias-nst.info.:53(domain), len: 0
00:01:40.657 IPv4/UDP  d0.dig.afilias-nst.info.:53(domain) > in.example.net.:12319 , len: 0
00:01:40.658 IPv4/UDP  in.example.net.:31600 > d0.dig.afilias-nst.info.:53(domain) , len: 0
00:01:40.659 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:10172 > d0.dig.afilias-nst.info.:53(domain), len: 0
00:01:40.746 IPv4/UDP  in.example.net.:63840 > b0.dig.afilias-nst.info.:53(domain) , len: 0
00:01:40.747 IPv6/UDP  d0.dig.afilias-nst.info.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:61846, len: 0
00:01:40.748 IPv6/UDP  b0.dig.afilias-nst.info.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:34508, len: 0
00:01:40.748 IPv4/UDP  b0.dig.afilias-nst.info.:53(domain) > in.example.net.:63840 , len: 0
00:01:40.749 IPv4/UDP  d0.dig.afilias-nst.info.:53(domain) > in.example.net.:31600 , len: 0
00:01:40.990 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:18172 > b.ip6-servers.arpa.:53(domain), len: 0
00:01:40.991 IPv6/UDP  d0.dig.afilias-nst.info.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:10172, len: 0
00:01:40.992 IPv6/UDP  b.ip6-servers.arpa.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:18172, len: 0
00:01:41.031 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:55979 > pri.authdns.ripe.net.:53(domain), len: 0
00:01:41.032 IPv4/UDP  a0.dig.afilias-nst.info.:53(domain) > in.example.net.:23690 , len: 0
00:01:41.034 IPv4/UDP  a0.dig.afilias-nst.info.:53(domain) > in.example.net.:38976 , len: 0
00:01:41.034 IPv6/UDP  a0.dig.afilias-nst.info.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:15969, len: 0
00:01:41.035 IPv6/UDP  pri.authdns.ripe.net.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:55979, len: 0
00:01:41.036 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:52648 > pri.authdns.ripe.net.:53(domain), len: 0
00:01:41.036 IPv6/UDP  pri.authdns.ripe.net.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:52648, len: 0
00:01:41.037 IPv4/UDP  in.example.net.:36766 > sns-pb.isc.org.:53(domain) , len: 0
00:01:41.038 IPv4/UDP  sns-pb.isc.org.:53(domain) > in.example.net.:36766 , len: 0
00:01:41.039 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:57508 > pri.authdns.ripe.net.:53(domain), len: 0
00:01:41.039 IPv6/UDP  pri.authdns.ripe.net.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:57508, len: 0
00:01:41.115 IPv4/UDP  in.example.net.:59490 > pri.authdns.ripe.net.:53(domain) , len: 0
00:01:41.116 IPv4/UDP  pri.authdns.ripe.net.:53(domain) > in.example.net.:59490 , len: 0
00:01:42.508 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:12669 > d.in-addr-servers.arpa.:53(domain), len: 0
00:01:42.508 IPv6/UDP  d.in-addr-servers.arpa.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:12669, len: 0
00:01:42.509 IPv4/UDP  in.example.net.:10054 > z.arin.net.:53(domain) , len: 0
00:01:42.509 IPv4/UDP  z.arin.net.:53(domain) > in.example.net.:10054 , len: 0
00:01:42.510 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:26357 > b.gtld-servers.net.:53(domain), len: 0
00:01:42.511 IPv4/UDP  in.example.net.:38571 > j.gtld-servers.net.:53(domain) , len: 0
00:01:42.512 IPv4/UDP  in.example.net.:25809 > g.gtld-servers.net.:53(domain) , len: 0
00:01:42.512 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:6450 > b.gtld-servers.net.:53(domain), len: 0
00:01:42.513 IPv6/UDP  b.gtld-servers.net.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:26357, len: 0
00:01:42.527 IPv4/UDP  in.example.net.:57677 > ns6.cloudflare.com.:53(domain) , len: 0                                                                           
00:01:42.527 IPv6/UDP  b.gtld-servers.net.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:6450, len: 0
00:01:42.539 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:36663 > ns6.cloudflare.com.:53(domain), len: 0
00:01:42.539 IPv4/UDP  ns6.cloudflare.com.:53(domain) > in.example.net.:57677 , len: 0
00:01:42.540 IPv4/UDP  j.gtld-servers.net.:53(domain) > in.example.net.:38571 , len: 0
00:01:42.540 IPv4/UDP  in.example.net.:17540 > ns6.cloudflare.com.:53(domain) , len: 0
00:01:42.541 IPv4/UDP  ns6.cloudflare.com.:53(domain) > in.example.net.:17540 , len: 0
00:01:42.877 IPv4/UDP  in.example.net.:57781 > alex.ns.cloudflare.com.:53(domain) , len: 0
00:01:42.878 IPv6/UDP  ns6.cloudflare.com.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:36663, len: 0
00:01:42.878 IPv4/UDP  alex.ns.cloudflare.com.:53(domain) > in.example.net.:57781 , len: 0
00:01:42.879 IPv4/UDP  in.example.net.:26248 > y.arin.net.:53(domain) , len: 0
00:01:42.880 IPv4/UDP  y.arin.net.:53(domain) > in.example.net.:26248 , len: 0
00:01:42.880 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:11084 > a.in-addr-servers.arpa.:53(domain), len: 0
00:01:42.881 IPv6/UDP  a.in-addr-servers.arpa.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:11084, len: 0
00:01:42.900 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:46931 > apnic.authdns.ripe.net.:53(domain), len: 0
00:01:42.901 IPv4/UDP  g.gtld-servers.net.:53(domain) > in.example.net.:25809 , len: 0
00:01:42.915 IPv4/UDP  in.example.net.:16637 > ns3.cloudflare.com.:53(domain) , len: 0
00:01:42.915 IPv4/UDP  ns3.cloudflare.com.:53(domain) > in.example.net.:16637 , len: 0
00:01:42.916 IPv6/UDP  apnic.authdns.ripe.net.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:46931, len: 0
00:01:42.954 IPv4/UDP  in.example.net.:23766 > abby.ns.cloudflare.com.:53(domain) , len: 0
00:01:42.954 IPv4/UDP  abby.ns.cloudflare.com.:53(domain) > in.example.net.:23766 , len: 0
00:01:42.955 IPv4/UDP  in.example.net.:49440 > cumin.apnic.net.:53(domain) , len: 0
00:01:42.956 IPv4/UDP  cumin.apnic.net.:53(domain) > in.example.net.:49440 , len: 0
00:01:44.335 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:25364 > ns1.apnic.net.:53(domain), len: 0
00:01:44.475 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:31976 > ns4.apnic.net.:53(domain), len: 0
00:01:44.475 IPv6/UDP  ns4.apnic.net.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:31976, len: 0
00:01:45.240 IPv4/UDP  in.example.net.:50018 > ns2.lacnic.net.:53(domain) , len: 0
00:01:45.242 IPv4/UDP  ns2.lacnic.net.:53(domain) > in.example.net.:50018 , len: 0
00:01:45.242 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:29739 > apnic.authdns.ripe.net.:53(domain), len: 0
00:01:45.243 IPv6/UDP  apnic.authdns.ripe.net.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:29739, len: 0
00:01:45.281 IPv4/UDP  in.example.net.:49011 > apnic.authdns.ripe.net.:53(domain) , len: 0
00:01:45.282 IPv4/UDP  apnic.authdns.ripe.net.:53(domain) > in.example.net.:49011 , len: 0
00:01:45.283 IPv4/UDP  in.example.net.:22250 > abby.ns.cloudflare.com.:53(domain) , len: 0
00:01:45.283 IPv4/UDP  abby.ns.cloudflare.com.:53(domain) > in.example.net.:22250 , len: 0
00:01:45.284 IPv4/UDP  in.example.net.:4816 > alex.ns.cloudflare.com.:53(domain) , len: 0
00:01:45.284 IPv4/UDP  alex.ns.cloudflare.com.:53(domain) > in.example.net.:4816 , len: 0
00:01:45.285 IPv4/UDP  in.example.net.:53736 > alex.ns.cloudflare.com.:53(domain) , len: 0
00:01:45.286 IPv4/UDP  alex.ns.cloudflare.com.:53(domain) > in.example.net.:53736 , len: 0
00:01:45.286 IPv4/UDP  in.example.net.:27084 > alex.ns.cloudflare.com.:53(domain) , len: 0
00:01:45.287 IPv4/UDP  alex.ns.cloudflare.com.:53(domain) > in.example.net.:27084 , len: 0
00:01:45.287 IPv4/UDP  in.example.net.:59956 > y.arin.net.:53(domain) , len: 0
00:01:45.288 IPv4/UDP  y.arin.net.:53(domain) > in.example.net.:59956 , len: 0
00:01:45.512 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:60072 > ns1.arin.net.:53(domain), len: 0
00:01:45.513 IPv6/UDP  ns1.arin.net.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:60072, len: 0
00:01:45.513 IPv4/UDP  in.example.net.:56391 > arin.authdns.ripe.net.:53(domain) , len: 0
00:01:45.515 IPv4/UDP  arin.authdns.ripe.net.:53(domain) > in.example.net.:56391 , len: 0
00:01:45.515 IPv4/UDP  in.example.net.:59966 > ns2.lacnic.net.:53(domain) , len: 0
00:01:45.516 IPv4/UDP  ns2.lacnic.net.:53(domain) > in.example.net.:59966 , len: 0
00:01:46.153 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:47938 > d.ip6-servers.arpa.:53(domain), len: 0
00:01:46.155 IPv6/UDP  d.ip6-servers.arpa.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:47938, len: 0
00:01:46.479 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:48563 > sns-pb.isc.org.:53(domain), len: 0
00:01:46.480 IPv6/UDP  sns-pb.isc.org.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:48563, len: 0
00:01:46.481 IPv4/UDP  in.example.net.:55779 > sec3.apnic.net.:53(domain) , len: 0
00:01:46.481 IPv4/UDP  sec3.apnic.net.:53(domain) > in.example.net.:55779 , len: 0
00:01:46.483 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:36239 > pri.authdns.ripe.net.:53(domain), len: 0
00:01:46.483 IPv6/UDP  pri.authdns.ripe.net.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:36239, len: 0
00:01:46.518 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:4244 > tinnie.arin.net.:53(domain), len: 0
00:01:46.519 IPv6/UDP  tinnie.arin.net.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:4244, len: 0
00:01:46.519 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:53231 > sns-pb.isc.org.:53(domain), len: 0
00:01:46.520 IPv6/UDP  sns-pb.isc.org.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:53231, len: 0
00:01:46.733 IPv4/UDP  in.example.net.:44612 > tinnie.arin.net.:53(domain) , len: 0
00:01:46.734 IPv4/UDP  tinnie.arin.net.:53(domain) > in.example.net.:44612 , len: 0
00:01:46.735 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:52600 > tinnie.arin.net.:53(domain), len: 0
00:01:46.736 IPv6/UDP  tinnie.arin.net.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:52600, len: 0
00:01:46.736 IPv4/UDP  in.example.net.:62722 > tinnie.arin.net.:53(domain) , len: 0
00:01:46.737 IPv4/UDP  tinnie.arin.net.:53(domain) > in.example.net.:62722 , len: 0
00:01:47.035 IPv4/UDP  in.example.net.:35645 > ns3.dnsvisa.com.:53(domain) , len: 0
00:01:47.037 IPv4/UDP  ns3.dnsvisa.com.:53(domain) > in.example.net.:35645 , len: 0
00:01:47.038 IPv4/UDP  in.example.net.:52826 > alex.ns.cloudflare.com.:53(domain) , len: 0
00:01:47.038 IPv4/UDP  alex.ns.cloudflare.com.:53(domain) > in.example.net.:52826 , len: 0
00:01:47.038 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:12574 > x.arin.net.:53(domain), len: 0
00:01:47.039 IPv6/UDP  x.arin.net.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:12574, len: 0
00:01:47.450 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:28917 > pdns2.cscdns.net.:53(domain), len: 0
00:01:47.452 IPv6/UDP  pdns2.cscdns.net.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:28917, len: 0
00:01:47.453 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:29135 > av4.nstld.com.:53(domain), len: 0
00:01:47.453 IPv6/UDP  av4.nstld.com.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:29135, len: 0
00:01:47.454 IPv4/UDP  in.example.net.:14841 > tinnie.arin.net.:53(domain) , len: 0
00:01:47.455 IPv4/UDP  tinnie.arin.net.:53(domain) > in.example.net.:14841 , len: 0
00:01:48.302 IPv4/UDP  in.example.net.:64997 > apnic1.dnsnode.net.:53(domain) , len: 0
00:01:48.303 IPv4/UDP  apnic1.dnsnode.net.:53(domain) > in.example.net.:64997 , len: 0
00:01:48.304 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:62934 > apnic.authdns.ripe.net.:53(domain), len: 0
00:01:48.305 IPv6/UDP  apnic.authdns.ripe.net.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:62934, len: 0
00:01:48.306 IPv4/UDP  in.example.net.:22345 > tinnie.arin.net.:53(domain) , len: 0
00:01:48.306 IPv4/UDP  tinnie.arin.net.:53(domain) > in.example.net.:22345 , len: 0
00:01:48.307 IPv4/UDP  in.example.net.:35319 > tinnie.arin.net.:53(domain) , len: 0
00:01:48.307 IPv4/UDP  tinnie.arin.net.:53(domain) > in.example.net.:35319 , len: 0
00:01:48.448 IPv6/UDP  2600:8801:2a04:2200:216:36ff:fe50:2477:64924 > tinnie.apnic.net.:53(domain), len: 0
00:01:48.449 IPv6/UDP  tinnie.apnic.net.:53(domain) > 2600:8801:2a04:2200:216:36ff:fe50:2477:64924, len: 0
00:01:48.449 IPv4/UDP  in.example.net.:28370 > u.arin.net.:53(domain) , len: 0
00:01:48.449 IPv4/UDP  u.arin.net.:53(domain) > in.example.net.:28370 , len: 0
00:01:48.835 IPv4/UDP  in.example.net.:30709 > ams.sns-pb.isc.org.:53(domain) , len: 0
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x8126f1e]
goroutine 1 [running]:
panic(0x8550dc0, 0x3940c010)
        /usr/local/go/src/runtime/panic.go:500 +0x334
github.com/mehrdadrad/mylg/packet.(*Packet).PrintIPv4(0x3a8a4640)
        /home/sean/bin/gopath/src/github.com/mehrdadrad/mylg/packet/packet.go:259 +0x85e
github.com/mehrdadrad/mylg/packet.(*Packet).PrintPretty(0x3a8a4640)
        /home/sean/bin/gopath/src/github.com/mehrdadrad/mylg/packet/packet.go:187 +0x28
main.dump()
        /home/sean/bin/gopath/src/github.com/mehrdadrad/mylg/mylg.go:246 +0xea
main.main()
        /home/sean/bin/gopath/src/github.com/mehrdadrad/mylg/mylg.go:161 +0x348
3:27.66 real, 3.400 user, 0.573 sys;  page: 0 hard/7303 soft, swap: 0, I/O: 0/0
Mem: 36752KB (2187KB shared + 795KB data/stack = 2982KB), VCSW: 549374 IVCSW: 4586

This doesn't happen on the same drill query as the result is already cached.

what's happening?

error while waiting for command turns off echo

Reproduction instructions

  1. Run mylg as unprivileged user.
  2. Type 'web'
  3. Ping something in the web interface.
  4. mylg gives this error: local> 2016/08/30 13:19:21 listen err, listen ip4:icmp : socket: operation not permitted

Result

Terminal stops echoing input until you type stty echo

Expected

mylg should clean up if it exits unexpectedly.

Note: this doesn't happen if you type a command that triggers an error, like ping as an unprivileged user.

real-time traceroute: interval between ICMP ECHO requests varies

The following trace has an interval of 1 second:

./mylg trace www.heise.de -4 -r -I
Host                                                                                ASN    Holder                   Loss%           Sent            Last   Avg    Best   Wrst
[1 ] XXX-REDACTED-XXX                                                              31400  ACCELERATED-IT            0.0             7               0.20   0.20   0.16   0.22
[2 ] 82.211.0.1                                                                    31400  ACCELERATED-IT            0.0             7               0.32   0.38   0.32   0.61
[3 ] fra3.xe-0-0-0.accelerated.de.                                                 31400  ACCELERATED-IT            0.0             7               0.43   4.81   0.40   17.62
[4 ] te0-0-2-3.c350.f.de.plusline.net.                                                                              0.0             6               1.38   1.80   1.30   4.32
[5 ] 82.98.102.5                                                                   12306  PLUSLINE                  0.0             6               0.99   1.07   0.99   1.35
[6 ] 212.19.61.13                                                                  12306  PLUSLINE                  0.0             6               0.97   1.01   0.93   1.58
[7 ] www.heise.de.                                                                 12306  PLUSLINE                  0.0             6               0.84   0.87   0.84   1.04

When there is a hop in the path with "???" (i suspect this is the cause?), the interval is approximately 5 seconds or more:

./mylg trace 8.8.8.8 -4 -r -I
Host                                                                                ASN    Holder                   Loss%           Sent            Last   Avg    Best   Wrst
[1 ] XXX-REDACTED-XXX                                                              31400  ACCELERATED-IT            0.0             15              0.20   0.23   0.17   0.36
[2 ] 82.211.0.1                                                                    31400  ACCELERATED-IT            0.0             15              0.38   1.76   0.30   70.05
[3 ] 84.200.230.21                                                                 31400  ACCELERATED-IT            0.0             15              0.40   2.11   0.33   11.18
[4 ] 84.200.230.50                                                                 31400  ACCELERATED-IT            0.0             14              0.92   0.93   0.84   20.84
[5 ] de-cix10.net.google.com.                                                                                       0.0             14              0.81   0.80   0.74   0.89
[6 ] 216.239.57.113                                                                15169  GOOGLE                    0.0             14              0.88   0.97   0.83   1.70
[7 ] 209.85.247.83                                                                 15169  GOOGLE                    0.0             14              1.64   1.54   1.32   2.97
[8 ] 72.14.232.77                                                                  15169  GOOGLE                    0.0             14              10.11  11.40  10.10  20.38
[9 ] 108.170.234.133                                                               15169  GOOGLE                    0.0             14              14.55  14.58  14.38  14.95
[10] 108.170.234.143                                                               15169  GOOGLE                    0.0             14              14.35  14.91  14.30  24.97
[11] ???                                                                                                            100.0           14
[12] google-public-dns-a.google.com.                                               15169  GOOGLE                    0.0             14              14.68  15.13  14.62  28.90

ping time regression?

Hi,

I have two machines running mylg. One I just updated to test #39 and another built on the 14th of November.

Even though the response time for each ping is around 55ms, the whole ping request took about 30 seconds to complete the whole request:

% /usr/bin/time sudo mylg ping yahoo.com
PING yahoo.com (2001:4998:c:a06::2:4008): 56 data bytes
64 bytes from 2001:4998:c:a06::2:4008 icmp_seq=0 time=58.901061 ms
64 bytes from 2001:4998:c:a06::2:4008 icmp_seq=1 time=63.529582 ms
64 bytes from 2001:4998:c:a06::2:4008 icmp_seq=2 time=59.052757 ms
64 bytes from 2001:4998:c:a06::2:4008 icmp_seq=3 time=54.948603 ms
64 bytes from 2001:4998:c:a06::2:4008 icmp_seq=4 time=56.835715 ms
64 bytes from 2001:4998:c:a06::2:4008 icmp_seq=5 time=56.326712 ms

--- yahoo.com ping statistics ---
6 packets transmitted,  6 packets received, 0% packet loss
round-trip min/avg/max = 54.949/56.758/63.530 ms
       31.74 real         0.44 user         0.03 sys

from the build on the 14th:

% /usr/bin/time sudo mylg ping -c 6 yahoo.com
PING yahoo.com (2001:4998:c:a06::2:4008): 56 data bytes
64 bytes from 2001:4998:c:a06::2:4008 icmp_seq=0 time=42.963146 ms
64 bytes from 2001:4998:c:a06::2:4008 icmp_seq=1 time=50.286668 ms
64 bytes from 2001:4998:c:a06::2:4008 icmp_seq=2 time=42.983244 ms
64 bytes from 2001:4998:c:a06::2:4008 icmp_seq=3 time=44.244642 ms
64 bytes from 2001:4998:c:a06::2:4008 icmp_seq=4 time=42.963250 ms
64 bytes from 2001:4998:c:a06::2:4008 icmp_seq=5 time=42.910109 ms

--- yahoo.com ping statistics ---
6 packets transmitted,  6 packets received, 0% packet loss
round-trip min/avg/max = 42.910/43.327/50.287 ms
        5.86 real         0.48 user         0.00 sys

I'll update the 14th build to the most recent and see what occurs.

accuracy with scan

Hi,

When using the scan section of the tool, I noticed the results are not that accurate.

local> scan github.com
+----------+------+--------+-------------+
| PROTOCOL | PORT | STATUS | DESCRIPTION |
+----------+------+--------+-------------+
+----------+------+--------+-------------+
there isn't any opened port
local> scan github.com -p 1-500
0+----------+------+--------+-------------+
| PROTOCOL | PORT | STATUS | DESCRIPTION |
+----------+------+--------+-------------+
+----------+------+--------+-------------+
there isn't any opened port

With nmap it takes a bit longer but the results are accurate:

> nmap -sT github.com

Starting Nmap 7.31SVN ( https://nmap.org ) at 2016-11-14 22:47 PST
Nmap scan report for github.com (192.30.253.113)
Host is up (0.077s latency).
Other addresses for github.com (not scanned): 192.30.253.112
Not shown: 996 filtered ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
443/tcp  open  https
9418/tcp open  git

Nmap done: 1 IP address (1 host up) scanned in 84.02 seconds

traceroute doesn't work from behind NAT

local> trace 8.8.8.8
trace route to 8.8.8.8 (8.8.8.8), 30 hops max
1  172.17.0.1 0.126 ms 0.071 ms 0.045 ms
2  192.168.138.2 0.234 ms 0.150 ms 0.205 ms
3  * * *
4  * * *
5  * * *
6  * * *
7  * * *
8  * * *
9  * * *
10 * * *
11 * * *
12 * * *
...

It's reproducible under Linux:

Doesn't work:

traceroute 8.8.8.8

Working:

traceroute -I 8.8.8.8

"mtr" for example is using ICMP as default.

Is it possible to use ICMP packets for traceroute (as default or via a configurable option)?

case insensitivity for lg

Hi,

local> lg
lg/telia/los angeles> connect cogent
AT - Vienna           BE - Brussels         BG - Sofia            CA - Montreal         CA - Toronto          CH - Zurich           DE - Berlin           DE - Dusseldorf       DE - Frankfurt        DE - Hamburg
DE - Munich           DE - Nuremberg        DK - Copenhagen       EE - Tallinn          ES - Barcelona        ES - Madrid           ES - Valencia         FR - Bordeaux         FR - Marseille        FR - Paris
GB - London           GB - Southport        GR - Athens           HU - Budapest         IE - Dublin           IT - Milan            IT - Rome             JP - Tokyo            MX - Mexico City      NL - Amsterdam
NO - Oslo             PL - Warsaw           PT - Lisbon           RO - Bucharest        SE - Stockholm        SK - Bratislava       UA - Kharkiv          US - Atlanta          US - Boston           US - Chicago
US - Dallas           US - Denver           US - Houston          US - Jacksonville     US - Kansas City      US - Los Angeles      US - Miami            US - Minneapolis      US - New York         US - Orlando
US - Philadelphia     US - Sacramento       US - San Diego        US - San Francisco    US - San Jose         US - Seattle          US - Tampa            US - Washington, DC

Is it possible to have all of these lower case so shift isn't needed to select a node?

It's 'covered' to lower case when a node is selected:

lg/cogent/us - los angeles> node BE - Brussels
lg/cogent/be - brussels>

This affects all the lg's in mylg

missing packages

i did "go get" inside mylg to get the missing packages , but some are unavailable ?!!
when i do "go build mylg.go" i get 2 missing packages

/usr/lib/go/src/pkg/github.com/mehrdadrad/mylg/http/ping/ping.go:6:2: import "context": cannot find package

and

/usr/lib/go/src/pkg/github.com/mehrdadrad/mylg/http/ping/ping.go:14:2: import "net/http/httptrace": cannot find package`

add curl support

Hi,

Even though a host may be reachable via icmp/udp, the webserver may have an issue and not display the contents of the website.

Have you ever used curl to see how far the application layer connection gets? Maybe it would be beneficial to add in some kind of fetching application data support. I think this would be especially beneficial with the neat lg support you've added in. Of course I don't know if this is actually something that can be done, just an idea.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.