1.一段時間內ip連線數大於一定值則斷開該ip所有連線且拒絕ip一定時間內連線
2.一段時間內ip連線所傳送的資料大於一定值則斷開該ip所有連線且拒絕ip一定時間內連線
其實是實現判斷頻率的一種演算法,有乙個陷阱是如何判斷連續時間內的頻率,因為把時間分成一段段的話,按不同起始時間來分話頻率會不一樣。所以這個判斷演算法是有一定精度的,就是多久判斷一次。相當於這個時間視窗移動的精度。
**:限制頻率的類:
package com.cgs.iot.io.nio.handler;
public class frequencylimitation
public frequencylimitation(long interval, long max, int accuracy)
/*** 限制頻率的方法,間隔時間interval內次數大於最大值max則限制
* @param ctx channelhandlercontext
* @return
*/public void limitipfrequencywithaccuracy() else
if(outoftimeboundary(delay,interval)) else
}/**
* 統計陣列中所有數的和
* @param countlist 所需統計的陣列
* @return
*/private long sum(long countlist)
/*** 判斷延時是否超出限制的最大值
* @param delay 時間差
* @param max 最長時間
* @return
*/private boolean outoftimeboundary(long delay, long max)
public long getbegin()
public void setbegin(long begin)
public long getcountlist()
public void setcountlist(long countlist)
public int getindex()
public void setindex(int index)
public boolean isflag()
public void setflag(boolean flag)
public long gettime()
public void settime(long time)
public boolean getresult()
public void setresult(boolean result)
public long getmax()
public void setmax(long max)
public long getinterval()
public void setinterval(long interval)
}ip限制的類:
package com.cgs.iot.io.nio.handler;
import org.slf4j.logger;
import org.slf4j.logge***ctory;
import io.netty.buffer.bytebuf;
import io.netty.channel.channel;
import io.netty.channel.channelhandlercontext;
import io.netty.channel.channelinboundhandleradapter;
public class iplimithandler extends channelinboundhandleradapter
/*** 觸發計數
* @param ctx
* @param msg
*/protected void trigger(channelhandlercontext ctx, object msg)
/*** 根據結果欄位和方法名字段對ctx進行處理
* @param ctx channelhandlercontext
* @param msg 資訊
* @param result 結果字段
* @param method 方法名字段
*/protected void ctxexcute(channelhandlercontext ctx, object msg, boolean result, string method) else else if("channelactive".equals(method))}}
protected void clearchannel(channel channel)
/*** 獲得bytebuf中的位元組數
* @param buf
* @return
*/protected int getbytecountfrombytebuf(bytebuf buf)
}限制連線的類:
package com.cgs.iot.io.nio.handler;
import io.netty.channel.channelhandlercontext;
import io.netty.channel.channelhandler.sharable;
@sharable
public class iplimitconnecthandler extends iplimithandler
@override
public void channelactive(channelhandlercontext ctx)
throws exception
}限制資料的類:
package com.cgs.iot.io.nio.handler;
import io.netty.buffer.bytebuf;
import io.netty.channel.channelhandlercontext;
public class iplimitdatahandler extends iplimithandler
@override
public void channelread(channelhandlercontext ctx, object msg)
throws exception
}
java 防止同一IP多次請求攻擊
1.新增乙個spring的 攔截所有請求 2.實現 handlerinterceptor 介面,重寫prehandle posthandle aftercompletion方法 3.在prehandle方法裡面 取session中的ip物件 requestip新建的乙個bean requestip ...
IP繫結網絡卡Mac位址 防止ARP攻擊
arp 欺騙攻擊使得網路堵塞變慢,網頁病毒木馬猖狂。乙個暫時有效的解決方法是在防火牆 路由器和客戶機把ip與網絡卡mac位址進行繫結,限制 arp 欺騙。把下面的 儲存為 bat 字尾的檔案,修改 ip mac 分別為 的ip和網絡卡mac位址 雙擊執行即可 echo off 讀取本機mac位址 i...
防止DDOS攻擊
ddos deflate是一款免費的用來防禦和減輕ddos攻擊的指令碼。它通過netstat監測跟蹤建立大量網路連線的ip位址,在檢測到某個結點超過預設的限制時,該程式會通過apf或iptables禁止或阻擋這些ip.程式的官方 站長百科上的詞條 ddos deflate 討論組 ddos defl...