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