天天看點

使用c語言實作端口全掃描程式,用vc++實作端口掃描程式

一、前言

一個端口就是一個潛在的通信通道,也是一個入侵通道。對計算機進行端口掃描能得到許多有用的資訊。進行掃描的方法有多種,可以手動進行掃描,也可以用端口掃描軟體進行。在手工進行掃描時,需要熟悉各種指令,對指令執行後的輸出進行分析。用掃描軟體進行掃描時,掃描軟體可以做相應的資料分析功能。

本文介紹了掃描器工作原理及技術優點,最後用程式制作一個簡單掃描器。

二、掃描器工作原理及技術優點

掃描器是一種自動檢測遠端或本地主機安全性弱點的程式,通過使用掃描器可以不留痕迹地發現遠端伺服器的各種TCP端口的配置設定及提供的服務和它們所使用的軟體版本!這些資訊可以間接地了解遠端主機所存在的安全問題。

掃描器的工作原理是:通過連接配接遠端TCP/IP不同端口,并記錄目标給予的應答。通過這種方法,可以搜集到很多有關主機的各種資訊(是否能夠匿名登入;是否有可寫的FTP目錄;是否能用TELNET;HTTPD是用ROOT還是nobady在運作……)。

掃描器的一個主要功能就是發現一個主機或網絡并檢查有什麼服務正運作在這台主機上,更進一步還能測試這些服務,發現系統漏洞。要實作這些功能,隻需要采用罪簡單的TCP connect()掃描。作業系統提供的connect()系統調用,用來與每一個目标計算機端口進行連接配接。如果端口處于偵聽狀态,那麼 connect()就能夠成功;否則這個端口不能使用,即沒有提供服務。

這個技術的最大有點是:無需任何權限。系統中的任何使用者都有權利使用這個調用。另一個好處是速度,如果對每個目标端口以線性的方式,使用單獨的connect()調用,那将會花費相當長的時間。我們可以同時打開多個socket,進而加速掃描。使用非阻塞I/O允許設定一個較低的時間用盡周期,同時觀察多個socket。

三、程式實作步驟

① 用AppWizard建立一個基于對話框的應用程式,注意,程式需要選擇支援WinSocket。

為對話框添加資源,得到如下圖一個界面。上面為一個IP位址,下面為一個編輯框,添加按鈕“掃描”,它的ID為ID_SCAN。

自制掃描器界面圖

② 添加控制變量,如下表:

③ 添加函數TestConnection

函數主要通過建立一個SOCKET,然後通過CONNECT方法測試端口是否打開。主要代碼如下:

bool CMonitGameDlg::TestConnection(CString IP , UINT nPort)

{

CSocket* pSocket;

pSocket = new CSocket;

ASSERT ( pSocket );

if ( !pSocket -> Create ( ) )

{

delete pSocket;

pSocket = NULL;

return FALSE;

}

while ( ! pSocket ->Connect ( IP , nPort ) )

{

delete pSocket ;

pSocket = NULL ;

return FALSE ;

}

pSocket->Close();

delete pSocket ;

return TRUE ;

}

④ 為ID_SCAN 添加函數。

簡單接受資料,并調用TestConnection ( ip , port ) 函數就可以了。

至此,端口掃描程式就完成了,它實作了很簡單的檢測端口的功能。