将traceroute输出结果中的ip转换为地理地址

系统管理员在排查网络时会经常用到traceroute,traceroute会输出源地址到目的地址途径的ip,如果想知道地理位置需要复制一个个ip,然后google下,查几个还好,ip多的话会让人抓狂。这个脚本调用查询ip地理位置的api,将结果替换到traceroute中。

使用方法:traceroute www.qq.com | ./ip2geography.sh

在fedora下测试通过。

申请查询api的url:https://db-ip.com/api/  free的帐号只显示Country, State/Province, City, 并且一天最多查2000次,对我来说已经足够了。

代码:

 1 #!/bin/sh
 2
 3 while read line; do
 4     l="`echo "$line" | sed -r ‘s/[0-9]+\.[0-9]+ ms//g‘ | sed -r ‘s/ +/ /g‘`"
 5     ips="`echo "$l" | grep -Po ‘\(([0-9]{1,3}\.){3}[0-9]{1,3}\)‘ | sed -r ‘s/\(|\)//g‘`"
 6     for ip in $ips; do
 7         ddd=`curl "http://api.db-ip.com/addrinfo?api_key=3260199d9c38a4b9f9e44fb2a728e55f0971dc7f&addr=$ip" 2>/dev/null`
 8         country="`echo "$ddd" | sed -r ‘s/.*"country":"([^"]*)".*/\1/g‘`"
 9         stat="`echo "$ddd" | sed -r ‘s/.*"stateprov":"([^"]*)".*/\1/g‘`"
