一、tcp掃瞄技術
常用的埠掃瞄技術有很多種,如 tcp connect() 掃瞄 、tcp syn 掃瞄、tcp fin 掃瞄 等,網路上也有很多文章專門介紹,比如 : 上就介紹了很多我的程式 所使用的最基本的掃瞄技術:tcp 掃瞄。
作業系統提供的 connect() 系統呼叫,用來與每乙個感興趣的目標計算機的埠進行連線。如果埠處於偵聽狀態,那麼connect()就能成功。否則,這個埠是不能用的,即沒有提供服務。這個技術的乙個最大的優點是,你不需要任何許可權。系統中的任何使用者都有權利使用這個呼叫。另乙個好處就是速度。如果對每個目標埠以線性的方式,使用單獨的connect()呼叫,那麼將會花費相當長的時間,你可以通過同時開啟多個套接字,從而加速掃瞄。使用非阻塞 i/o 允許你設定乙個低的時間用盡週期,同時觀察多個套接字。但這種方法的缺點是很容易被發覺,並且被過濾掉。目標計算機的logs檔案會顯示一連串的連線和連線是出錯的服務訊息,並且能很快的使它關閉。
二、程式簡介
為了提高掃瞄速度,本程式採用了多執行緒技術和非阻塞i/o的技術。程式的主介面是乙個對話方塊,下面是程式框架示意圖:
1、全域性變數:
以下是所有全域性變數的定義:
1.
hwnd
g_hwnd = null;
//處理訊息的視窗控制代碼
2.
unsigned
long
g_uladdr = inaddr_none;
//掃瞄的主機位址
3.
dword
g_dwtimeout = 1000;
//連線超時時間,以ms計
4.
bool
g_bterminate =
false
;
//是否使用者發出結束掃瞄的標誌
5.
short
g_nmaxthread = 200;
//最大允許的掃瞄線程數,經試驗不宜大於200
6.
short
g_nthreadcount = 0;
//當前正在掃瞄的程序數
2、startscan 執行緒:
這個執行緒完成的任務是啟動具體的掃瞄doscanport執行緒,對某乙個埠進行掃瞄。該程序啟動的doscanport執行緒的最大數量在設定的值範圍內,如果執行緒數已達最大,則會等待某些執行緒結束後再啟動新的執行緒。如果使用者發出結束掃瞄資訊,則不再啟動新的執行緒,而等待已啟動的執行緒結束後返回。下面是這執行緒的執行體**:
01.
dword
winapi startscan(
lpvoid
lpparam)
02.
16.
while
(g_nthreadcount >= g_nmaxthread)
17.
20.
21.
if
(createthread(null,
22.
0,
23.
doscanport,
24.
(
lpvoid
)
new
short
(pscanparam->narrofports[i]),
25.
0,
26.
&dwthreadid) != null)
27.
30.
}
31.
}
32.
else
33.
40.
while
(g_nthreadcount >= g_nmaxthread)
41.
44.
45.
if
(createthread(null, 0, doscanport, (
lpvoid
)
new
short
(i), 0, &dwthreadid) != null)
46.
49.
}
50.
}
51.
52.
//等待各埠掃瞄執行緒結束
53.
while
(g_nthreadcount > 0)
54.
57.
::sendmessage(g_hwnd, scan_thread, startscan_complete, 0);
58.
delete
pscanparam;
59.
return
error_success;
60.
}
3、doscanport 執行緒:
這個執行緒負責具體掃瞄指定的埠,並將結果sendmessage給主對話方塊。下面是其**:
01.
dword
winapi doscanport(
lpvoid
lpparam)
02.
13.
else
14.
21.
else
22.
;
50.
}
51.
closesocket(sock);
52.
}
53.
g_nthreadcount --;
54.
if
(dwret == error_success)
55.
58.
else
59.
62.
return
dwret;
63.
}
三、執行結果
本程式在vc6+winxp下編寫除錯執行正確,在win98下執行正確。
在我的計算機掃瞄本機1-5000號埠,超時設定1000ms,200個最大執行緒數,約需要45秒。當超時設定再短一些時速度可達每秒150個埠的速度。
四、結束語
事實上,速度要想再提高,可能需要其它方法了。如果執行緒數開得過多,則由於執行緒的排程開銷過大,速度反而會降低。如果超時設定過短,可能引起掃瞄的結果不正確(這須視網路情況決定),並且由於是多執行緒,超時等待的時間也可能小於因執行緒排程而等待的時間,則也不能提高速度。
另外我還發現了乙個問題,就是掃瞄本機時,如果以ip位址127.0.0.1時,則139#埠沒有開放;如果設定為本機的實際ip時則139#埠是開放的,這不知是何原因,還望高手指點。
本程式還有乙個需要改進的地方,就是不象大多數埠掃瞄器可掃瞄指定的ip段,而只設計成掃瞄指定的某一台主機。
>
TCP空閒掃瞄原理
tcp空閒掃瞄是一種隱秘的掃瞄技術,要知道它的原理,首先要介紹一下一般埠掃瞄的原理。判斷乙個tcp埠是否開放,其中一種方法是向該埠傳送乙個 syn 建立會話 資料報,如果該埠是開放的,則它會返回乙個 syn ack 會話確認 資料報 如果該埠是關閉的,則它返回 rst 重置 資料報 如果埠是被過濾狀...
4 3 2 掃瞄技術(Web漏洞掃瞄)
網路漏洞掃瞄指的是利用一些自動化工具發現網路上各類主機裝置的安全漏洞。這些自動化工具通常稱為web漏洞掃瞄器。我們可以通過網路漏洞掃瞄,全面掌握目標伺服器存在的安全漏洞。市面上常用的web漏洞掃瞄工具有awvs nessus nexpose openvas等。本篇主要介紹openvas,它可以用來識...
tcp埠掃瞄 使用Python進行TCP埠掃瞄
首先我們供給一台主機,要進行的步驟就是對其主機埠的掃瞄,檢視其中開放的埠。我們建立乙個tcp的全連線的掃瞄器,使用socket來建立聯結器。測試當前主機和埠是否開放,直接使用socket連線def connscan host,port try connskt socket.socket socket...