連接配接網絡裝置時,一般都會在網絡裝置端選取0-65535之間的一個端口進行連接配接,端口掃描是指:檢查網絡裝置上0-65535号端口哪些端口是開啟狀态。如果黑客掃描到某網絡裝置的80端口是開啟狀态,那麼很有可能是web服務,此時黑客會使用一些手段攻擊web伺服器,這樣一來,端口掃描會增加伺服器的安全負擔,是以一般網絡都會阻止端口掃描。當然端口掃描對于防禦性滲透測試也非常有用。我們可以掃描自己的系統來确定哪些服務暴露給了網絡,這樣我們就能有針對性的對系統的配置進行檢查。本節屬于解釋的是端口掃描的原理。
一、TCP掃描
使用socket建立套接字,利用三次握手協定來判斷目标端口是否存活。
原理:
1、掃描端向目标端發送SYN請求建立連接配接
2、目标端收到請求後,回複ACK同意連接配接并同意發送SYN請求建立連接配接
3、掃描端收到後,發送ACK同意,此時三次握手完成,以此來判斷端口是否存活
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLzkzNzgTNwkDMy0COwQzN1MDMyETMxMDM5EDMy0CNwYTO4QTMvw1MwkTMwIzLcRDM2kDO0EzLcd2bsJ2Lc12bj5ycn9Gbi52YugTMwIzZtl2Lc9CX6MHc0RHaiojIsJye.png)
TCP掃描的python實作過程
importtime
importsocket
out_time=1
deftcp_scan(ip,port):
try:
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #建立socket連接配接,TCP協定
s.settimeout(out_time) #設定逾時時間
c=s.connect_ex((ip,port)) #與目标端建立連接配接,成功但會 0
ifc==0:
print("%s:%sopen!"%(ip,port))
exceptExceptionase:
print(e)
s.close()
s_time=time.time()
ip="10.32.1.238" #目标機ip
foriinrange(20,50): #掃描端口的範圍
tcp_scan(ip,i)
e_time=time.time()
print(e_time-s_time)
二、SYN掃描
為針對TCP掃描,目前有種防禦方式:若發現網絡中的某台裝置進行了端口掃描,會将其加入黑名單。實作這種防禦的原理是:每次TCP連接配接後會将資訊記錄到日志中,當發現某IP多次連接配接裝置的不同端口,就可以判斷是TCP掃描,此時就可以将此IP加入黑名單。
為避免被TCP掃描抓到,誕生了SYN掃描,原理同樣是利用了TCP三向交握。
1、掃描端向目标端發送SYN請求建立連接配接
2、目标端收到請求後,回複ACK同意連接配接并同意發送SYN請求建立連接配接
3、掃描端收到後,發送RST拒絕建立連接配接。
與TCP掃描不用的是,當掃描端收到ACK/SYN應答時,發送了一條拒絕建立連接配接的RST請求,此時三次握手建立失敗,是以目标端就不會将其記錄在日志中,但同時也掃描到了端口資訊。與TCP掃描相比更加隐蔽。
三、掃描工具
被稱為掃描之王的nmap工具是一款極強的端口掃描工具,支援linux和windows系統,具體優勢如下:
1、多種多樣的參數,豐富的腳本庫,滿足使用者的個人定制需求,其中腳本庫還提供了很多強大的功能任你選擇
2、強大的可移植性,基本上能在所有的主流系統上運作,而且代碼是開源的
3、詳細的文檔說明,和強大的社群團隊進行支援,方面新人上手
使用方法可參考:https://www.cnblogs.com/nmap/p/6232207.html