10         city="`echo "$ddd" | sed -r ‘s/.*"city":"([^"]*)".*/\1/g‘`"
11         info="$city,$stat,$country"
12         l=`echo "$l" | sed -r ‘s/\(‘$ip‘\)/\[‘"$info"‘\]/g‘`
13     done
14     echo "$l"
15 done

原始的输出:

traceroute to www.qq.com (23.0.160.18), 30 hops max, 60 byte packets
 1  216.182.224.194 (216.182.224.194)  1.762 ms  1.675 ms  1.607 ms
 2  100.64.8.115 (100.64.8.115)  1.217 ms 100.64.8.125 (100.64.8.125)  1.251 ms 100.64.8.117 (100.64.8.117)  1.082 ms
 3  100.64.0.38 (100.64.0.38)  1.307 ms 100.64.0.84 (100.64.0.84)  1.299 ms 100.64.0.210 (100.64.0.210)  1.161 ms
 4  100.64.16.45 (100.64.16.45)  0.291 ms 100.64.16.91 (100.64.16.91)  0.348 ms 100.64.16.219 (100.64.16.219)  0.283 ms
 5  205.251.245.235 (205.251.245.235)  1.233 ms  1.169 ms 205.251.245.241 (205.251.245.241)  1.182 ms
 6  72.21.220.30 (72.21.220.30)  1.271 ms 72.21.220.70 (72.21.220.70)  1.272 ms  1.202 ms
 7  equinix-iad8.netarch.akamai.com (206.126.236.103)  1.355 ms  1.477 ms  1.482 ms
 8  a23-0-160-18.deploy.static.akamaitechnologies.com (23.0.160.18)  1.304 ms  1.487 ms  1.662 ms

转换后的输出:

traceroute to www.qq.com [Cambridge (Mit),Massachusetts,US], 30 hops max, 60 byte packets
1 216.182.224.200 [Seattle (Greater Duwamish),Washington,US]
2 100.64.13.55 [Los Angeles (Westchester),California,US] 100.64.13.53 [Los Angeles (Westchester),California,US] 100.64.13.7 [Los Angeles (Westchester),California,US]
3 100.64.0.144 [Los Angeles (Westchester),California,US] 100.64.0.200 [Los Angeles (Westchester),California,US] 100.64.0.12 [Los Angeles (Westchester),California,US]
4 100.64.16.249 [Los Angeles (Westchester),California,US] 100.64.16.155 [Los Angeles (Westchester),California,US] 100.64.16.83 [Los Angeles (Westchester),California,US]
5 205.251.245.241 [New York (Manhattan),New York,US] 205.251.245.235 [New York (Manhattan),New York,US] 205.251.245.54 [New York (Manhattan),New York,US]
6 72.21.220.30 [Seattle (Lake Union),Washington,US] 72.21.220.70 [Seattle (Lake Union),Washington,US]
7 equinix-iad8.netarch.akamai.com [Redwood City,California,US]
8 a23-0-160-83.deploy.static.akamaitechnologies.com [Cambridge (Mit),Massachusetts,US] 

转换后的结果就很方便地看到路由都跑到哪里去了,使用Amazon的ec2进行的测试,加上腾讯在美国部署有服务器,所以结果中的ip都在美国。

时间: 2024-10-14 03:02:10

将traceroute输出结果中的ip转换为地理地址的相关文章

获得Unix/Linux系统中的IP、MAC地址等信息

获得Unix/Linux系统中的IP.MAC地址等信息 中高级  |  2010-07-13 16:03  |  分类:①C语言. Unix/Linux. 网络编程 ②手册  |  4,471 次阅读 作者:diaoyf  |  文章来源:http://programmerdigest.cn 实际环境和特殊需求往往会将简单问题复杂化,比如计算机IP地址,对于一个连接中socket,可以直接获得本端和对端的IP.端口信息.但在一些特殊场合我们可能需要更多的信息,比如系统中有几块网卡,他们的Mac地

PHP中根据IP地址判断所在城市等信息

本篇文章由:http://xinpure.com/php-based-on-information-such-as-the-ip-address-in-your-city/ 获得IP地址 在 PHP 中得到当前访问者的IP地址,还是比较简单的: $ip = $_SERVER['REMOTE_ADDR'] 将IP转换为城市等信息 淘宝提供了一个IP数据接口: http://ip.taobao.com/service/getIpInfo.php?ip=ip地址 $response = file_ge

Linux命令:traceroute(windows中为tracert)

通过traceroute 我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径.当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上 来说大部分时候所走的路由是相同的.Linux 系统中个,我们称之为 tracertoute,在 MS  Windows 中为 tracert. traceroute 通过发送小的数据包到目的设备直到其返回,来测量其需要多长时间.一条路径上的每个设备traceroute要测3次.输出结

C语言中字符串如何转换为二进制、八进制、十进制、十六进制

在C语言某个程序当中需要把文本16进制转换成对应的16进制数,比如字符串"0x1a"转换成10进制的26,可以用以下函数来实现 相关函数: atof, atoi, atol, strtod, strtoul表头文件: #include <stdlib.h>定义函数: long int strtol(const char *nptr, char **endptr, int base):函数的解释说明 这个函数会将参数nptr字符串根据参数base来转换成长整型数.参数base

组播IP转换为组播MAC地址【转载】

链接:https://www.zhihu.com/question/36730567/answer/83083851来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 组播IP转换为组播MAC地址是一种32:1的映射关系.组播IP地址:IANA将D类地址空间分配给IP组播地址.该空间的地址用二进制表示并且第一个八位组的前4位用1110表示, 因此IP组播地址的范围从224.0.0.0到239.255.255.255 . 组播MAC地址:IEEE MAC地址规定了第一个

kvm中raw格式转换为qcow2格式节省主机空间

kvm中raw格式转换为qcow2格式节省主机空间 virsh list --all qemu-img  info /data2/fdfs1.img qemu-img convert -f raw -O qcow2 /data2/CDH_003.img /data2/CDH_003.qcow2 virsh edit CDH_003 chown -R   qemu:qemu /data2/CDH_003.qcow2 然后通过vnc图形化界面连接对应的宿主IP,把如下地方打钩 原文地址:http:/

LeetCode:Spiral Matrix - 螺旋输出矩阵中的元素

1.题目名称 Spiral Matrix(螺旋输出矩阵中的元素) 2.题目地址 https://leetcode.com/problems/spiral-matrix/ 3.题目内容 英文:Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order. 中文:给出一个m行n列的矩阵,以螺旋顺序返回矩阵中的所有元素. 例如:现有矩阵如下: [  [ 1,

调整Win7中TCP/IP半开连接数限制

调整Win7中TCP/IP半开连接数限制 相信大家都有过这样的经历,普通的ADSL宽带下,打开下载工具下载资源时,再想浏览网页就会变得非常困难了,Windows7中也未能幸免. 究其原因,一方面是某些下载软件在下载时为了追求速度会不惜占用全部带宽,另一方面也是由于微软出于安全考虑,限制了系统中的TCP/IP半开连接数. 而去除限制的方法也很简单: * WIN R运行regedit * 找到 HKEY_LOCAL_MACHINESYSTEM\CurrentControlSet\Services\T

LVS集群中的IP负载均衡技术

章文嵩 ([email protected]) 转自LVS官方参考资料 2002 年 4 月 本文在分析服务器集群实现虚拟网络服务的相关技术上,详细描述了LVS集群中实现的三种IP负载均衡技术(VS/NAT.VS/TUN和VS/DR)的工作原理,以及它们的优缺点. 1.前言在 前面文章中,讲述了可伸缩网络服务的几种结构,它们都需要一个前端的负载调度器(或者多个进行主从备份).我们先分析实现虚拟网络服务的主要技术,指出 IP负载均衡技术是在负载调度器的实现技术中效率最高的.在已有的IP负载均衡技术