龐天琪,黃嬌玉,王一博,徐銘作,尹竹,劉雪飛
(北京信息科技大學,北京 100101)
網絡互聯互通的信息化時代下,個人信息隱私安全、計算安全、傳輸安全等的重要性愈發體現出來,由于網絡本身具有的不安全性因素以及網絡通信協議所存在的缺陷,網絡遭受入侵、受到破壞的情況頻生。為此,要想保障信息安全就要了解一定的網絡攻擊知識和手段[1],定期對網絡進行安全性分析,及時預防、發現和修正網絡中的薄弱環節來保障網絡及其中各節點安全。
端口掃描[2]是一種非常重要的預探測手段,對此進行研究可以對潛在的網絡攻擊進行預警;網絡流量信息中包含著網絡通信雙方的全部信息,對網絡流量進行解析能夠及時發現網絡中的異常流量以及時阻斷攻擊[3]。
計算機在數據傳輸過程中會將不同的包交給不同的服務進行處理,不同的服務對應不同的端口。在此情形下,想要對潛在的網絡攻擊進行預警就需要對端口進行掃描。
端口掃描工具一般是通過對目標主機端口以某種掃描技術進行掃描,通過目標主機的端口開放情況以及端口信息進一步了解目標主機所提供的服務類型,由此來尋找目標主機的安全弱點[4]。
本軟件對端口掃描的設計分為兩部分:端口掃描和IP存活掃描。端口掃描分為單個IP掃描端口開放情況和IP段各主機的端口開放情況掃描;IP存活掃描就是對某一IP段下主機存活情況的獲取。
在對目標主機進行端口掃描之前首先要對輸入的IP、端口、線程數進行合法性檢查(比如使用正則表達式檢查IP 地址的每一字節是否在0-255 之間),然后根據輸入的起始端口和結束端口號設置循環,創建套接字[5]socket[6]實例實現對目標主機對應端口建立連接,連接成功說明端口開放,則通過端口號輸出信息,連接失敗說明端口關閉,則輸出關閉信息;對于IP 段存活主機掃描的實現是通過調用系統的Runtime.get-Runtime().exec()來實現,通過程序調用類似“ping ip地址-n ping的次數-w 應答超時”這樣的命令來得到回復結果,使用正則表達式匹配“d+ms”“ttl”等字段信息來判斷是否能夠ping通也就是對方系統是否存活,需要注意的是,當對方禁止icmp 入站規則時,或者開啟防火墻等,都會對該結果造成影響。
在此模塊中,為減少等待時間可使用Java 多線程[7]。在掃描某一臺主機的端口開放情況時,根據輸入的起始和結束端口號將其進行分段并創建線程,每一段線程執行一段端口號區間的掃描任務,如果掃描的是一段IP下各主機的端口,則創建多個線程檢查方法是否被占用,即使用synchronized 關鍵字對調用Scan掃描類的方法加鎖實現,掃描IP段存活主機時也要如上述方法一樣,檢查輸入IP 是否合法,如不合法則提示輸入錯誤,如合法則將該IP段按順序逐個插入集合中并創建多線程調用命令并對返回值進行正則表達式匹配判斷是否存活。
考慮到端口掃描的對象也可以是某一網址,本軟件還實現了以下功能:當對給定的網址進行端口掃描時,先獲取到IP 地址,再通過IP 地址進行掃描,此項實現是通過調用系統的“nslookup -an”命令實現對DNS域名解析并將解析結果截取再顯示輸出,達到獲取IP地址的目的。
協議分析主要是對網絡數據包的協議頭和協議尾部進行分析,從而可以了解相關的數據包的產生和傳輸行為,通過對網絡數據包的分析達到監控網絡流量、分析網絡數據以及執行網絡安全操作等目的。
對于協議的分析,其基礎是對網絡數據包進行分析,網絡數據包在不同層進行不同的封裝傳輸,就具備不同的報文類型,而報文是網絡傳輸的單位,在傳輸過程中報文會不斷地封裝成分組、數據包、數據幀來進行傳輸,因此了解了各層協議[8]及封裝機制后,可以根據Java封裝、繼承、多態的特點來設計類間關系,實現對捕獲到的不同數據包的解析。
考慮到數據包的來源可以是從本地網卡列表中選取監聽并捕獲到的,此項可以將其保存至本地;也可以是保存的具有代表意義的pcap文件,故按照兩個模塊進行設計實現(對于文件來源可以設置布爾型變量isopening判斷:true代表來自本機,false代表是剛捕獲到的)。
2.2.1 捕獲網絡數據包
要想從網絡中捕獲數據包,首先必須獲取本機的網絡接口列表,Jpcap[9]提供了方法JpcapCaptor.get-DeviceList()完成這個任務,一旦有了網絡接口列表就可以選定用于捕獲數據包的網絡接口,可以使用方法JpcapCaptor.openDevice()來打開指定的網絡接口,本軟件指定參數如下:(device“,65535”,true,20),分別代表需要打開的網絡接口、每一次捕獲的網絡數據包的最大字節數、采用網卡的混雜模式以捕捉所有經過該網卡的網絡數據包、數據包捕獲的超時設置為2 毫秒。當我們獲得了網絡接口對象(JpcapCaptor實例)后便可以捕獲來自此網絡接口的數據包,在本軟件中使用逐個捕捉法:packet=captor.getPacket(),此方法每次只能返回一個捕獲的數據包,因此當網絡接口處在開放狀態時,循環使用此方法連續捕獲數據包。
關于數據包的分析過濾,本軟件設置PacketAnalyze 類用作數據包分析,首先通過packetClass()方法實現對數據包屬于什么協議的判斷,再調用各協議對應的方法進行分析(主要是首部分析)顯示以供user 閱讀或分析。在抓包類中使用TestFilter 方法設置過濾規則返回布爾型變量,用于判斷捕獲到的數據包是否為目標數據包再進行下一步操作,判斷的方法為對于捕獲到的數據包實例使用本類中的set-Filter()方法,根據變量FilterMess 的值是否包含關鍵字判斷是否為目標捕獲數據包,是則返回真并保留,否則返回假并遺棄此包。在顯示方面,本軟件將協議的分析結果放入集合中,在顯示時遍歷輸出,為了保證輸出時的順序為插入的順序,這里使用Linked-HashMap 集合對結果進行存儲,利用其訪問速度快的優點保障顯示結果的即時性;對于列表中每個數據包對象的分析是通過表格的getSelectedRow()方法得到選中對象的索引值,以獲取對應數據包并調用相應的數據包分析方法進行分析。在單擊表格項時,其詳細信息展示在初始界面的東部(具體設計為上半部分展示協議首部各個字段信息,下半部分展示數據部分和十六進制信息),在雙擊時可查看詳細信息。對于捕獲到的數據包可以保存到本地,首先通過布爾型變量isWorking 判斷當前是否已經停止捕獲(返回真代表正在捕獲,返回假代表已停止捕獲),然后使用openDumpFile()方法獲得實例,再用write-Packet()方法對數據包進行存儲。
對于數據包的解析功能還設置了路由追蹤和數據源追蹤。路由追蹤是用來查看本地到捕獲到的數據包中指向的目標IP經過的路徑信息,以便對路徑中的各節點進行其他操作,實現是通過RunTime.getRuntimr().exec()調用系統的命令提示符來實現“tract IP 地址”的命令;對于數據包的數據源追蹤是用來補充上述的數據包首部分析功能以達到顯示數據具體信息便于進一步分析的目的,實現起來是先對其進行協議判斷后解封裝再獲取并存儲具體數據部分。
2.2.2 本地pcap文件解析
對于捕獲到的網絡數據包可以保存到本地。同樣的,我們也可以打開此類型文件進行解析。根據pcap 文件的特點可設計解析流程為:解壓縮文件、解析Pcap Header、解析Packet Header、根據包頭信息判斷協議類型并解析Packet Data。
12月7日,太倉為了更深入地扎根中國市場,更全面地滿足用戶實際需求,更快更及時地響應服務用戶,全球領先的金屬加工解決方案供應商埃馬克集團將其太倉工廠移址新居,不僅廠房面積翻倍,服務功能也得到全面升級。為此埃馬克舉辦了盛大的開業典禮,同期還舉行了第七屆埃馬克技術博覽會,在展示多種創新技術與產品的同時,還聚焦了新能源汽車等當前熱門行業的多樣高效解決方案。
首先打開文件時為方便選擇,設置Filter 類實現文件過濾只打開pcap格式的文件:先將文件選擇器的setAcceptAllFilterUsed()方法設為false 禁止顯示所有文件,再將文件拓展名“pcap”存入數組集合變量extensions中,然后遍歷目錄下所有文件,若是pcap格式的返回真并顯示,若不是則返回假。
在pcap .pcapAnalyze 包中主要通過Pcapparser類實現對本地pcap 文件的讀取和解析:在此類中定義解壓方法unpack()來將pcap 文件分解為pacap 頭和pcap 文件數據包頭以及pcap 數據內容三個部分,其中pcap 數據內容需進一步分析。ProtocolJudge 類實現判斷pcap 文件中數據包使用的協議并將其進一步解封裝分析的功能,流程為(以arp 包為例):利用Ethernet 類對以太網幀進行解封裝得到以太網幀首部和以太網幀的數據部分、利用ARP 類對arp 報文進行解封裝得到具體信息(包括首部各字段和數據內容)、調用ByteArray 類實現對內容的轉換(由于計算機存儲數據時,是以字節為基本存儲單位的,因此需要將其轉換為能夠直觀看得懂的字符串。ByteArray類中定義了一系列方法,用于實現字節數組與十六進制字符串之間的轉換、字節數組與int 型之間的轉換等)并使用平時容易理解和接收的方式將其顯示出來。
本軟件設計兩個界面:初始界面和端口掃描界面,依托Swing 框架完成,軟件整體功能按照菜單展示,如圖1所示。

