楊丕仁
摘要:隨著互聯(lián)網(wǎng)的發(fā)展,網(wǎng)絡(luò)已經(jīng)成為人們生活不可缺少的一部分。現(xiàn)在接入互聯(lián)網(wǎng)的形式已經(jīng)發(fā)生了變化,由傳統(tǒng)的PC機接入發(fā)展到今天的各種移動終端(手機、平板電腦、物聯(lián)網(wǎng)設(shè)備)接入,從而對網(wǎng)絡(luò)安全提出了更高要求。在網(wǎng)絡(luò)安全管理中,對用戶行為管理是最基本的,只有管理好用戶的上網(wǎng)行為才能做對網(wǎng)絡(luò)可查可管。該系統(tǒng)將以Python程序架構(gòu)為基礎(chǔ),設(shè)計一套適合處理校園網(wǎng)絡(luò)用戶上網(wǎng)行為的程序。
關(guān)鍵詞:網(wǎng)絡(luò)安全;用戶上網(wǎng)行為;數(shù)據(jù)分析
中圖分類號:TP393 文獻標識碼:A 文章編號:1009-3044(2016)15-0117-03
隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,各種網(wǎng)絡(luò)設(shè)備功能越來越來完善,設(shè)備性能管理方面也比較智能化,在網(wǎng)絡(luò)管理上發(fā)生了變化,不再像過去花費大量的人力忙于維護網(wǎng)絡(luò)設(shè)備,而是要分析用戶的上網(wǎng)行為,為用戶提供一個安全穩(wěn)定的網(wǎng)絡(luò)環(huán)境。目前所得到的用戶上網(wǎng)行為都是從網(wǎng)絡(luò)設(shè)備上獲取的,這些數(shù)據(jù)中存在臟數(shù)據(jù)[1],臟數(shù)據(jù)不符合要求,對于分析用戶上網(wǎng)行為存在干擾。并且這些數(shù)據(jù)量非常大,而且還分散在不同的文件中,不便于以后的存儲和運算。如何對這些數(shù)據(jù)進行分類、清洗并進行有效的存儲是網(wǎng)絡(luò)行為分析的一個重要問題。
文章首先介紹python程序設(shè)計語言的相關(guān)組件和功能架構(gòu),在此基礎(chǔ)上,設(shè)計并實現(xiàn)了基于python語言的分析用戶上網(wǎng)行為的分類與清洗系統(tǒng),驗證了系統(tǒng)的有效性和穩(wěn)定性,并對數(shù)據(jù)的處理時間和數(shù)據(jù)的壓縮比例進行分析。
1 Python程序的介紹
Python是一種解釋型交互式、面向?qū)ο?、動態(tài)語義、語法優(yōu)美的腳本語言。自從1989年Guido van Rossum發(fā)明,經(jīng)過幾十年的發(fā)展,已經(jīng)同Tcl、perl一起,成為目前應(yīng)用最廣的三種跨平臺腳本語言。Python是純粹的自由軟件, 源代碼和解釋器CPython遵循 GPL(GNU General Public License)協(xié)議[2] 。Python的主要特點有:
1)免費開源、簡單易學
Python是FLOSS(自由/開放源碼軟件)之一[3]。使用者可以自由地發(fā)布這個軟件的拷貝、閱讀它的源代碼、對它做改動、把它的一部分用于新的自由軟件中。FLOSS是基于一個團體分享知識的概念。Python是一種代表簡單主義思想的語言,閱讀一個良好的Python程序就感覺像是在讀英語一樣。它使你能夠?qū)W⒂诮鉀Q問題而不是去搞明白語言本身。Python極其容易上手,因為Python有極其簡單的說明文檔 。
2)速度快
Python 的底層是用 C 語言寫的,很多標準庫和第三方庫也都是用 C 寫的,運行速度非???。
3)高層語言
Python語言編寫程序的時候無需考慮諸如如何管理你的程序使用的內(nèi)存一類的底層細節(jié)。
4)可移植性
由于它的開源本質(zhì),Python已經(jīng)被移植在許多平臺上(經(jīng)過改動使它能夠工作在不同平臺上)[4]。這些平臺包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE、PocketPC、Symbian以及Google基于linux開發(fā)的android平臺。
5)面向?qū)ο?/p>
Python是一種公共域的面向?qū)ο蟮膭討B(tài)語言[5],Python既支持面向過程的編程也支持面向?qū)ο蟮木幊獭T凇懊嫦蜻^程”的語言中,程序是由過程或僅僅是可重用代碼的函數(shù)構(gòu)建起來的。在“面向?qū)ο蟆钡恼Z言中,程序是由數(shù)據(jù)和功能組合而成的對象構(gòu)建起來的。
6)可擴展性
如果需要一段關(guān)鍵代碼運行得更快或者希望某些算法不公開,可以部分程序用C或C++編寫,然后在Python程序中使用它們。
7)可嵌入性
可以把Python嵌入C/C++程序,從而向程序用戶提供腳本功能。
8)豐富的庫
Python標準庫確實很龐大。它可以幫助處理各種工作,包括正則表達式、文檔生成、單元測試、線程、數(shù)據(jù)庫、網(wǎng)頁瀏覽器、CGI、FTP、電子郵件、XML、XML-RPC、HTML、WAV文件、密碼系統(tǒng)、GUI(圖形用戶界面)、Tk和其他與系統(tǒng)有關(guān)的操作。這被稱作Python的“功能齊全”理念。除了標準庫以外,還有許多其他高質(zhì)量的庫,如wxPython、Twisted和Python圖像庫等等。
9)規(guī)范的代碼
Python采用強制縮進的方式使得代碼具有較好可讀性。而Python語言寫的程序不需要編譯成二進制代碼。
2 系統(tǒng)架構(gòu)的設(shè)計
由于網(wǎng)絡(luò)用戶上網(wǎng)行為數(shù)據(jù)可以從網(wǎng)絡(luò)安全設(shè)備(如防火墻、網(wǎng)絡(luò)認證網(wǎng)關(guān))上直接采集,所采集到的數(shù)據(jù)中有很多信息是不需保存的,并且生成的日志一般都是一個2萬多條記錄的壓縮文件。在實際的用戶行為管理分析中需要對這些壓縮文件進行解壓、分類、清洗,然后提取有用信息,并對所提取的信息進行壓縮處理,以便以后用于數(shù)據(jù)挖掘。系統(tǒng)結(jié)構(gòu)設(shè)計如圖1:
在日志處理系統(tǒng)結(jié)構(gòu)設(shè)計中,日志解壓模塊實現(xiàn)對原始數(shù)據(jù)自動解壓,并保存在以日期命名的文件夾中日志文件;日志文件夾處理模塊用于處理長時間保存日志文件和日志文件夾,使處理結(jié)果生成一個帶有路徑的文件名列表的文本文件。這個文本文件可以使下一步數(shù)據(jù)分類、清洗模塊快速定位到所要處理文件的位置和名稱。根據(jù)大理大學網(wǎng)絡(luò)用戶特點設(shè)計數(shù)據(jù)的分類和清洗模塊,實現(xiàn)把中國學生、留學生、教職工、校外人員的網(wǎng)絡(luò)行為日志文件進行分離,并把這些日志文件中沒有實際意義的記錄清除,最終把分類文件分別合并到以日期命名的文件中,為以后大數(shù)據(jù)的科學計算和智能分析提供純凈的數(shù)據(jù)源。日志文件壓縮模塊實現(xiàn)對分類、清洗過后的日志文件進行壓縮,提高存儲效率。
3 系統(tǒng)的實現(xiàn)
3.1 目錄處理模塊的實現(xiàn)
采用python程序設(shè)計語言中的os模塊,實現(xiàn)對目錄路徑和文件名的處理,第一步,將原始數(shù)據(jù)目錄下的所有文件夾的路徑寫入到一個文本文件中,例如:D:\campus big data\Datadirectory.txt,以便數(shù)據(jù)處理時循環(huán)遍歷所有文件夾,其代碼實現(xiàn)如下:
def CreateRawdatadirectory():
data_file_path="D:\\campus big data\\Raw_data\\"
day_log_path=os.listdir(data_file_path) #日日志文件夾路徑
log_files_list=[] #每天的.log文件所在目錄,如D:\campus big data\data\2016-03-01
fw=open("D:\\campus big data\\Raw_Datadirectory.txt","w")
for item in day_log_path:
fw.write(data_file_path+item+"\\") #Raw_Datadirectory.txt寫入
fw.write("\n")
fw.close()
第二步,生成日志文件夾文件,將每日文件夾下的所有日志文件路徑寫入對應(yīng)文件夾下的文本文件。例如:D:\campus\bigdata \data \201 6-03-01\file_path.tx文件,在數(shù)據(jù)處理時可以快速遍歷所有日志文件,其代碼實現(xiàn)如下:
def CreateLogDirectory():
fr=open("D:\\campus big data\\Raw_Datadirectory.txt","r")
fr_s=fr.read()
log_files_list=fr_s.split("\n")
for directory in log_files_list:
fw=open(directory+"file_path.txt","w")
try:
log_filename=[fname for fname in os.listdir(directory) if fname.endswith('.log')]
for fname in log_filename:
fw.write(directory+fname) #file_path.txt文件寫入
fw.write("\n")
except:
pass
fw.close()
fr.close
第三步,創(chuàng)建多級目錄,創(chuàng)建處理后數(shù)據(jù)存儲的多級目錄。例如:Ch_students目錄、Oversea_students目錄、Teachers目錄,用以保存不同用戶的上網(wǎng)行為日志文件。
3.2 解壓和壓縮模塊
根據(jù)目錄處理模塊所得到的路徑文件,調(diào)用python提供的zipfile模塊,把原始數(shù)據(jù)進行解壓,并把清洗過的用戶行為數(shù)據(jù)進行壓縮,代碼的設(shè)計如下:
解壓過程:
def FromZip(file_path_prefix): #
file_directory="D:\\campus big data\\Raw_data\\2016-03-01\\"
zip_filename=[fname for fname in os.listdir(file_directory) if fname.endswith('.zip')]
for item in zip_filename:
zip_path=file_directory+item
zfile = zipfile.ZipFile(zip_path,'r')
filename=zfile.namelist()[0]
data=zfile.read(filename)
flog=open(file_directory+filename,'w+b')
flog.write(data)
flog.close
壓縮過程
def ToZip():
file_directory="D:\\campus big data\\Raw_data\\2016-03-01\\"
log_filename=[fname for fname in os.listdir(file_directory) if fname.endswith('..log')]
for item in log_filename:
log_path=file_directory+item
f = zipfile.ZipFile('archive.zip','w',zipfile.ZIP_DEFLATED)
startdir = "c:\\mydirectory"
for dirpath, dirnames, filenames in os.walk(startdir):
for filename in filenames:
f.write(os.path.join(dirpath,filename))
f.close()
由于程序在運行時是直接調(diào)用目錄處理模塊所得的路徑文件,這樣就可以縮短程序運行的時間,提高程序的運行效率。
3.3 數(shù)據(jù)分類、清洗模塊
在網(wǎng)絡(luò)用戶上網(wǎng)行為日志數(shù)據(jù)中,有許多信息是沒有意義的,我們需要對這些數(shù)據(jù)進行分類和清洗。原始數(shù)據(jù)結(jié)構(gòu)如下:
3.3.1 數(shù)據(jù)的分類
根據(jù)學校校園網(wǎng)絡(luò)用戶的特點,我們可以把用戶分為教工、國內(nèi)學生、國外學生。根據(jù)上網(wǎng)的區(qū)域可以分為辦公區(qū)、教職工住宅區(qū)、學生宿舍區(qū)。利用python語言對文件快速處理的特點對用戶進行分類,并分別存儲在不同的文件中,代碼如下:
fwrite_log=open("data_log.txt",'w') #數(shù)據(jù)處理后存文放文件
fread_log=open("2016-03-01 00-00-00..txt",'r') #打開日志文件
log_txt=fread_log.read().split('\n') #讀取每一條記錄
for i in range(len(log_txt)): #對每一條記錄進行處理
if log_txt[i].strip('\n')!='':
if(log_txt[i].split('\t')[3])[0]=='X':
record=log_txt[i].split('\t') s_row=record[2]+'\t'+record[4]+'\t'+record[5]+'\t'+record[6]+'\t'+record[7]+'\t'+record[8]+'\t'+'\n'
fwrite_log.write(s_row)
fwrite_log.close()
fread_log.close()
3.3.2 數(shù)據(jù)清洗
根據(jù)網(wǎng)絡(luò)用戶上網(wǎng)行為的特點,會出現(xiàn)空行、重復記尋。數(shù)據(jù)清洗的重要工作就是要把這些干擾信息去除,保留有用信息,為以后的數(shù)據(jù)挖掘提供純凈的數(shù)據(jù)。在數(shù)據(jù)清洗過程中,應(yīng)用python中的set()和strip()功能把重復記錄和空行清除。經(jīng)過清洗的數(shù)據(jù)記錄數(shù)和文件大小都比原來小,表2中可以清晰的反映數(shù)據(jù)清洗前后的對比。
4 結(jié)束語
從程序的運行結(jié)果可以得出,用python編寫的用戶上網(wǎng)行為日志處理程序設(shè)計簡單,運行效率高,所提取的用用戶行為數(shù)據(jù)可以進一步分析,為校園網(wǎng)絡(luò)安全提供準確的用戶定位,為校園網(wǎng)絡(luò)的帶寬管理和維護提供準確的數(shù)據(jù)作為參考,并提高網(wǎng)絡(luò)的服務(wù)質(zhì)量。
參考文獻:
[1] 張良均, 樊哲, 趙云龍. Hadoop大數(shù)據(jù)分析與挖掘?qū)崙?zhàn)[M]. 北京: 機械工業(yè)出版社, 2016.
[2] 肖建, 林海波. Python基礎(chǔ)教程[M]. 北京: 清華大學出版社, 2003: 1-2.
[3] 北京中科紅旗軟件技術(shù)有限公司. 紅旗Linux系統(tǒng)應(yīng)用編程[M]. 北京: 石油工業(yè)出版社, 2012: 192.
[4] 陶誠, 陸從珍. 基于C++和Python混合編程的WORD文檔操作方法[J]. 信息化研究, 2014(5): 59.
[5] 楊昆, 汪興東. Python程序員指南[M]. 北京: 中國青年出版社, 2011: 8.