1. 程式人生 > >獲取本地電腦的ip

獲取本地電腦的ip

獲取本機ip的方法我實現的是一種通過C#後臺方法來獲取,這個需要自己篩選完返回前端,而且這種的話在本地電腦執行獲取ip是沒有問題的,但是如果部署到IIS伺服器上,那麼獲取的ip就一直都是IIS伺服器上的ip地址,所以如果是做web開發的話,還是不要用這種,另一種是js獲取的方法,但是不支援IE瀏覽器。

先看第一種:

 public void getIp()
        {
            DataTable tbl = new DataTable();
            tbl.Columns.Add("id", typeof(String)); //Id
            tbl.Columns.Add("realIp", typeof(String)); 
            string name = Dns.GetHostName();
            IPAddress[] ipadrlist = Dns.GetHostAddresses(name);
            DataRow row = tbl.NewRow();
            for (int i = 0; i < ipadrlist.Length; i++)
            {
                if(ipadrlist[i].ToString().Split('.')[0]=="192"|| ipadrlist[i].ToString().Split('.')[0]=="172")
                {
                    row["id"] = 1;
                    row["realIp"] = ipadrlist[i];
                    tbl.Rows.Add(row);
                    break;
                }
            }
            // Console.WriteLine(ipa.ToString());
            string json = JSON.Encode(tbl); //轉換為json字串
            Response.Write(json);
        }

我這裡的ip獲取僅僅需要192和172的,所以判別條件自己做調整即可。

第二種:

function getUserIP(onNewIP) { //  onNewIp - your listener function for new IPs
        //compatibility for firefox and chrome
        var myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
        var pc = new myPeerConnection({
            iceServers: []
        }),
       noop = function () { },
       localIPs = {},
       ipRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g,
       key;

        function iterateIP(ip) {
            if (!localIPs[ip]) onNewIP(ip);
            localIPs[ip] = true;
        }

        //create a bogus data channel
        pc.createDataChannel("");

        // create offer and set local description
        pc.createOffer().then(function (sdp) {
            sdp.sdp.split('\n').forEach(function (line) {
                if (line.indexOf('candidate') < 0) return;
                line.match(ipRegex).forEach(iterateIP);
            });

            pc.setLocalDescription(sdp, noop, noop);
        }).catch(function (reason) {
            // An error occurred, so handle the failure to connect
        });

        //sten for candidate events
        pc.onicecandidate = function (ice) {
            if (!ice || !ice.candidate || !ice.candidate.candidate || !ice.candidate.candidate.match(ipRegex)) return;
            ice.candidate.candidate.match(ipRegex).forEach(iterateIP);
        };
    }

方法的調取:

getUserIP(function (ip) {
                    realIp = ip;
                });

這種js獲取ip的方法對於web開發是沒有問題的。

另外web開發類似於這種判斷本機ip、判斷本機上是否有固定檔案等都不可以用C#後臺方法來判斷,否則判斷時是一直判斷的伺服器上的本機。