公司老大今天使用了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是[email protected],歡迎索要程序或者報告bug。