公司老大今天使用了dos命令ping,他想看到其中ip地址对应的地域名称。
如dos下命令ping www.qq.com的输出结果是:
正在 Ping www.qq.com [113.108.20.50] 具有 32 字节的数据:
来自 113.108.20.50 的回复: 字节=32 时间=3ms TTL=52
来自 113.108.20.50 的回复: 字节=32 时间=3ms TTL=52
来自 113.108.20.50 的回复: 字节=32 时间=2ms TTL=52
来自 113.108.20.50 的回复: 字节=32 时间=3ms TTL=52
113.108.20.50 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 2ms,最长 = 3ms,平均 = 2ms
如果上面的输出结果中每个ip后面跟着相应的地域名称是不是更好点?
老大给了一个url https://www.surfchen.org/nali,这位老兄使用了纯真ip数据库,给出了linux下的相应实现。
有了相应的参考,我们便可以实现windows下的相应实现了,详细步骤如下:
1 创建匿名管道,截获相应dos命令输出结果的每一行的字符串,如果输出为空,则退出,否则进行下面步骤;
2 提取出字符串中的ip地址,如果没有ip地址,直接跳到第5步;
3 调用纯真ip数据库的相关接口获取相应的地域名称;
4 把地域名称字符串插入到原字符串的后面,形成新字符串,输出;
5回到第一步。
上面的关键在于创建匿名管道,然后截取字符串中的ip地址。
我使用了VC2010创建了相关工程,如果要在Debug模式下进行调试,注意把数据库QQWry.Dat复制到工程的Debug目录下面。
发布的时候,把程序tr.exe和QQWry.Dat放在一个目录下发布,其使用格式是tr dos command 或 tr.exe dos command,如tr ping www.qq.com,其结果如下:
正在 Ping www.qq.com [113.108.20.50 广东省深圳市 电信] 具有 32 字节的数据:
来自 113.108.20.50 广东省深圳市 电信 的回复: 字节=32 时间=3ms TTL=52
来自 113.108.20.50 广东省深圳市 电信 的回复: 字节=32 时间=3ms TTL=52
来自 113.108.20.50 广东省深圳市 电信 的回复: 字节=32 时间=3ms TTL=52
来自 113.108.20.50 广东省深圳市 电信 的回复: 字节=32 时间=3ms TTL=52
如果要输出命令tracert的结果相关地域名称,使用命令就是tr tracert www.qq.com 或 tr.exe tracert www.qq.com。
具体源码在我的csdn资源站http://download.csdn.net/user/menggucaoyuan。
我的email是alexstocks@foxmail.com,欢迎索要程序或者报告bug。