乙個簡單的埠掃瞄程式題

2021-05-06 18:04:31 字數 1972 閱讀 9785

一、tcp掃瞄技術

為了提高掃瞄速度,本程式採用了多執行緒技術和非阻塞i/o的技術。程式的主介面是乙個對話方塊,下面是程式框架示意圖:

1、全域性變數:

以下是所有全域性變數的定義:

hwnd g_hwnd = null; //處理訊息的視窗控制代碼

unsigned long g_uladdr = inaddr_none; //掃瞄的主機位址

dword g_dwtimeout = 1000; //連線超時時間,以ms計

bool g_bterminate = false; //是否使用者發出結束掃瞄的標誌

short g_nmaxthread = 200; //最大允許的掃瞄線程數,經試驗不宜大於200

short g_nthreadcount = 0; //當前正在掃瞄的程序數

2、startscan 執行緒:

這個執行緒完成的任務是啟動具體的掃瞄doscanport執行緒,對某乙個埠進行掃瞄。該程序啟動的doscanport執行緒的最大數量在設定的值範圍內,如果執行緒數已達最大,則會等待某些執行緒結束後再啟動新的執行緒。如果使用者發出結束掃瞄資訊,則不再啟動新的執行緒,而等待已啟動的執行緒結束後返回。下面是這執行緒的執行體**:

dword winapi startscan(lpvoid lpparam)

while(g_nthreadcount >= g_nmaxthread)

if (createthread(null,

0,doscanport,

(lpvoid)new short(pscanparam->narrofports[i]),

0,&dwthreadid) != null)

} } else

while(g_nthreadcount >= g_nmaxthread)

if (createthread(null, 0, doscanport, (lpvoid)new short(i), 0, &dwthreadid) != null)

} }

//等待各埠掃瞄執行緒結束

while (g_nthreadcount > 0)

::sendmessage(g_hwnd, scan_thread, startscan_complete, 0);

delete pscanparam;

return error_success;

}

3、doscanport 執行緒:

這個執行緒負責具體掃瞄指定的埠,並將結果sendmessage給主對話方塊。下面是其**:

dword winapi doscanport(lpvoid lpparam)

else

else

; }

closesocket(sock);

} g_nthreadcount --;

if (dwret == error_success)

else

return dwret;

}

三、執行結果

本程式在vc6+winxp下編寫除錯執行正確,在win98下執行正確。

在我的計算機掃瞄本機1-5000號埠,超時設定1000ms,200個最大執行緒數,約需要45秒。當超時設定再短一些時速度可達每秒150個埠的速度。

四、結束語

事實上,速度要想再提高,可能需要其它方法了。如果執行緒數開得過多,則由於執行緒的排程開銷過大,速度反而會降低。如果超時設定過短,可能引起掃瞄的結果不正確(這須視網路情況決定),並且由於是多執行緒,超時等待的時間也可能小於因執行緒排程而等待的時間,則也不能提高速度。

另外我還發現了乙個問題,就是掃瞄本機時,如果以ip位址127.0.0.1時,則139#埠沒有開放;如果設定為本機的實際ip時則139#埠是開放的,這不知是何原因,還望高手指點。

本程式還有乙個需要改進的地方,就是不象大多數埠掃瞄器可掃瞄指定的ip段,而只設計成掃瞄指定的某一台主機。

(網路程式設計)乙個簡單的埠掃瞄程式

1 本次實驗使用的是visual studio 2019 2 該程式的功能是使用多執行緒掃瞄主機埠是否開啟 using system using system.collections.generic using system.componentmodel using system.data usin...

用JAVA實現乙個簡單的埠掃瞄功能

思路,使用socket物件的connect方法,輸入準備掃瞄的主機名和埠號,根據方法執行階段是否丟擲異常來判斷該埠能否正確訪問,具體 如下 param domain 主機網域名稱或者ip param startport 開始埠 param endport 結束埠 private static voi...

用Python實現乙個埠掃瞄,只需簡單幾步就好

0 秘密掃瞄 秘密掃瞄是一種不被審計工具所檢測的掃瞄技術。它通常用於在通過普通的防火牆或路由器的篩選 filtering 時隱藏自己。秘密掃瞄能躲避ids 防火牆 包過濾器和日誌審計,從而獲取目標埠的開放或關閉的資訊。由於沒有包含tcp 3次握手協議的任何部分,所以無法被記錄下來,比半連線掃瞄更為隱...