JavaScript在IE下獲取本機IP

JavaScript在IE下獲取本機IP

描述:

最近遇到一個需求,要進行日誌記錄,其中包含了IE瀏覽器客戶端IP地址的記錄。在嘗試了從request中獲取IP地址後,在沒有出現代理IP的情況下,可以正常獲取。即:局域網下,可以收集客戶端IP成功。但一旦出現代理IP的情況,就獲取不到我們正確的IP地址了。

分析:

方式一:從request中取IP。若客戶端是直接IP進行訪問,此時獲取IP地址成功;一旦客戶端的網絡是通過代理IP進行訪問的情況下,此時從request中會獲取多個IP地址,嘗試了幾種方法均未能獲取到正確的IP。或許有其他的方法,暫未發現。【優點:無須安裝或設置IE瀏覽器的ActiveX控件,缺點:並不是一直適用】

方式二:ActiveX方式取IP。因爲ActiveX控件是安裝在IE瀏覽器,也就是客戶端機器上的,此時獲取的客戶端機器上的IP地址是沒有問題的。【優點:獲取爲真實IP,缺點:需要進行瀏覽器設置】

解決方式:

此時,還是採用了ActiveX控件的方式來獲取客戶端IP地址:

代碼Demo如下:

<script language="javascript">
    var sMacAddr="";
    var sIPAddr="";
    var sDNSName="";
    var service = locator.ConnectServer();
    service.Security_.ImpersonationLevel=3;
    service.InstancesOfAsync(foo, 'Win32_NetworkAdapterConfiguration');
</script>
<script FOR="foo" EVENT="OnObjectReady(objObject,objAsyncContext)" LANGUAGE="JScript">
    if(objObject.IPEnabled != null && objObject.IPEnabled != "undefined" && objObject.IPEnabled == true){
        if(objObject.IPEnabled && objObject.IPAddress(0) !=null && objObject.IPAddress(0) != "undefined")
            sIPAddr = objObject.IPAddress(0);
        if(objObject.MACAddress != null &&objObject.MACAddress != "undefined")
            sMacAddr = objObject.MACAddress;
        if(objObject.DNSHostName != null &&objObject.DNSHostName != "undefined")
            sDNSName = objObject.DNSHostName;
    }
</script>
<script FOR="foo" EVENT="OnCompleted(hResult,pErrorObject, pAsyncContext)" LANGUAGE="JScript">
    myForm.macAddress.value=sMacAddr;
    myForm.ipAddress.value=sIPAddr;
    myForm.hostName.value=sDNSName;
</script>

IE8或IE9瀏覽器設置方法:

打開瀏覽器的“Internet 選項”,找到“安全”,“可信任站點”,把系統的訪問IP或域名添加到可信任站點,並取消服務器驗證,然後找到“自定義級別”,找到“ActiveX控件和插件”設置選項的第三項,勾選爲“啓用”。關閉設置,完成瀏覽器設置。

注:若不進行瀏覽器設置,IE瀏覽器會默認攔截ActiveX控件的使用】

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章