網路日誌資料session案例(上)

2021-08-26 23:26:42 字數 4298 閱讀 7953

資料中的字段分別為:

訪客ip位址

訪客訪問時間

訪客請求的url及協議

**響應碼

**返回資料量

訪客的referral url

訪客的客戶端作業系統及瀏覽器資訊

需求:1)需要為從訪問日誌中梳理出每乙個session(如果乙個使用者兩次相鄰請求之間的時間差<30分鐘,則該兩次請求都屬於同乙個session(不考慮不同的url),否則分屬不同的session),並為session中的歷次請求打上序號,示意如下:

session號 ip位址 請求時間 請求url 請求次序 其他字段……

session1 ip1 2017-10-11

08:10:30 /a 1 ……

session1 ip1 2017-10-11

08:11:20 /b 2 ……

session2 ip1 2017-10-11

09:10:30 /c 1 ……

步驟分析:

1 讀取日誌檔案,獲取使用者請求資料,會根據使用者的ip進行分組 (map)

2 將使用者的url按照時間排序

3 判斷兩個相鄰的url的時間差值是否是在30分鐘內來確定是否是同乙個session

4 判斷為每個url生成sessionid並打上執行順序標籤sessionbean資料

public

class sessionbean

public

void

setsessionid(string sessionid)

public string getip()

public

void

setip(string ip)

public string geturl()

public

void

seturl(string url)

public date getdate()

public

void

setdate(date date)

public

intgetorder()

public

void

setorder(int order)

@override

public string tostring()

}

讀取使用者資料並且存在map中

try(

bufferedreader br =

new bufferedreader(new filereader("f:/access.log.fensi"));

) +\\.)\\d";

string timerex =

"\\[.+\\d\\]";

string urlregex =

"(get|post)\\s(\\s)*\\s";

while((line=br.readline())!=

null)

**使用正規表示式獲取欄位的方法:**

public static string getstrbyrex(string line,string rex)

return res;

}**將字串轉換成時間物件**

@suppresswarnings("null")

public static date parsedate(string datestr) throws parseexception

return d;

}

對map的value(list)進行排序

myutils.sortmap(map);//直接呼叫

對list中的sessionbean按照時間先後順序排列

public static void sortmap(map

<

string,list

>

map)

});for (sessionbean entry1 : list) }}

}

//生成sessionid和序號並判斷結果條件

createdsessionid(map);//呼叫方法

private static void createdsessionid(map

<

string, list

>

map)

if(list

.size()>

1)//如果有的話 則直接賦值給後乙個數(他兩相等)

aftersession.setsessionid(presession.getsessionid());

if(presession.getorder()==

0)//有的話 後乙個為前乙個+1;

aftersession.setorder(presession.getorder()+

1); }else

aftersession.setsessionid(myutils.createsessionid());

if(presession.getorder()==

0) aftersession.setorder(1);}}

}}}

**生成sessionid 獲取不重複的字串**

public

static string createsessionid()

**//判斷兩個sessionbean是否是同乙個session**

public

static

boolean

issamesession(sessionbean presession,sessionbean aftersession)

return flag;

}

遍歷結果並列印

set

>> entryset = map.entryset();

for (entry> entry : entryset)

}

PowerShell 抓取網路日誌

豆子今天想看看powershell是否有像winsock之類的方式抓包,不過很遺憾,他有乙個netevenpacketcapture的模組,但是他不像wireshark那樣可以直接抓取tcp ip包,他獲取的是windows的網路日誌。優點是我可以直接用get winevent來分析內容了,缺點是我...

flume 網路日誌收集

channels 記憶體 sink 本地 a1.sources s1 a1.channels c1 a1.sinks k1 tcp協議 a1.sources.s1.type syslogtcp a1.sources.s1.port 5140 a1.sources.s1.host wangfutai ...

PowerShell 抓取網路日誌

豆子今天想看看powershell是否有像winsock之類的方式抓包,不過很遺憾,他有乙個netevenpacketcapture的模組,但是他不像wireshark那樣可以直接抓取tcp ip包,他獲取的是windows的網路日誌。優點是我可以直接用get winevent來分析內容了,缺點是我...