獲取計算機廣域網IP的一個例子

最近需要在客戶端加入檢測用戶IP地址,便於分析信息來源的功能。 然而socket的API所獲取到的IP是局域網的,查了下資料,只有穿過NAT之後才能拿到客戶的出口IP地址。 於是變通了一下思路,採用訪問一個web程序的方式,根據http get返回信息拿到客戶端的IP。
測試,用asp寫了一句.

代碼:
<%=Request.ServerVariables("REMOTE_ADDR") %>
不需要太多的信息,只需要返回給我一個IP地址的字符串就行了。

然後用了現成的 基於c的curl開發包,用於向web服務器發起一次請求並且接收數據。這個curl庫很強大,支持文件上傳下載,http get提交,post提交等等很多功能。有興趣的朋友可以瞭解一下。

之後就很簡單了,針對curl進行了一次簡單的封裝,然後發起一個請求並接收就OK
代碼:
//創建返回HTTP信息對象
        receiveInfo myReceiveInfo;
        //定義獲取IP的http地址
        std::string url = "http://www.pal66.com/alan/getip/index.asp";
        //返回IP
        std::string wanIpStr = myReceiveInfo.ReceiveGetInfo(url);
        //轉換格式
        m_localWanIp =wxString(wanIpStr .c_str(),wxConvUTF8);
代碼在getwanipSource.rar
程序在 Release.part01.rar -  Release.part04.rar  沒辦法.支持wxWidgets的運行庫有點大,什麼時候Win7能夠把wxWidgets的運行庫內置就完美了。
windows xp sp3+wxWidgets2.8.9 +CodeBlocks8.0.2+gcc 3.4.5 環境下編譯通過
用vc或者其他工具的朋友。其實將代碼中負責http請求的 curlPlus.h curlPlus.cpp 單獨拿出來加入到自己的工程裏就可以了。這個類是基於標準C++的,爲的是將curl 的c語言風格接口再封裝一次,更加方便而已。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章