获取本地电脑的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#后台方法来判断,否则判断时是一直判断的服务器上的本机。

猜你喜欢

转载自blog.csdn.net/qq_25086397/article/details/83781788