張 輝
(山西大學商務學院信息學院太原030031)
基于Winsock技術的端口掃描軟件設計
張 輝
(山西大學商務學院信息學院太原030031)
本文對端口掃描的原理、相關技術及應用進行了闡述,并利用端口掃描原理設計了一個簡單的基于Windows平臺上的端口掃描和監(jiān)測程序。通過對相關理論的分析,將程序劃分為幾個模塊,并詳細的描述了每個模塊的實現方法和關鍵代碼。本程序提供TCP connect、TCP SYN、ICMP三種端口掃描方法對目標主機進行掃描,并實現了端口列表自定義和掃描結果存儲等幾大模塊功能。此外,程序還提供了一個端口檢測功能,方便用戶及時發(fā)現自己的主機是否被掃描。
網絡安全 端口掃描 端口檢測
因特網剛剛起步時,國外就已經出現安全掃描技術。最近的十幾年,信息技術、網絡技術飛速發(fā)展,安全掃描技術隨之不斷的發(fā)展完善。安全掃描器也從最初只在LINUX上編寫的一些小程序發(fā)展為可以在多個平臺上運行的、功能復雜的系統(tǒng)程序[1]。我國的安全描技術是在國外的基礎上發(fā)展起來的。這里面有一些專門做信息安全的公司例如盈高科技、聯軟科技等等的安全掃描器大多以硬件為主,它們特點是執(zhí)行速度快、功能強大、準確性高[2]。不像軟件一樣受到安裝主機系統(tǒng)性能的限制,但是它們的硬件價格不菲,掃描一次的費用往往就要上萬。網絡上還有許多專業(yè)的網絡掃描器功能強大,但是其參數設置、操作流程比較復雜。普通電腦用戶都沒有相關方面的知識,專業(yè)的網絡掃描器很難上手。
本文針對普通用戶的信息安全監(jiān)測,用戶通過簡單的操作的即可獲得網絡中的主機或者本地主機的端口狀態(tài),盡早的發(fā)現網絡中存在的安全漏洞,防患于未然。程序中的端口監(jiān)測功能使用戶很方便地發(fā)現本地主機是否遭到了端口掃描,及早做出響應將對方的攻擊扼殺。對于對端口掃描感興趣的初學者,程序提供了多種端口掃描方式、快速掃描和多線程掃描,通過使用不同掃描方式加深他們對端口掃描技術的理解。
1、用戶需求分析
互聯網絡的發(fā)展,網絡入侵事件更加頻繁。網絡系統(tǒng)入侵者進入目標系統(tǒng)的第一步就是對目標系統(tǒng)進行端口掃描。普通的電腦用戶主要通過殺毒軟件,殺毒軟件都是病毒入侵本地主機后,掃描本地文件對比病毒特征庫來查殺病毒[3]。殺毒軟件是能殺死入侵的病毒,但對計算機內的重要資料的泄露等損失無法挽回。在病毒入侵之前,端口掃描及檢測程序能夠及時發(fā)現本地主機受到的潛在的端口掃描,及時關閉端口將后續(xù)的入侵關在門外,如果處理得當能使用戶免受損失。
2、功能需求分析
作為一款基于端口掃描技術的安全軟件,首先要能夠對自己的主機進行端口掃描,得到它們的狀態(tài)。其次能對遠程的主機進行端口掃描,得到遠程主機的端口狀態(tài)。最后還能對局域網中某個網段的主機進行端口掃描,得到這個網段內所有開機狀態(tài)下的主機的端口開放狀態(tài)。
用戶除掃描自己的計算機了解計算機的端口開放狀況,出于安全的考慮,還需能夠檢測出別人的計算機對自己計算機的掃描,對別人的攻擊做出提前的預防。因此,端口檢測的功能也是必需的。端口掃描涉及到數據在網絡上的傳輸,即使采用多線程,端口掃描的速度也不會很快。掃描所有的網絡端口往往需要大量的時間,為了提高掃描的效率,節(jié)約時間。程序還應該能端口設置,只對必要的端口進行掃描。
1、功能模塊設計簡介
本軟件主要實現數據輸入處理、端口掃描模塊、端口監(jiān)控模塊和數據顯示輸出四個功能模塊。各模塊的主要功能性能描述如下:
數據輸入處理:對應界面上的掃描設置部分,主要負責接受用戶輸入的IP地址、端口范圍和選擇的掃描方式。能夠對用戶輸入的數據的格式、大小進行判斷和處理,將錯誤信息返回給用戶。
執(zhí)行端口掃描:這部分主要為Connect、Connect2、SYN三個端口掃描程序。將處理后的數據輸入程序完成掃描,得到用戶需要的數據。
執(zhí)行端口監(jiān)控:這部分主要為端口監(jiān)聽程序。它能夠打開計算機的端口,并記錄端口的狀態(tài),分析后得出的檢測結果。
界面顯示輸出:將端口掃描程序輸出的數據顯示在掃描結果欄,端口監(jiān)聽程序輸出的結果顯示在當前狀態(tài)欄。
2、掃描程序的設計原理
TCP方式的端口掃描主要利用三次握手原理,掃描程序開始后,使用socket()函數創(chuàng)建客戶端接口,調用connect()函數連接被掃描主機(服務器)的地址和指定端口號,客戶端接收到反饋回來的數據包,通過分析數據包來判斷目標主機的服務端口是打開還是關閉[4-5]。
用戶在界面輸入要掃描的主機地址和端口號,程序會對輸入的參數進行驗證其是否合法,然后再根據用戶選擇的相應的掃描方法(如Connect掃描)。Connect掃描程序開始后,系統(tǒng)會使用socket()函數創(chuàng)建流式套接字,然后再調用bind()函數將創(chuàng)建好的套接字與本機IP地址綁定[6]。創(chuàng)建好客戶端程序后,程序會向被掃描的主機的某個端口發(fā)送一個UDP數據包,然后等待接受該端口返回的數據。如果程序接受到了錯誤數據,表明該端口是關閉的。如果一定時間內程序沒有接收到數據,則表明該端口是打開的。掃描程序設計原理如圖1所示。
1、端口掃描界面
端口掃描功能主界面分為掃描范圍、掃描結果、掃描狀態(tài)三個部分。在掃描范圍中可以設置掃描參數,包括IP范圍的設置、端口范圍的設置和掃描方法的選擇。掃描開始后,在掃描狀態(tài)中會實時顯示當前掃描到的主機的IP地址和端口號。當提示“掃描結束”后,在掃描結果欄中選中要查看的IP地址,可以查看此IP下所開放的端口。端口監(jiān)控按鈕會將程序指向端口監(jiān)聽模塊,完成端口監(jiān)聽的一些功能。
端口監(jiān)聽功能主界面如圖2所示:
端口掃描功能主界面分為端口狀態(tài)和當前狀態(tài)兩個部分。當點擊圖2界面的“端口監(jiān)聽”按鈕后切換到次界面,即開始端口監(jiān)聽的功能。在端口狀態(tài)中會實時顯示當前程序打開的端口(本地端口)、端口被連接的次數(端口計數)、與端口連接的IP(遠端IP)。系統(tǒng)分析一段時間內端口被掃描的記錄后,會在當前狀態(tài)中顯示主機是否被掃描、掃描次主機的遠端IP。
2、端口掃描模塊
掃描結果顯示界面主要依靠CTreeCtrl控件實現,CTreeCtrl控件專門用于顯示一些基于“樹”狀的數據結構。在這種結構中,根節(jié)點顯示為IP地址。在根節(jié)點上有若干分支點,顯示為端口號。要實現這樣一個展現效果,首先需要在對話框中,放置一個CTreeCtrl樹狀控件,調整到合適的位置和大小,同時要聲明一個CTreeCtrl的變量與此控件綁定。右擊控件后,在彈出的菜單中選擇“屬性”中的“Tree控件屬性”來改變他的風格。
程序實現了Connect、SYN、Connect2三種掃描方式,只舉Connect的列子進行說明。Connect掃描是最基本的掃描方式,在該掃描方式下,每一個線程負責著一個IP地址的某一個端口的連接,并最終將掃描結果顯示到界面。每一個線程的連接要完成完整的三次握手。但是由于CSocket類已經對TCP連接做了很好地封裝,所以,本線程相對簡單,且代碼量很少。掃描多個IP地址和多個端口號時需要使用多線程來提高掃描的效率,多線程一般使用AfxBeginThread()創(chuàng)建。線程穿件完畢后,調用一下Sleep函數,使線程有時間讀參數。
3、端口監(jiān)聽模塊
端口狀態(tài)顯示有協議、本地端口號、端口計數、遠端IP四項,端口狀態(tài)顯示界面主要依靠CListCtrl控件實現,CListCtrl控件專門用于顯示一些基于“關系”的數據結構。在這種結構中,每一行代表一個記錄,每一列分別代表協議、本地端口號、端口計數、遠端IP四個字段。要創(chuàng)建這樣的一個結構,需要在對話框中創(chuàng)建一個CListCtrl控件對象,先設置控件的表頭部分,再增、修、刪其數據。
程序中創(chuàng)建了一個5秒間隔的計時器。計時器記錄了開啟的端口中被連接的端口的個數和遠端的IP地址,并判斷其大小,最后得到的結果會輸出到當前狀態(tài)窗口。計時器刷新后,程序重新開始記錄監(jiān)測。
1、測試環(huán)境
兩臺安裝有端口掃描與檢測程序的Windows XP系統(tǒng)的計算機,兩臺計算機處于同一個局域網內,且處于聯機狀態(tài)。查詢后得到a主機的IP為192.168.1.101,b主機的IP為192.168.1.102。
2、功能測試
參數設置:開始IP和結束IP的文本框中輸入a主機的IP地址或者127.0.0.1。在“開始Port”后文本框中輸入1,“結束Port”后的文本框中輸入1024。分別點擊“Connect掃描”、“SYN掃描”、“ICMP掃描”按鈕選擇相應的掃描方式進行掃描。掃描狀態(tài)提示掃描結束后,點擊相應的IP地址查看掃描結果。
a主機分別使用Connect掃描、SYN掃描b主機進行掃描,掃描的結果相同。掃描結果中看到掃描器掃到了本機1~1024的范圍內有四個端口打開,分別為80、135、445、843。
3、測試結論
本程序提供TCP connect、TCP SYN、ICMP三種端口掃描方法對目標主機進行掃描,并實現了端口列表自定義和掃描結果存儲等幾大模塊功能。此外,程序還提供了一個端口檢測功能,方便用戶及時發(fā)現自己的主機是否被掃描。
[1]沈軍飛.基于網絡的端口掃描及檢測程序[J].軟件導刊,2012.
[2]馬琳.基于端口掃描檢測技術的實現[J].信息系統(tǒng)工程,2013.
[3]唐洪英,龔箭,曹澤翰.檢測端口掃描的方法研究[J].計算機應用,2003.
[4]Rong-shengShan,Xiao-yongD.Li,Jian-huaLi.An adaptive algorithm to detect port scans[J].Journal of Shanghai U-niversity(English Edition),2004.
[5]Yu Zhang,Bharat Bhargava.Allocation Schemes,Architectures,and Policies for Collaborative Port Scanning Attacks[J]. Journal of Emerging Technologies in Web Intelligence,2011.
[6]Sunil Kumar,Kamlesh Dutta,Ankit Asati.Two Pass Port Scan Detection Technique Based on Connection Pattern and Status on Sampled Data[J].Journal of Computer and Communications,2015.
張輝(1978~),男,副教授,研究方向為網絡安全、大數據處理。
Design of Port-based Scanning Software Based on Winsock Technology
Zhang Hui
(Information Faculty,Business College of Shanxi University Taiyuan 030031)
In this paper,the principles,relevant technology and application port scanning are described,and the use of port scanning principle designed a simple port scanning and monitoring procedures based on windows platform.The analysis of the theory,the program is divided into several modules,and a detailed description of the methods and key codes for each module.This program provides TCP connect,TCP SYN,ICMP three types of ports scanning method to scan the target host,and implement several modules from the list of ports function definitions and scan results storage.In addition,the program also provides a port detection function to facilitate the user to detect whether their host is scanned.
Network security Port scanning Port detection
TP393.08
B
161124-7432