首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

|zyciis| 但了一个投票系统,但怎么确定取局域网的IP呢

2012-02-23 
|zyciis| 但了一个投票系统,但如何确定取局域网的IP呢做了一个公司投票功能要求如下1:提供一个地址给多个

|zyciis| 但了一个投票系统,但如何确定取局域网的IP呢
做了一个公司投票功能要求如下
1:提供一个地址给多个兄弟公司访问投票
2:要求每个人只能投一次票

这里的难点是,我如何区分兄弟公司他们内部的IP是多少呢

因为我用Request.Url.Address得到的只是他们的公网IP
那我保存投票过的IP能是他们共用的外网IP 那就只能有一人了

如果我表设计为
IP LocalIP
XX XXX
这里的IP能得到了那LocalIP要怎么来得到呢

谢谢


[解决办法]

C# code
string userIp;if(Request.ServerVariables["HTTP_VIA"] != null)  userIP = Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();else  userIP = Request.ServerVariables["REMOTE_ADDR"].ToString();
[解决办法]
那如果IP不固定,岂不是可以多投?
[解决办法]
只提供一个思路吧,不太确定是否可以用机器的MAC地址来判断?
如果只有一个公网IP,那IP相同,不过每台机器的MAC地址不同,可否通过调用API来获取客户端的MAC地址,一同获取然后根据IP+MAC的形式判断呢?
[解决办法]
C# code
public static string GetIP()        {            string result = String.Empty;            result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];            if (null == result || result == String.Empty)            {                result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];            }            if (null == result || result == String.Empty)            {                result = HttpContext.Current.Request.UserHostAddress;            }            if (null == result || result == String.Empty || !Utils.IsIP(result))            {                return "0.0.0.0";            }            return result;        }
[解决办法]
IP现在多数不固定,通过注册用户来避免吧
[解决办法]
C# codepublic static string GetIP()
{


string result = String.Empty;

result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (null == result || result == String.Empty)
{
result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}

if (null == result || result == String.Empty)
{
result = HttpContext.Current.Request.UserHostAddress;
}

if (null == result || result == String.Empty || !Utils.IsIP(result))
{
return "0.0.0.0";
}

return result;

}


[解决办法]
首先可以否定你的取内网ip的方法

比如 a 公司有人内网ip是 192.168.0.123
b公司也有人内网ip是 192.168.0.123

这样的话a公司的这个人投票后 b公司的这个人就无法投票啦

其次 通过web取得用户本机ip(内网ip) 应该无法直接取 只能通过com控件来实现了。

最后 投票限制ip的方法不可取 可以通过切换代理来大量投票
建议还是限制一个登录用户只能投票1次把,或者其他方法。

[解决办法]
你要去本机内网的IP是不可能的....可以用下cookie.
C# code
            //投票防作弊            HttpCookie makecookie = new HttpCookie("Vote");//制造cookie            HttpCookie readcookie = Request.Cookies["Vote"];//读出cookie            if (readcookie == null)//从未投过票            {                makecookie.Values.Add("VoteItem", "<" + strID + ">");            }            else            {                //Response.Write(readcookie.Values["VoteItem"]);                //Response.End();                string strAllItem = readcookie.Values["VoteItem"].ToString();//读取已投票的项                if (strAllItem.IndexOf("<" + strID + ">") == -1)//未投过票                {                    makecookie.Values.Add("VoteItem", readcookie.Values["VoteItem"] + "<" + strID + ">");                }                else//如果已投过票                {                    Response.Write("<script language=javascript>alert('该主题你已经成功投过票,不能重新投票!');</script>");                    return;                    //Response.Write("<script language=javascript>alert('该主题你已经成功投过票,不能重新投票!');location='Index.aspx'</script>");                }            }            Response.AppendCookie(makecookie);//写入Cookie            string strSelect = strContent.Split('|')[Convert.ToInt32(this.RadioButtonList1.SelectedValue.ToString())];//当前选中的项目,如“ 2,不错”            int intVote = Convert.ToInt32(strSelect.Split(',')[0]);//当前投票数+1            int intVoteOK = intVote + 1;            string strSelectOK = strSelect.Replace(intVote.ToString(), intVoteOK.ToString());//更新原投票数,所以期望更新的定位精确,可附带+","            string strUPDATE = strContent.Replace(strSelect, strSelectOK);//得到最终            SqlData da = new SqlData();            bool update = da.ExceSQL("update tb_Vote set Content='" + strUPDATE + "' where ID='" + strID + "'");            if (update)            {                Response.Write("<script language=javascript>alert('投票成功!');</script>");            }            else            {                Response.Redirect("Index.aspx");            }        } 


[解决办法]
你要去本机内网的IP是不可能的....可以用下cookie.

