其实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不是分分钟的事情。