`
ouyangfeng521
  • 浏览: 248700 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

C#soapheader ip 过滤

    博客分类:
  • C#
 
阅读更多

 

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Collections;
using System.Text.RegularExpressions;
using System.Xml;
using Core;

namespace GreenWebService
{
    #region MyRegion
    

    /// <summary>
    /// 此类为单例模式,实现ip认证,调用方法如果下
    /// AuthIP.getInstance(AppDomain.CurrentDomain.BaseDirectory + "App_Data/ipconfig.xml").AuIp("192.168.0.1")
    /// 其中AppDomain.CurrentDomain.BaseDirectory + "App_Data/ipconfig.xml"为配置文件xml的路径
    /// 192.168.0.1为需要认证的IP地址
    /// </summary>
    public class AuthIP
    {

        public const String REGEX_IP = @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$"; //验证ip地址正则表达式

        //验证ip段地址正则表达式
        public const String REGEX_AREA_IP = @"((25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)-((25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)";

        private ArrayList auths = new ArrayList();

        private static AuthIP authInstance;

        private AuthIP() { }

        public static AuthIP getInstance(String filepath)
        {
            if (null == authInstance)
            {
                authInstance = new AuthIP();
                authInstance.ParseXml(filepath);
            }
            return authInstance;
        }

        public bool AuthIp(String ip)
        {
            if(null == ip || !IsIp(ip))
            {
                throw new Exception("参数是空的或者参数不是ip");
            }

            foreach (IAuthIP iau in auths)
            {
                if (iau.Auth(ip))
                {
                    return true;
                }
            }

            return false;
        }

        /// <summary>
        /// 读取配置文件里的配置信息
        /// </summary>
        /// <param name="filepath"></param>
        private void ParseXml(String filepath)
        {
            XmlNodeList nlist = XmlHelper.GetAreaString(filepath);
            if (nlist.Count < 1) return ;
            IAuthIP auth = null;
            foreach (XmlNode xn in nlist)
            {
                if (xn.LocalName == "ip" || xn.LocalName == "ips")
                {
                    auth = new ArrayIAuthIP(xn.InnerText);
                    auths.Add(auth);
                }
                else if (xn.LocalName == "areaip")
                {
                    auth = new AreaIAuthIP(xn.InnerText);
                    auths.Add(auth);
                }
            }
        }

        /// <summary>
        /// 认证接口,如果要添加新的认证规则 则必须要实现此接口
        /// </summary>
        public interface IAuthIP {

            bool Auth(String ip);

        }

        private class ArrayIAuthIP : IAuthIP {

            private ArrayList authIps;

            public ArrayIAuthIP (String tag)
	        {
                authIps = new ArrayList();
                Inflater(tag);
	        }

            /// <summary>
            /// 转换给定ip规则字符串,如192.168.0.1,192.168.0.1
            /// </summary>
            /// <param name="tag"></param>
            public void Inflater(String tag)
            {
                if (null == tag || tag == "") return;

                String[] strs = tag.Split(',');
                foreach (String str in strs)
                {
                    if (IsIp(str))
                    {
                        authIps.Add(str);
                    }
                    else
                    {
                        throw new Exception("请检查配置文件<ip>或者<ips>标签");
                    }
                }

            }

            public bool Auth(String ip)
            {
                foreach (String authIp in authIps)
                {
                    if (authIp == ip) 
                    {
                        return true;
                    }
                }

                return false;
            }
        }


        private class AreaIAuthIP : IAuthIP
        {
            private String areaStr;

            public AreaIAuthIP(String tag)
            {
                Inflater(tag);
            }
            
            private void Inflater(string tag)
            {
                if (null == tag || tag == "") return;

                if (IsAreaIp(tag))
                {
                    areaStr = tag;
                }
                else
                {
                    throw new Exception("请检查配置文件areaip标签");
                }
            }

            public bool Auth(String authIp)
            {
                if(null == areaStr)
                {
                    return false;
                }

                String[] areaIps = areaStr.Split('-');
                String startIp = areaIps[0];
                String endIp = areaIps[1];
                String[] startIpArray = startIp.Split('.');
                String[] endIpArray = endIp.Split('.');
                String[] authIpArray = authIp.Split('.');

                long startIpLong = 0L;
                long endIpLong = 0L;
                long authIpLong = 0L;

                for (int i = 0; i < 4; i++ )
                {
                    startIpLong = startIpLong << 8 | Convert.ToUInt32(startIpArray[i]);
                    endIpLong = endIpLong << 8 | Convert.ToUInt32(endIpArray[i]);
                    authIpLong = authIpLong << 8 | Convert.ToUInt32(authIpArray[i]);
                }

                if (startIpLong > endIpLong)
                {
                    long temp = 0L;
                    temp = startIpLong;
                    startIpLong = endIpLong;
                    endIpLong = temp;
                }
                return startIpLong <= authIpLong && endIpLong >= authIpLong ;
            }

        }
        
        /// <summary>
        ///  检查给定的字符串是否是ip类型
        /// </summary>
        /// <param name="ip"></param>
        /// <returns></returns>
        public static bool IsIp(string ip){

            return Regex.IsMatch(ip, REGEX_IP);

        }

        /// <summary>
        /// 检查给定的字符串是否是ip段类型
        /// </summary>
        /// <param name="areaIp"></param>
        /// <returns></returns>
        public static bool IsAreaIp(String areaIp)
        {
            return Regex.IsMatch(areaIp , REGEX_AREA_IP);
        }

    }
#endregion
}

 配置文件

 

<?xml version="1.0" encoding="utf-8"?>
<ipallows>
	<ip>192.168.0.1</ip>
	<ips>127.0.0.1,127.0.0.2</ips>
	<areaip>61.234.145.102-61.235.145.102</areaip>
</ipallows>
分享到:
评论

相关推荐

    C#静态调用带有SoapHeader验证的WebService

    关于此代码的使用及相关配置,可以见此文:...代码开发时环境:Windows8.1、Visual Studio 2013、IIS8 注意:测试代码时,重新部署WebService服务且修改客户端测试程序的服务引用

    C#WebService-Soap扩展实现安全认证

    2、利用SoapHeader应用Soap扩展。 3、在写WebService时只需加认证标签,客户端调用时传入SoapHeader,即可完成认证。 4、当然你还可以发挥,比如压缩消息,日志记录,Trace之类,网上也有很多文章讲。

    WebService安全性之SoapHeader

    本示例“WebService安全性之SoapHeader”关注的是如何在VS2010环境下利用SoapHeader增强Web服务的安全性。Visual Studio 2010是一款强大的开发工具,支持创建、调试和部署各种类型的应用程序,包括Web服务。 在VS...

    C# 为webservice接口添加认证

    本文将深入探讨如何在C#环境中为Web Service接口添加SoapHeader认证,这对于初学者来说是一次宝贵的实践。 首先,让我们理解什么是SoapHeader。SoapHeader是SOAP消息的一个组成部分,它提供了扩展功能,允许传递非...

    C#调用使用java的带soaphead的webservice

    SoapHeader authHeader = new SoapHeader(); authHeader.Name = "Authentication"; authHeader.Namespace = "http://yournamespace.com"; proxy.Headers.Add(authHeader); // 调用服务方法 proxy.YourServiceMethod...

    soapheader使用

    ### SOAPHeader 使用详解 SOAP(Simple Object Access Protocol)是一种基于XML的信息交换协议,主要用于Web服务之间的数据通信。在SOAP消息中,SOAPHeader部分用于包含与实际业务数据无关但对消息处理有重要作用的...

    C#调用JavaWebService

    调用WebService,最简单的办法当然是直接添加WEB引用,然后自动产生代理类,但是在调用JAVA的WebService时并没有这么简单,特别是对于SoapHeader的处理,通过C#添加Web引用方式访问JavaWebService的方法,除了string...

    soapHeader验证例子

    在这个"soapHeader验证例子"中,我们将探讨如何使用Java和相关工具实现SOAP头验证。 首先,我们需要了解环境:MyEclipse 6.0是一个集成开发环境(IDE),专门针对Java EE应用,而Tomcat 6.x是一个流行的开源Java ...

    C#通过SOAP使用HttpWebRequest调用带有身份验证的WebService示例

    本示例使用C#构造SOAP信息,通过HttpWebRequest调用java编写的带有Windows身份验证的WebService,代码中详细注释了每行代码的功能与作用; 对应文章:http://blog.csdn.net/cgs_______/article/details/77894599

    WebService加密 for SoapHeader

    SoapHeader作为SOAP消息的一部分,常被用于传递额外的控制信息,如认证、授权等,因此,对它进行加密是确保服务安全的关键步骤。本文将深入探讨如何使用SoapHeader进行加密,以及案例中的申明和调用方法。 首先,让...

    C#调用金蝶登录界面(反射)及使用说明

    ### C#调用金蝶登录界面(反射)及使用说明 #### 一、概述 本文档将详细介绍如何在C#中通过反射的方式调用金蝶软件的登录界面,并解析登录后返回的一些关键信息,如账户名、用户名、用户ID以及数据库连接字符串等。 ...

    Java Webservice Axis2 Client(含soapheader验证)

    在Axis2中,可以通过`SOAPHeader`和`SOAPHeaderBlock`对象来实现。例如,如果你的SOAP Header需要包含认证信息,可以这样做: ```java OMFactory omFactory = OMAbstractFactory.getOMFactory(); OMElement ...

    .net调用java xfire发布的webservice封装soapheader头信息

    标题与描述均提到了“.NET调用Java XFire发布的WebService封装SOAPHeader头信息”,这是一个涉及跨平台服务调用的问题,具体来说是关于如何在.NET环境中调用由Java使用XFire框架发布的WebService,并正确处理...

    CXF客户端添加soapHeader代码 + jar包 + apache-cxf-3.1.15

    在CXF客户端中,我们通常通过`SoapHeader`类来设置和操作这些Header。 1. 添加依赖:在项目中,我们需要引入CXF的相关库。根据描述,这里涉及的jar包有`apache-cxf-3.1.15`和`cxf-manifest.jar`。通常,你可以通过...

    java SOAPHEADER的web service

    如果Web服务端和客户端在不同的域或IP地址上,可能还会涉及到跨域安全和权限认证的问题。此外,在实际部署时还需要考虑网络环境、性能优化和安全加固等因素。 以上知识点总结了在Java中处理SOAPHEADER的Web服务请求...

    JAVA解析soapheader

    JAVA 解析 SOAP Header 在 Java 中,SOAP Header 是一种重要的数据结构,它是 Web 服务编程中用于传输数据的标准协议。SOAP Header 中包含了许多重要的信息,如认证信息、交易信息等。下面将详细介绍如何在 Java 中...

    soapheader的创建和解析

    SOAPHeader header = context.getMessage().getSOAPPart().getEnvelope().getHeader(); if (header != null) { // 遍历并处理Header中的节点 } return true; } // 其他方法... } ``` ### 客户端创建SOAP ...

    soapheader协议

    soapheader简单的说明,可以使用协议和服务器加载数据

    SOAPHEADER方法增强WebService安全性代码

    2. **服务端验证**:在服务端,我们需要解析接收到的SOAP请求,提取`SoapHeader`中的安全信息,然后进行验证。这可能涉及到与数据库或其他身份验证服务的交互,以确认提供的凭证是否有效。 3. **客户端设置**:在...

    【ASP.NET编程知识】Asp.net页面中调用soapheader进行验证的操作步骤.docx

    在 ASP.NET 中,为了在 SOAP 请求中添加自定义头部信息,我们需要创建一个类,该类继承自 `SoapHeader` 类。例如,创建一个名为 `UserSoapHeader` 的类,包含用户名(UserName)和密码(Pwd)属性。这些公共属性将...

Global site tag (gtag.js) - Google Analytics