獲取本地電腦的ip
阿新 • • 發佈:2018-11-06
獲取本機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#後臺方法來判斷,否則判斷時是一直判斷的伺服器上的本機。