圖1 軟件整體功能
基于上述功能界面設計界面如下:初始界面使用的是邊界布局,將整個界面分為北、中、東和南四個大區域,每個大區域再劃分為幾個小區域,界面北部用于顯示菜單模塊,中部區域用于顯示展示數據包列表的表格,東部區域用于顯示數據包的分析結果,南部區域用于動態更新當前捕獲狀態及捕獲到的數據包數量。端口掃描界面使用的是JTabledPane 選項卡面板,在此面板中user通過點擊界面上方的選項來實現端口掃描、IP 掃描以及網址掃描之間的界面切換,這樣設計可以減少窗體個數,在每個界面中再細分模塊為結果顯示模塊、掃描參數輸入模塊、掃描狀態和按鈕顯示模塊,在掃描參數模塊采用流式布局,根據各界面需求設置顯示文本及輸入框。
在初始界面進行網絡數據包捕獲時設計使用Swing 組件中實現滾動條的JScrollPane 類實現垂直滾動表格視圖來達到展示多個數據包的關鍵信息的目的,user 可以拖動滾動條完整瀏覽整個列表;在列表下方(界面南部)設置JLabel 對象顯示當前捕獲狀態以及捕獲量便于實時了解捕獲數據包的數量,動態更新JLabel 的值依賴于當前表格行數的獲取,每添加一個數據包就更新一次JLabel 的值,在端口掃描界面對端口數量的顯示更新也是相同的方法。在進行網絡數據包捕獲和分析本地pcap文件時可以對捕獲到的數據包進行過濾,即上述功能存在互相調用的關系。
系統:Windows 10
軟件:IntelliJ IDEA 2022.2.1
gradle版本:7.4
端口掃描功能如圖2所示。

圖2 端口掃描
網絡數據包捕獲過濾分析功能如圖3所示。

圖3 網絡數據包捕獲過濾分析
本地pcap文件解析如圖4所示。

圖4 本地pacap文件解析
端口掃描和協議數據分析只是網絡安全的基礎部分,在此基礎上建立起適合本網絡的流量模型以便及時發現異常流量是下一步開展的工作方向。