禁止一台机器访问外网?C#怎么实现?

解决方案 »

  1.   

    我觉得最好的办法应该是调用WindowsAPI,在驱动层截获数据包。其次,可以修改网关地址,实现ARP欺骗。
      

  2.   

    看你怎么定义外网。再说C#禁止访问外网,那么把C#程序关了不就又可以访问了?假设局域网中有一台电脑能访问外网,我的电脑通过它做代理访问,算不算访问外网?总之,这是一个似是而非的问题。lz先普及下网络知识,再来分析吧。最好的办法是,网关做防火墙。
      

  3.   

    第一个具体怎么实现没研究,但是肯定可以实现
    第二个,太简单了,自己去了解下ARP。。
      

  4.   

    用域控可以么?
    ISA TMG可以提供很好的网关功能,by the way
      

  5.   

    taolinsen
    首先提出的办法有一定参考性草稿源码送给大家
    private void button1_Click(object sender, EventArgs e)
            {
                NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
                foreach (NetworkInterface adapter in nics)
                {
                    if (adapter.NetworkInterfaceType.ToString().Equals("Ethernet"))
                    {
                        IPInterfaceProperties ip = adapter.GetIPProperties();     //IP配置信息
                        if (ip.UnicastAddresses.Count > 0)
                        {
                            ip.UnicastAddresses[0].Address.ToString();   //IP地址
                            ip.UnicastAddresses[0].IPv4Mask.ToString();  //子网掩码
                        }
                        if (ip.GatewayAddresses.Count > 0)
                            this.wangguanIP.Add(ip.GatewayAddresses[0].Address.ToString());   //默认网关
                        if (ip.GatewayAddresses.Count > 2)
                            this.wangguanIP.Add(ip.GatewayAddresses[1].Address.ToString()); //备用网关
                        if (ip.DnsAddresses.Count > 0)
                        {
                            ip.DnsAddresses[0].ToString();       //首选DNS服务器地址
                            if (ip.DnsAddresses.Count > 1)
                                ip.DnsAddresses[1].ToString();
                            ip.DnsAddresses[1].ToString();//备用DNS服务器地址
                        }
                    }
                }
                foreach (var v in this.wangguanIP)
                {
                    this.textBox1.Text += v + "\r\n";
                }        }        private void button2_Click(object sender, EventArgs e)
            {
                ManagementBaseObject inPar = null;
                ManagementBaseObject outPar = null;
                ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
                ManagementObjectCollection moc = mc.GetInstances();
                foreach (ManagementObject mo in moc)
                {
                    if (!(bool)mo["IPEnabled"])
                        continue;                //设置网关地址 
                    inPar = mo.GetMethodParameters("SetGateways");
                    inPar["DefaultIPGateway"] = new string[] { "1.2.3.4" }; // 1.网关
                    outPar = mo.InvokeMethod("SetGateways", inPar, null);
                    break;
                }
            }        private void button3_Click(object sender, EventArgs e)
            {
                ManagementBaseObject inPar = null;
                ManagementBaseObject outPar = null;
                ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
                ManagementObjectCollection moc = mc.GetInstances();
                foreach (ManagementObject mo in moc)
                {
                    if (!(bool)mo["IPEnabled"])
                        continue;                //设置DNS 
                    inPar = mo.GetMethodParameters("SetGateways");
                    inPar["DefaultIPGateway"] = this.wangguanIP.ToArray(); // 1.网关
                    outPar = mo.InvokeMethod("SetGateways", inPar, null);
                    break;
                }
            }