In my application I need something like this.

If the clients are detected to be "bad", then they will be sent to the
blacklist.

This would be a great plus for MINA.

Regards,
Rodrigo

On 6/22/07, Mark Webb <[EMAIL PROTECTED]> wrote:

This is what I was thinking.  I will create a JIRA entry and add this code
in....

--START--------------------------------------------
import java.net.InetSocketAddress;
import java.net.SocketAddress;

import org.apache.mina.common.IoFilterAdapter;
import org.apache.mina.common.IoSession;
import org.apache.mina.util.ExpiringMap;
import org.apache.mina.util.SessionLog;

public class ConnThrottleFilter extends IoFilterAdapter {
    private static final long DEFAULT_TIME = 1000;
    private long waitTime;
    private final ExpiringMap<String,Long> clients;

    public ConnThrottleFilter() {
        this( DEFAULT_TIME );
    }

    public ConnThrottleFilter( long millis ){
        this.waitTime = millis;
        clients = new ExpiringMap<String,Long>(60);
    }

    public void setWaitTime(long waitTime) {
        this.waitTime = waitTime;
    }

    private synchronized boolean isConnectionOk( IoSession session ){
        SocketAddress remoteAddress = session.getRemoteAddress();
        if( remoteAddress instanceof InetSocketAddress )
        {
            long now = System.currentTimeMillis();
            InetSocketAddress addr = (InetSocketAddress)remoteAddress;
            String host = addr.getAddress().getHostAddress();
            if( clients.containsKey(host)){
                Long time = clients.get(host);
                if( (now-time) > waitTime ){
                    return false;
                }
            } else {
                clients.put( addr.getAddress().getHostAddress(), now );
                return true;
            }
        }

        return false;
    }

    @Override
    public void sessionCreated(NextFilter nextFilter, IoSession session)
throws Exception {
        if( ! isConnectionOk(session)){
             SessionLog.info( session, "Connections coming in too fast;
closing." );
             session.close();
        }
    }
}
--END--------------------------------------------------------

On 6/22/07, Norman Maurer <[EMAIL PROTECTED]> wrote:
>
> Hi Mat,
>
> it depends on your protocol. You should think about how many connects
are
> asspected ;-)
>
> bye
> Norman
>
> On Fri, 22 Jun 2007 15:15:29 +0800, mat <[EMAIL PROTECTED]>
wrote:
> > Can you give some idea what the configured time could be?
> >
> > On 6/22/07, Norman Maurer <[EMAIL PROTECTED]> wrote:
> >>
> >> You could write a IOFilter which limit the connections per Ip in a
> >> configured time. I did the same in a project for limiting the
> > connections
> >> per time on a smtpserver.
> >>
> >> Bye
> >> Norman
> >>
> >>
> >> On Fri, 22 Jun 2007 14:16:53 +0800, mat <[EMAIL PROTECTED]>
> > wrote:
> >> > Thanks. My concern is what if some clients write a loop keep
opening
> >> socket
> >> > connection and my server keeps accepting and eventually mina core
> will
> >> > reject any new connections. Is that possible to happen? Correct me
if
> > i
> >> am
> >> > wrong,
> >> >
> >> > On 6/22/07, 凌晨 <[EMAIL PROTECTED]> wrote:
> >> >>
> >> >> Dear mat:
> >> >>    I think you should implement your own handler to detect this
kind
> > of
> >> >> connections from time to time then kill them all.
> >> >> You send some detecting packets to these connected connetions,no
> >> >> response,no connection.
> >> >> Best Wishes
> >> >>
> >> >> ----- Original Message -----
> >> >> From: "Mark Webb" <[EMAIL PROTECTED]>
> >> >> To: <dev@mina.apache.org>
> >> >> Sent: Friday, June 22, 2007 8:56 AM
> >> >> Subject: Re: malicious client
> >> >>
> >> >>
> >> >> > maybe a variant of the throttle filter which only allows one
> >> > connection
> >> >> per
> >> >> > IP at a time.
> >> >> >
> >> >> > On 6/21/07, mat <[EMAIL PROTECTED]> wrote:
> >> >> >>
> >> >> >> Thanks. But how should I set the TIMEOUT since the malicious
> >> >> client  could
> >> >> >> connect by programming a loop, couldn't he?
> >> >> >>
> >> >> >> 2007/6/21, Mark Webb <[EMAIL PROTECTED]>:
> >> >> >> >
> >> >> >> > an IoFilter could probably work.  This is related to the
filter
> >> > work
> >> >> >> that
> >> >> >> > was discussed a while back that dealt with heartbeats.
> >> >> >> >
> >> >> >> > On 6/21/07, Julien Vermillard <[EMAIL PROTECTED]> wrote:
> >> >> >> > >
> >> >> >> > > On Thu, 21 Jun 2007 20:46:55 +0800
> >> >> >> > > mat <[EMAIL PROTECTED]> wrote:
> >> >> >> > >
> >> >> >> > > > I wonder whether any function could prevent Mina from a
> >> > malicious
> >> >> >> > > > client attacking by opening connections and not sending
any
> >> > data.
> >> >> If
> >> >> >> > > > NOT, how could I do? Thanks.
> >> >> >> > >
> >> >> >> > > Hi,
> >> >> >> > >
> >> >> >> > > Just  detect IDLEness, in your IoHandler sessionIdle.
> >> >> >> > > If a client doesn't send enought data, close it.
> >> >> >> > >
> >> >> >> > > HTH
> >> >> >> > >
> >> >> >> > > Julien
> >> >> >> > >
> >> >> >> >
> >> >> >> >
> >> >> >> >
> >> >> >> > --
> >> >> >> > ..Cheers
> >> >> >> > Mark
> >> >> >> >
> >> >> >>
> >> >> >
> >> >> >
> >> >> >
> >> >> > --
> >> >> > ..Cheers
> >> >> > Mark
> >> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >>
> >>
> >
> >
> > !DSPAM:1,467b7764240371295747258!
> >
> >
>
>


--
..Cheers
Mark

Reply via email to