屏蔽ip网段

配置文件

 

      <add key="BeginIPInner" value="10.32.0.0"/>
      <add key="EndIPInner" value="10.32.254.254"/>
      <add key="BeginIPInner2" value="192.168.0.0"/>
      <add key="EndIPInner2" value="192.168.254.254"/>
      <add key="BeginIPOuter" value="60.247.44.96"/>
      <add key="EndIPOuter" value="60.247.44.128"/>

 

 

.cs代码

        public static Int32 CreateUnionOrder(OrderInfo info)
        {
 

        bool bIP = true;
            string userip = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];//代理服务器的随机IP地址
            var bIPinner = long.Parse(IPToInt(ConfigurationManager.AppSettings["BeginIPInner"]).ToString());
            var eIPinner = long.Parse(IPToInt(ConfigurationManager.AppSettings["EndIPInner"]).ToString());
            var bIPinner2 = long.Parse(IPToInt(ConfigurationManager.AppSettings["BeginIPInner2"]).ToString());
            var eIPinner2 = long.Parse(IPToInt(ConfigurationManager.AppSettings["EndIPInner2"]).ToString());
            var bIPouter = long.Parse(IPToInt(ConfigurationManager.AppSettings["BeginIPOuter"]).ToString());
            var eIPouter = long.Parse(IPToInt(ConfigurationManager.AppSettings["EndIPOuter"]).ToString());
            long lInt = 0;

            if (userip == "" || userip == null)
            {
                userip = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];//客户端ip
                lInt = long.Parse(IPToInt(userip).ToString());

      //如果ip段 在10.32.0.0 到10.32.254.254中间,或者在192.168.0.0到192.168.254.254或者在60.247.44.96到60.247.44.128之间,返回false,不执行业务逻辑,达到屏蔽ip段的目的

                if ((lInt >= bIPinner && lInt <= eIPinner) || (lInt >= bIPinner2 && lInt <= eIPinner2) || (lInt >= bIPouter && lInt <= eIPouter))
                {
                    bIP = false;
                }
            }
            if (bIP)
            {

       //要执行的业务逻辑

    }

   }

 

        public static uint IPToInt(string ipAddress)//把ip转成数字,其实就是把八进制数转换成十进制
        {
            string disjunctiveStr = ".,: ";
            char[] delimiter = disjunctiveStr.ToCharArray();
            string[] startIP = null;
            for (int i = 1; i <= 5; i++)
            {
                startIP = ipAddress.Split(delimiter, i);
            }
            string a1 = startIP[0].ToString();
            string a2 = startIP[1].ToString();
            string a3 = startIP[2].ToString();
            string a4 = startIP[3].ToString();
            uint U1 = uint.Parse(a1);
            uint U2 = uint.Parse(a2);
            uint U3 = uint.Parse(a3);
            uint U4 = uint.Parse(a4);

            uint U = U1 << 24;
            U += U2 << 16;
            U += U3 << 8;
            U += U4;
            return U;
        }

 

        public static string IntToIP(uint ipAddress)//数字转换成ip地址
        {
            long ui1 = ipAddress & 0xFF000000;
            ui1 = ui1 >> 24;
            long ui2 = ipAddress & 0x00FF0000;
            ui2 = ui2 >> 16;
            long ui3 = ipAddress & 0x0000FF00;
            ui3 = ui3 >> 8;
            long ui4 = ipAddress & 0x000000FF;
            string IPstr = "";
            IPstr = System.Convert.ToString(ui1) + "."
                + System.Convert.ToString(ui2) + "."
                + System.Convert.ToString(ui3)
                + "." + System.Convert.ToString(ui4);
            return IPstr;
        }

 

 

 

 

 

转载于:https://www.cnblogs.com/A-I/archive/2010/12/15/1906375.html

### 网段IP地址的关系 网段是指一组具有相同网络号的设备集合,这些设备可以通过本地广播互相通信。IP地址用于唯一标识网络中的每一台设备,而子网掩码则用来区分IP地址中的网络部分和主机部分。 在一个典型的IPv4环境中,IP地址被划分为两部分:网络号和主机号。通过应用子网掩码,可以从完整的IP地址中提取出网络号[^1]。具体来说,子网掩码是一个32位二进制数,其作用是屏蔽IP地址中的主机部分,从而保留网络部分。计算方式如下: \[ \text{网络号} = \text{IP地址} \, \& \, \text{子网掩码} \] 例如,假设有一个IP地址 `192.168.1.5` 和子网掩码 `255.255.255.0`,将其转换为二进制形式并执行按位与操作后可得网络号 `192.168.1.0`[^3]。 ### IP地址配置方法 为了实现有效的网络划分,在实际部署过程中需要合理规划IP地址及其对应的子网掩码。以下是几个关键点: #### 1. **选择合适的IP类别** 根据需求选择适合的IP地址范围(A类、B类或C类),每种类型的默认子网掩码不同。例如,C类地址通常适用于小型局域网,默认子网掩码为 `255.255.255.0`[^4]。 #### 2. **自定义子网划分** 当默认分配无法满足特定场景下的需求时,可通过调整子网掩码进一步细分网络。这有助于减少资源浪费并提高管理效率。例如,对于一个拥有较少节点的小型分支办公室,可以利用更长的子网掩码来创建更多独立子网。 #### 3. **路由器配置** 在网络互联的情况下,每个路由器接口都需要单独指定所属网段的相关参数——包括但不限于该端口所连网络的具体IP地址及相应子网掩码。这样做的目的是让数据包能够准确无误地转发至目标位置[^2]。 ```python # Python 示例展示如何手动验证网络号 def calculate_network_address(ip, subnet_mask): ip_octets = list(map(int, ip.split('.'))) mask_octets = list(map(int, subnet_mask.split('.'))) network_octets = [ (ip_octets[i] & mask_octets[i]) for i in range(4) ] return '.'.join(str(octet) for octet in network_octets) print(calculate_network_address('192.168.1.5', '255.255.255.0')) # 输出应为'192.168.1.0' ``` ### 网络划分的意义 合理的网络划分不仅便于管理和维护,还能有效控制广播流量规模,提升整体性能表现。特别是在大型企业环境下,科学设计各层次间的逻辑隔离显得尤为重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值