go语言版trace

其实mtr这个已经很好用了。但是总有缺点的地方。

而网上的go语言版的trace工具其实都是按样把trace的功能实现了一下,但是我们其实需要更多的东西。

你trace的路径到底经历了哪些国家,哪些运营商其实是我更想知道,因为要搞全球代理,这个是必须要做的。不然你看到的只是一个个简单的IP。

了解网络的人都知道Autonomous System这个东西。这个是bgp(边界网关协议)协议里的东西。它是为了所有不相关路由进行通信而存在的。我们所谓的跨运营商其实就是过了bgp协议。

而一般大厂都是自己有as number的。而一个IP一般都属于某个as的。于是就根据网上现成的代码手动撸了一个

主要是参考了下面这个:

https://segmentfault.com/a/1190000020048492

最终我的代码就放到了https://github.com/timoseven/gotrace
这个后面还要加上mtr相关的内容。

这个就是最终的执行结果,内网IP肯定是没有as号的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
sudo ./gotrace -H 8.8.8.8
using 8.8.8.8 for tracing an IP packet route to 8.8.8.8
1 172.18.213.1 [mirages.mshome.net.] 288µs Country_code: AS:0
2 10.1.1.1 [] 1.5979ms Country_code: AS:0
3 192.168.199.1 [] 2.9589ms Country_code: AS:0
4 100.102.128.1 [] 5.9134ms Country_code: AS:0
5 211.136.66.25 [] 6.6211ms Country_code:CN AS:56048 China Mobile Communicaitons Corporation
6 * NULL
7 * NULL
8 111.24.14.53 [] 8.2766ms Country_code:CN AS:9808 Guangdong Mobile Communication Co.Ltd.
9 111.24.2.238 [] 10.6841ms Country_code:CN AS:9808 Guangdong Mobile Communication Co.Ltd.
10 221.176.27.254 [] 9.8699ms Country_code:CN AS:9808 Guangdong Mobile Communication Co.Ltd.
11 * NULL
12 221.183.55.101 [] 39.1785ms Country_code:CN AS:9808 Guangdong Mobile Communication Co.Ltd.
13 * NULL
14 223.120.6.70 [] 230.5406ms Country_code:HK AS:58453 Level 30, Tower 1
15 * NULL
16 108.170.242.241 [] 223.2752ms Country_code:US AS:15169 GOOGLE
17 209.85.248.35 [] 210.1944ms Country_code:US AS:15169 GOOGLE
18 8.8.8.8 [dns.google.] 224.1176ms Country_code:US AS:15169 GOOGLE

但是这个其实不是最好的,毕竟带着2个mmdb文件到处分发并发,还是放到服务里,用http的形式对外提供最好了,毕竟所有机器都会有curl,对于不能访问访问公网的机器这个东西也没有什么必要。

本来一想nginx貌似有这个啊,但是看了只能解析city的。没有解析as号的。那就再撸一个。结果小白讲话,你直接拿go来启动http服务不就得了,改nginx还得写c代码,那可不会那么快了,想想也是。go启动一个http server不是分分钟的事情。