none
如何设置某段IP才可以运行登录 RRS feed

  • 问题

  • 小弟想实现这样的一个功能, 就是只运行某段IP访问我的窗体,只要IP不在这个范围就不可以。现在我只能是指定某个IP,而不是某段。怎样才能实现 比如10.139.xxx.xxx 这样的一个范围呢。
    private void button1_Click(object sender, EventArgs e)
            {
                string sqlserver = "Data Source=localhost\\SQLEXPRESS;Initial Catalog=stu;Integrated Security=True";
                string sql = "select * from student_form where stu_id='" + textBox1.Text + "'";
                IPAddress ipaddress = new System.Net.IPAddress(Dns.GetHostByName(Dns.GetHostName()).AddressList[0].Address);
                string ip_add = ipaddress.ToString();
                string myip = "10.139.28.22";
                // if (textBox1.Text == "")
                if (ip_add != myip)
                {
                    MessageBox.Show("Sorry, come to the lab.");
                }
                else
                {
                    using (SqlConnection con = new SqlConnection(sqlserver))
                    {
                        con.Open();
                        SqlCommand cmd = new SqlCommand(sql, con);
                        SqlDataReader sdr = cmd.ExecuteReader();
                        sdr.Read();
                        if (sdr.HasRows)
                        {
                            sdr.Close();
                            MessageBox.Show("login successfully!", "", MessageBoxButtons.OK);
                            Form2 f2 = new Form2(this);
                            f2.Show();
                        }
                        else
                        {
                            sdr.Close();
                            MessageBox.Show("sorry,unsuccessful login", "", MessageBoxButtons.OK);
                        }
                    }
                }
            }
    2011年5月3日 8:36

答案

  • 最简单的办法就是把 IP 地址转成二进制然后进行比较。如您机器 IP 是 192.168.0.1,需要的 IP 范围是 192.168.0.0 到 192.168.255.255,那么:您机器的 IP,二进制与上起始值,应该不小于起始值;并且,机器 IP 二进制与上范围最大值,不大于范围最大值。

    IP 地址是一个 32 位的二进制整数,了解了这一点就很容易做比较了。


    Mark Zhou
    2011年5月3日 9:07
  • 把IP转换为数组,比较数组的前2个元素,如果相等就是许可的范围。

     


    family as water
    2011年5月3日 9:26
  • 也可以直接用String.IndexOf()方法来实现:

          string myip = "10.139.28.22";
          if (myip.IndexOf("10.139.") == 0)
                  Console.WriteLine("在地址段内!");
    


    Leo Liu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年5月9日 3:20
    版主

全部回复

  • 最简单的办法就是把 IP 地址转成二进制然后进行比较。如您机器 IP 是 192.168.0.1,需要的 IP 范围是 192.168.0.0 到 192.168.255.255,那么:您机器的 IP,二进制与上起始值,应该不小于起始值;并且,机器 IP 二进制与上范围最大值,不大于范围最大值。

    IP 地址是一个 32 位的二进制整数,了解了这一点就很容易做比较了。


    Mark Zhou
    2011年5月3日 9:07
  • 把IP转换为数组,比较数组的前2个元素,如果相等就是许可的范围。

     


    family as water
    2011年5月3日 9:26
  • 也可以直接用String.IndexOf()方法来实现:

          string myip = "10.139.28.22";
          if (myip.IndexOf("10.139.") == 0)
                  Console.WriteLine("在地址段内!");
    


    Leo Liu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年5月9日 3:20
    版主