C# code
            //投票防作弊            HttpCookie makecookie = new HttpCookie("Vote");//制造cookie            HttpCookie readcookie = Request.Cookies["Vote"];//读出cookie            if (readcookie == null)//从未投过票            {                makecookie.Values.Add("VoteItem", "<" + strID + ">");            }            else            {                //Response.Write(readcookie.Values["VoteItem"]);                //Response.End();                string strAllItem = readcookie.Values["VoteItem"].ToString();//读取已投票的项                if (strAllItem.IndexOf("<" + strID + ">") == -1)//未投过票                {                    makecookie.Values.Add("VoteItem", readcookie.Values["VoteItem"] + "<" + strID + ">");                }                else//如果已投过票                {                    Response.Write("<script language=javascript>alert('该主题你已经成功投过票,不能重新投票!');</script>");                    return;                    //Response.Write("<script language=javascript>alert('该主题你已经成功投过票,不能重新投票!');location='Index.aspx'</script>");                }            }            Response.AppendCookie(makecookie);//写入Cookie            string strSelect = strContent.Split('|')[Convert.ToInt32(this.RadioButtonList1.SelectedValue.ToString())];//当前选中的项目,如“ 2,不错”            int intVote = Convert.ToInt32(strSelect.Split(',')[0]);//当前投票数+1            int intVoteOK = intVote + 1;            string strSelectOK = strSelect.Replace(intVote.ToString(), intVoteOK.ToString());//更新原投票数,所以期望更新的定位精确,可附带+","            string strUPDATE = strContent.Replace(strSelect, strSelectOK);//得到最终            SqlData da = new SqlData();            bool update = da.ExceSQL("update tb_Vote set Content='" + strUPDATE + "' where ID='" + strID + "'");            if (update)            {                Response.Write("<script language=javascript>alert('投票成功!');</script>");            }            else            {                Response.Redirect("Index.aspx");            }        }
[解决办法]
得考虑一下子
[解决办法]
探讨
IP现在多数不固定,通过注册用户来避免吧

[解决办法]
肯定要检测IP的。要不我注册100个用户投了100票那还公平么。
[解决办法]
4楼的方法可以获取外网的IP。但是不知道能不能获取到有代理的IP
[解决办法]
C# code
获取服务器的IP地址方法以DNS法较为简单实用,如下:   using System.Net;    private void ButtonIP_Click(object sender, System.EventArgs e)   {       System.Net.IPAddress[] addressList = Dns.GetHostByName(Dns.GetHostName()).AddressList;      if ( addressList.Length>1)      {   TextLIP.Text = addressList[0].ToString();           TextSIP.Text = addressList[1].ToString();      }      else      {           TextLIP.Text = addressList[0].ToString();           TextSIP.Text = "没有可用的连接";      }   } 获取服务器的IP地址与MAC地址另一方法如下:    using System.Management;      string stringMAC = "";    string stringIP = "";    ManagementClass MC = new ManagementClass "Win32_NetworkAdapterConfiguration");    ManagementObjectCollection MOC= MC.GetInstances();       foreach(ManagementObject MO in MOC)    {     if ((bool)MO["IPEnabled"] == true)     {      stringMAC += MO["MACAddress"].ToString();      TextMAC.Text = stringMAC.ToString();      string[] IPAddresses = (string[]) MO["IPAddress"];      if(IPAddresses.Length > 0)      stringIP = IPAddresses[0];      TextIP.Text = stringIP.ToString();     }    } 


[解决办法]
取不到的.
客户端脚本到是可以取到.客户端的地址(mac也能).就是有安全限制

你可以考虑用cookie来实现让他只能投一次.



不过话说话回来,上有政策下有对策.....xxx
[解决办法]
16楼,获取服务器的地址没什么用吧?

投票是在客户端
[解决办法]
下面的例子可以获取客户端机器的mac地址,ip地址,和计算机名.
你要非想搞可以用下边取mac地址的功能想想办法
不过是用了activex,这样就有一些限制了.

你觉得你用cookie就够了.

参考:

HTML code
<HTML><HEAD><TITLE>WMI Scripting HTML</TITLE><META http-equiv=Content-Type content="text/html; charset=gb2312"><SCRIPT language=JScript event="OnCompleted(hResult,pErrorObject, pAsyncContext)" for=foo> document.forms[0].txtMACAddr.value=unescape(MACAddr); document.forms[0].txtIPAddr.value=unescape(IPAddr); document.forms[0].txtDNSName.value=unescape(sDNSName); //document.formbar.submit();  </SCRIPT><SCRIPT language=JScript event=OnObjectReady(objObject,objAsyncContext) for=foo>   if(objObject.IPEnabled != null && objObject.IPEnabled != "undefined" && objObject.IPEnabled == true)   {    if(objObject.MACAddress != null && objObject.MACAddress != "undefined")    MACAddr = objObject.MACAddress;    if(objObject.IPEnabled && objObject.IPAddress(0) != null && objObject.IPAddress(0) != "undefined")    IPAddr = objObject.IPAddress(0);    if(objObject.DNSHostName != null && objObject.DNSHostName != "undefined")    sDNSName = objObject.DNSHostName;    }  </SCRIPT><META content="MSHTML 6.00.2800.1106" name=GENERATOR></HEAD><BODY><OBJECT id=locator classid=CLSID:76A64158-CB41-11D1-8B02-00600806D9B6 VIEWASTEXT></OBJECT><OBJECT id=foo classid=CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223></OBJECT><SCRIPT language=JScript>   var service = locator.ConnectServer();   var MACAddr ;   var IPAddr ;   var DomainAddr;   var sDNSName;   service.Security_.ImpersonationLevel=3;   service.InstancesOfAsync(foo, 'Win32_NetworkAdapterConfiguration');   </SCRIPT><FORM id=formfoo name=formbar action=NICPost.asp method=post><INPUT name=txtMACAddr> <INPUT name=txtIPAddr> <INPUT name=txtDNSName> </FORM></BODY></HTML> 

热点排行