給你1億個ip位址和每個ip訪問的時間(00:00:00=《時間<=23:59:59,並且已經按照時間排好序了),然後給定一段時間x,定義在x內如果某ip的訪問次數超過y次,則判定該ip為攻擊ip。要求輸出所有攻擊ip。只有一組測試用例。第一行輸入ip記錄數(即10萬),時間x(10=
輸入示例:(為了方便,只給出8個,意思意思)
8 10 2
10.254.82.126 00:00:39
10.85.124.135 00:00:40
10.254.82.126 00:00:44
10.254.82.126 00:00:44
10.1.82.125 00:00:45
10.85.124.135 00:00:48
10.254.82.126 00:00:48
10.254.82.126 00:00:49
輸出示例:
10.254.82.126
10.85.124.135
struct ipchainiparray[100000];
在這個iparray上 維持 2個動態標記: head 初始為0 tail為的index為 iparray[tail].date - iparray[head].date <= x 並且 iparray[tail+1].date - iparray[head].date > x。
將 tail - head + 1個元素 進行雜湊,加下每個ip的 count 大於y的直接 可以輸出
以後 tail++, 檢視先加入的元素是否 使 iparray[tail].date - iparray[head].date > x, 大於 則 head++,且 雜湊表中其count--,一旦為0,刪除之。然後 將新加入的iparray[tail] 加入雜湊表 檢視是否 count > y。
這樣的話 演算法 應該比 o(n)差不了多少。
防止IP攻擊
1.一段時間內ip連線數大於一定值則斷開該ip所有連線且拒絕ip一定時間內連線 2.一段時間內ip連線所傳送的資料大於一定值則斷開該ip所有連線且拒絕ip一定時間內連線 其實是實現判斷頻率的一種演算法,有乙個陷阱是如何判斷連續時間內的頻率,因為把時間分成一段段的話,按不同起始時間來分話頻率會不一樣。...
統計IP個數
最近公司官網很不穩定,於是有乙個需求,統計在apache訪問日誌下面的ip個數。這個實現起來其實也就一條awk命令,可以這樣寫 awk對檔案進行流處理,每次讀取一行。1就是ip,count i 是將ip作為乙個陣列的下標,並且使得統計這個ip所對應的陣列元素自增1.end後面的語句是列印結果,只執行...
IP欺騙攻擊的防禦
1 防範基本的ip欺騙 大多數路由器的內建的欺騙過濾器。過濾器的最基本形式是,不允許任何從外面進入網路的資料報使用單位的內部網路位址作為源位址。從網路內部發出的到本網另一台主機的資料報從不需要流到本網路之外去。因此,如果乙個來自外網的資料報,聲稱 於本網路內部,就可以非常肯定它是假冒的資料報,應該丟...