999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Python 的端口掃描技術(shù)研究

2022-03-18 01:36:19宋來(lái)建
科海故事博覽 2022年6期
關(guān)鍵詞:服務(wù)

宋來(lái)建

(重慶科創(chuàng)職業(yè)學(xué)院,重慶 402160)

端口在計(jì)算機(jī)發(fā)展和使用過(guò)程中起著十分重要的作用,端口能夠連接計(jì)算機(jī)與外界,實(shí)現(xiàn)兩者之間信息的交互。通常情況下,客戶并不關(guān)心使用的端口號(hào),只需要保證該端口在本機(jī)上是唯一的即可。

1 端口掃描技術(shù)概述

1.1 TCP/IP 工作原理

TCP/IP參考模型來(lái)源于20世紀(jì)60年代末美國(guó)的一個(gè)網(wǎng)絡(luò)分組交換研究項(xiàng)目,是一系列網(wǎng)絡(luò)協(xié)議的總稱。這些協(xié)議的存在能夠促使計(jì)算機(jī)之間的信息交換變得更加方便和容易。TCP/IP參考模型一共分為四層,每一層都負(fù)責(zé)不同的通信功能,從上到下分別為:應(yīng)用層、傳輸層、Internet層、網(wǎng)絡(luò)接入層。TCP/IP參考模型的傳輸層包括TCP和UDP兩種,前者是指?jìng)鬏斂刂茀f(xié)議,主要面向受控對(duì)象,提供可靠的、面向連接的傳輸任務(wù),在傳送數(shù)據(jù)前務(wù)必先要建立連接,在確認(rèn)信息到達(dá)目的之后,再開始對(duì)錯(cuò)誤的檢查與修復(fù)、順序和流量的控制等。后者是指用戶數(shù)據(jù)報(bào)送協(xié)議,這一傳輸層主要提供不可靠、無(wú)連接的傳輸服務(wù),在傳送數(shù)據(jù)錢無(wú)需提前建立連接,也不需要確認(rèn)信息是否送達(dá)。

1.2 端口的定義

端口專門為計(jì)算機(jī)而設(shè)計(jì)的,負(fù)責(zé)計(jì)算機(jī)通信,可以說(shuō),離開了端口計(jì)算機(jī)通信就無(wú)法進(jìn)行。在計(jì)算機(jī)網(wǎng)絡(luò)中,一般分為以下兩種端口:硬件端口和軟件端口。集線器、交換機(jī)、路由器等網(wǎng)絡(luò)設(shè)備由于可以連接到其他網(wǎng)絡(luò)設(shè)備上使用,故被稱為硬件端口。軟件端口通常有套接字中的端口。套接字是由IP地址和端口兩部分組成。軟件端口通常而言是邏輯概念,定義了計(jì)算機(jī)之間通過(guò)軟件通信的方式。

1.3 端口掃描技術(shù)

端口掃描是一種通過(guò)連接到目標(biāo)計(jì)算機(jī)的TCP和UDP端口來(lái)確定目標(biāo)計(jì)算機(jī)上運(yùn)行的服務(wù)方法。現(xiàn)階段,端口掃描主要用于識(shí)別計(jì)算機(jī)上啟用的服務(wù)和開放的端口;識(shí)別計(jì)算機(jī)上操作系統(tǒng)類型和系統(tǒng)信息;識(shí)別在線的一臺(tái)計(jì)算機(jī)或多臺(tái)計(jì)算機(jī)組成個(gè)網(wǎng)絡(luò)。

1.4 端口掃描的目的

端口掃描技術(shù)的出現(xiàn)主要是為了滿足網(wǎng)絡(luò)管理員、網(wǎng)絡(luò)技術(shù)人員以及普通計(jì)算機(jī)用戶的需求而誕生的一種科學(xué)技術(shù)。每個(gè)用戶進(jìn)行端口掃描的目的也有所不同,所以不同的用戶對(duì)網(wǎng)絡(luò)的使用方式不同。普通用戶使用端口掃描是為了了解某一特定的服務(wù)器是否可以提供自己需要的服務(wù);網(wǎng)絡(luò)技術(shù)人員進(jìn)行端口掃描是為了利用已經(jīng)打開的窗口來(lái)獲取對(duì)自己有用的信息;而網(wǎng)絡(luò)管理員進(jìn)行端口掃描主要是為了關(guān)閉不在繼續(xù)使用的端口,進(jìn)而安裝有漏洞的端口補(bǔ)丁程序。

2 通過(guò)掃描主機(jī)端口建立循環(huán)嵌套構(gòu)

我們都知道,C、Python等語(yǔ)言都可以利用來(lái)編寫端口掃描器。(大部分互聯(lián)網(wǎng)應(yīng)用使用的都是TCP協(xié)議,如HTTP在TCP80端口上,SMTP在TCP25端口上等等)。這種掃描方式可用來(lái)檢測(cè)端口是否被過(guò)濾。TCPFIN掃描一一請(qǐng)求服務(wù)的一方發(fā)送一個(gè)FIN=1的數(shù)據(jù)包,這種掃描方式大多用于判斷操作類型。此外,還有很多種掃描方式,對(duì)應(yīng)于不同的網(wǎng)絡(luò)環(huán)境,選擇不同的掃描方式,往往會(huì)達(dá)到比較理想的效果。Scan函數(shù)引入IP和端口通過(guò)套接字進(jìn)行連接并打印相關(guān)信息,在函數(shù)中通過(guò)發(fā)送一個(gè)數(shù)據(jù)串從而獲取到使用對(duì)應(yīng)端口的服務(wù)回應(yīng)的banner。再介紹下for循環(huán):使用內(nèi)建socket模塊建立一個(gè)socket連接:準(zhǔn)備環(huán)境ubuntu(ip:192.168.213.20)主機(jī)win10(ip:192.168.213.16)開著ssh服務(wù)kali(ip:192.168.213.19),筆者使用的是vim編輯器,上面這個(gè)例子先引用socket模塊然后調(diào)用connect()函數(shù)連接ip與端口。它會(huì)與tcp連接,并且這樣就不會(huì)出現(xiàn)錯(cuò)誤,一行很簡(jiǎn)單的代碼就可以讓程序繼續(xù)執(zhí)行下去。接下來(lái)使用for循環(huán)來(lái)寫一個(gè)簡(jiǎn)單的端口掃描器:使用“try/except”循環(huán)來(lái)處理當(dāng)socket連接的時(shí)候遇到端口關(guān)閉的錯(cuò)誤,另外打印出來(lái)連接成功的端口以及對(duì)應(yīng)的服務(wù)信息。下面創(chuàng)建一個(gè)自己指定的端口進(jìn)行掃描,接下來(lái)筆者就可以嘗試一下循環(huán)嵌套構(gòu)。[1-2]

比如說(shuō),筆者知道在服務(wù)器的端口上運(yùn)行著相應(yīng)的服務(wù),這些服務(wù)有其版本。筆者在服務(wù)器上執(zhí)行端口掃描有兩個(gè)目的:第一個(gè)是確定服務(wù)器上啟用了哪些服務(wù);第二個(gè)是確定使用哪個(gè)版本的服務(wù)。這兩個(gè)目的都是縮小行動(dòng)范圍,提高其效率和準(zhǔn)確性。例如,如果筆者知道主機(jī)上啟用了端口80,它很可能提供Web服務(wù),筆者可以根據(jù)主機(jī)用于Web服務(wù)的語(yǔ)言(如PHP)、框架(如WordPress)和框架版本(如4.8.2)進(jìn)一步搜索相應(yīng)的漏洞;筆者經(jīng)常使用SSH遠(yuǎn)程登錄服務(wù)器,例如,默認(rèn)運(yùn)行在端口22上,如果筆者掃描服務(wù)器打開此端口,服務(wù)器很可能會(huì)打開遠(yuǎn)程連接的功能,如果筆者獲取banner獲取其服務(wù)版本的SSH則存在一個(gè)版本的安全漏洞,因此有一個(gè)新的測(cè)試攻擊點(diǎn)。接觸網(wǎng)絡(luò)技術(shù)的讀者大概知道端口是什么,沒有接觸過(guò)的讀者,經(jīng)過(guò)下面的簡(jiǎn)單介紹也應(yīng)該能夠了解端口是什么。在網(wǎng)絡(luò)上,筆者將使用各種服務(wù)(不是所有類型的網(wǎng)站,當(dāng)然網(wǎng)站提供Web服務(wù)),例如瀏覽網(wǎng)站、發(fā)送電子郵件、使用FTP下載某些資源、使用SSH或Telnet連接到遠(yuǎn)程服務(wù)器等。這些服務(wù)可能都由同一臺(tái)服務(wù)器提供。同一臺(tái)服務(wù)器上有這么多服務(wù),如何區(qū)分它們?端口用于區(qū)分和唯一標(biāo)識(shí)它們,每個(gè)服務(wù)使用不同的端口,就像建筑物中的不同房間一樣。筆者常用的Web服務(wù)默認(rèn)使用端口80;用于上傳和下載文件的FTP使用端口21;筆者通過(guò)域名或IP地址找到相應(yīng)的服務(wù)器,然后通過(guò)端口號(hào)找到相應(yīng)的服務(wù)。[3-4]

3 基于for 循環(huán)的縮進(jìn)掃描

為了實(shí)現(xiàn)這一目標(biāo),筆者將引入一個(gè)新概念,即for循環(huán):請(qǐng)注意,在上面的代碼片段中,for循環(huán)的主體是縮進(jìn)的。通常人們用2個(gè)空格或用制表符縮進(jìn),只要在整個(gè)劇本中保持一致就沒關(guān)系。要制作簡(jiǎn)單的端口掃描程序,筆者將使用創(chuàng)建套接字連接的代碼片段替換print語(yǔ)句。下面的代碼顯示了如何使用內(nèi)置套接字模塊建立套接字連接:上面筆者導(dǎo)入套接字模塊并調(diào)用connect()函數(shù)連接到給定的IP地址和端口號(hào)。這將建立TCP連接(SYN/SYN-ACK/ACK),筆者實(shí)際上使用send()函數(shù)將數(shù)據(jù)發(fā)送到給定服務(wù),并使用recv()打印響應(yīng)。現(xiàn)在,如果端口未打開,socket將拋出異常:這可以通過(guò)多種方式解決。現(xiàn)在筆者將使用一種非常簡(jiǎn)單的方法并使用“try/except”循環(huán)并傳遞異常:注意沒有錯(cuò)誤。現(xiàn)在讓筆者結(jié)合所有這些概念并制作一個(gè)快速的循環(huán)端口掃描程序:上面筆者演示了“try/except”循環(huán)的基本用法,以便在端口關(guān)閉時(shí)傳遞socket拋出的異常。筆者還展示了如何利用帶有“if”的基本條件語(yǔ)句,如果端口響應(yīng)筆者的探測(cè)器,則僅嘗試打印端口打開。創(chuàng)建端口掃描程序的另一種方法是定義一個(gè)希望用數(shù)組掃描的端口列表,然后遍歷該數(shù)組:如果筆者想要一次處理多個(gè)主機(jī),就要利用嵌套的for循環(huán)。這將涉及循環(huán)通過(guò)主機(jī)的外層for循環(huán)和將循環(huán)通過(guò)端口的內(nèi)部for循環(huán)。下面是如何利用嵌套for循環(huán)來(lái)制作稍微復(fù)雜的掃描程序的基本示例:正如在輸出中看到的那樣,它會(huì)循環(huán)hosts數(shù)組并嘗試ports數(shù)組中的每個(gè)端口,然后繼續(xù)前進(jìn)到下一個(gè)主機(jī)。對(duì)于最終端口掃描程序,可能希望將print語(yǔ)句修改為僅打印已打開的端口。在一天結(jié)束時(shí),會(huì)發(fā)現(xiàn)Nmap仍然是端口掃描的更好選擇,但筆者將在后面的文章中構(gòu)建這些概念,以完成一些更實(shí)際的用例。我們可以花一些時(shí)間來(lái)探索插座模塊“dir(socket)”中可用的各種功能。[5]

4 深度測(cè)試TCP 連接掃描

TCP連接掃描使用完整的三方握手來(lái)確定服務(wù)器或端口是否可用。筆者將腳本分為幾個(gè)單獨(dú)的步驟,首先輸入主機(jī)名和以逗號(hào)分隔的端口列表并開始掃描,然后將主機(jī)名轉(zhuǎn)換為IPv4地址,再與每個(gè)端口建立TCP連接并捕獲目標(biāo)端口應(yīng)用程序的標(biāo)題信息。首先,來(lái)看看OptParse模塊。由于OptParse模塊主要用于將命令參數(shù)傳遞給腳本,因此它使用預(yù)定義的選項(xiàng)來(lái)解析命令行參數(shù)。需要導(dǎo)入OptParser模塊,初始化它,實(shí)例化OptionParser對(duì)象(帶或不帶參數(shù)),并向命令行添加選項(xiàng)。其次,筆者需要定制兩個(gè)函數(shù),每個(gè)函數(shù)一個(gè)。第一個(gè)功能是創(chuàng)建一個(gè)socket對(duì)象,將測(cè)試信息發(fā)送到端口,然后接收主機(jī)返回的信息并打印;第二個(gè)功能是將從主機(jī)參數(shù)獲得的目標(biāo)值轉(zhuǎn)換為標(biāo)準(zhǔn)xxx.xxx.xxx。XXX表單,主要使用socket gethostbyname函數(shù)將域名值轉(zhuǎn)換為四點(diǎn)基表單。最后,筆者在main函數(shù)中使用OptParse模塊創(chuàng)建實(shí)例對(duì)象,確定當(dāng)前主機(jī)和端口是否為空,如果為空,則打印實(shí)例對(duì)象。那么,筆者如何使用Python進(jìn)行端口識(shí)別和掃描呢?[6]

比如說(shuō),在Python中,有一個(gè)名為socket的內(nèi)置模塊,該模塊提供網(wǎng)絡(luò)套接字操作,并包含以下函數(shù)以支持套接字連接的實(shí)現(xiàn)。要使用源地址創(chuàng)建鏈接并設(shè)置連接超時(shí),筆者可以使用此模塊的socket()函數(shù)創(chuàng)建一個(gè)socket對(duì)象以連接到服務(wù)器的指定端口,如下代碼所示:筆者使用了socket()套接字模塊的功能是建立到IP地址192.168.223.152端口22的套接字連接,然后關(guān)閉連接。當(dāng)然,無(wú)法成功連接。運(yùn)行此代碼甚至沒有輸出信息:如何獲取套接字連接的輸出信息?套接字對(duì)象中的方法Recv()可能會(huì)有所幫助:它從套接字連接返回指定大小的字節(jié)。讓筆者測(cè)試這個(gè)方法:筆者在這里測(cè)試的IP地址是Intranet主機(jī)的IP地址。筆者使用Metasploitable2作為目標(biāo)主機(jī),Metasploit是一個(gè)著名的滲透測(cè)試框架,提供了一個(gè)目標(biāo)虛擬機(jī),它是一個(gè)易受攻擊的Linux虛擬機(jī)。該虛擬機(jī)可用于安全培訓(xùn)、測(cè)試安全工具和實(shí)踐常見的滲透測(cè)試技術(shù)。運(yùn)行代碼,筆者得到套接字返回的第一個(gè)1024字節(jié)(通常是服務(wù)消息的標(biāo)題):從返回的標(biāo)題消息中,筆者知道服務(wù)器的端口22是打開的,服務(wù)版本是Ubuntu上的OpensSH4.7。由此可見,使用recv()方法,筆者可以獲得有關(guān)端口服務(wù)的最基本信息,但是如果相應(yīng)的端口未啟用或具有其他限制,則可能會(huì)報(bào)告錯(cuò)誤。

5 秘密掃描與間接掃描

端口掃描的第一步是將探測(cè)數(shù)據(jù)包發(fā)送到目標(biāo)主機(jī)的TCP/UDP端口,然后確定端口是否在對(duì)方響應(yīng)后打開。由于不同的網(wǎng)絡(luò)環(huán)境以及操作系統(tǒng)沒有響應(yīng)連接請(qǐng)求,為確保掃描的準(zhǔn)確性和速度,通常在端口掃描中支持多種掃描方式。由于該技術(shù)不包含標(biāo)準(zhǔn)的TCP3次握手協(xié)議的任何部分,因此無(wú)法記錄,從而比SYN掃描隱蔽得多。另外,F(xiàn)IN數(shù)據(jù)包能夠通過(guò)只監(jiān)測(cè)SYN包的包過(guò)濾器。秘密掃描技術(shù)使用FIN數(shù)據(jù)包來(lái)探聽端口。當(dāng)FIN數(shù)據(jù)包到達(dá)關(guān)閉的端口,數(shù)據(jù)包會(huì)丟掉,并且會(huì)返回一個(gè)RST數(shù)據(jù)包;當(dāng)FIN數(shù)據(jù)包到達(dá)打開的端口,數(shù)據(jù)包也丟掉,但不返回RST。Xmas和l Null掃描是秘密掃描的2個(gè)變種。Xmas掃描打開FIN、URG和PUISH標(biāo)記,而 Null 掃描關(guān)閉所有標(biāo)記。這些組合的目的是為了通過(guò)FIN標(biāo)記監(jiān)測(cè)器的過(guò)濾。跟SYN掃描類似,秘密掃描也需要自己構(gòu)造IP包。間接掃描是利用第三方的IP(欺騙主機(jī))來(lái)隱藏真正掃描者的IP。間接掃描時(shí),使用第三方IP地址(主機(jī)錯(cuò)誤)來(lái)隱藏實(shí)際掃描儀的IP地址。

6 使用Pyhton 進(jìn)行端口掃描

計(jì)算機(jī)之間通過(guò)端口和IP地址進(jìn)行通信的方式稱為SOCKET通信,HTTP、FTP、DNS等都是通過(guò)SOCK ET通信方式實(shí)現(xiàn)的。這一通信方式中提供服務(wù)的一方被稱之為SOCKET服務(wù)端,而被服務(wù)的一端則被稱之為SOCKET客戶端。Python可以直接調(diào)用SOCKET對(duì)象,通過(guò)socket套接字向目標(biāo)主機(jī)的端口發(fā)送TCP connect()請(qǐng)求,如果目標(biāo)主機(jī)上的指定端口處于偵聽狀態(tài),那么便可以建立連接請(qǐng)求,但相反若該目標(biāo)主機(jī)并未開放端口,則connect()操作失敗,產(chǎn)生異常。

在進(jìn)行掃描之前首先需要建立TCP連接,關(guān)鍵就是要利用socket對(duì)象tcps對(duì)目標(biāo)主機(jī)進(jìn)行connect連接,connect()函數(shù)只能接受一個(gè)參數(shù)。如果目標(biāo)主機(jī)指定的端口并未開啟,則需要返回到connect refuse結(jié)果,并查收能connect操作失敗的指示。在實(shí)現(xiàn)程序的過(guò)程中,需要定義一個(gè)連接判斷函數(shù),這一函數(shù)的主要功能是根據(jù)IP和Port參數(shù)指定的IP地址和端口號(hào),連接目標(biāo)主機(jī)的相應(yīng)端口,若顯示連接失敗或者直接不顯示,則表明主機(jī)的端口并未開放。

7 總結(jié)

在探測(cè)一個(gè)區(qū)域的網(wǎng)絡(luò)布局時(shí),端口掃描是黑客經(jīng)常使用的一種輔助攻擊手段,掃描主機(jī)端口并不能直接對(duì)主機(jī)直接造成危害,但是可以獲取到主機(jī)的一些信息,借此來(lái)對(duì)目標(biāo)主機(jī)進(jìn)行分析,為進(jìn)一步入侵做好準(zhǔn)備。這是每一位計(jì)算機(jī)從業(yè)人員都需要格外注意的細(xì)節(jié)。

猜你喜歡
服務(wù)
自助取卡服務(wù)
服務(wù)在身邊 健康每一天
服務(wù)在身邊 健康每一天
服務(wù)在身邊 健康每一天
服務(wù)在身邊 健康每一天
服務(wù)在身邊 健康每一天
服務(wù)在身邊 健康每一天
服務(wù)在身邊 健康每一天
高等教育為誰(shuí)服務(wù):演變與啟示
招行30年:從“滿意服務(wù)”到“感動(dòng)服務(wù)”
商周刊(2017年9期)2017-08-22 02:57:56
主站蜘蛛池模板: 国产毛片高清一级国语| 亚洲黄网在线| 亚洲视频免费播放| 欧美在线三级| 制服丝袜国产精品| 三级毛片在线播放| 国产精品无码一二三视频| 亚洲综合欧美在线一区在线播放| 99在线视频网站| 四虎影视国产精品| 国产亚洲欧美在线视频| 国产成人高清精品免费| 一区二区自拍| 嫩草国产在线| 久久久黄色片| 日本a∨在线观看| 岛国精品一区免费视频在线观看| 欧美亚洲激情| A级全黄试看30分钟小视频| 亚洲电影天堂在线国语对白| 国产在线视频福利资源站| a在线观看免费| 亚洲动漫h| 国产成人久视频免费| 亚洲中文无码h在线观看 | 欧美精品1区| 99国产精品一区二区| 国产无人区一区二区三区| 欧美中文字幕在线播放| 青青青伊人色综合久久| 久热精品免费| 国产欧美精品午夜在线播放| av免费在线观看美女叉开腿| 亚洲一区二区视频在线观看| 久久精品中文字幕少妇| 亚洲成人在线网| 黄色免费在线网址| 国产精品免费福利久久播放| 色婷婷成人| 欧美在线网| 99热这里只有免费国产精品| 毛片在线播放网址| 久久精品欧美一区二区| 欧美国产日韩在线| 国产亚洲高清视频| 国内a级毛片| 久草视频中文| 99re这里只有国产中文精品国产精品| 无遮挡国产高潮视频免费观看| 色综合综合网| 色噜噜狠狠狠综合曰曰曰| 欧美a级完整在线观看| 69av免费视频| 中日韩一区二区三区中文免费视频 | 欧美不卡二区| 香蕉在线视频网站| 成AV人片一区二区三区久久| 日本人真淫视频一区二区三区| 波多野结衣久久高清免费| 中文无码日韩精品| 综合网久久| 久草中文网| 乱系列中文字幕在线视频| jizz在线观看| 欧美中文一区| 亚洲AV一二三区无码AV蜜桃| 免费a级毛片18以上观看精品| 国产特级毛片aaaaaaa高清| 毛片卡一卡二| 青青草91视频| 国产欧美日韩18| 色噜噜在线观看| 国产成人一区| 91在线无码精品秘九色APP | 欧美精品伊人久久| 国产精品九九视频| 中文字幕在线一区二区在线| 国产91丝袜在线播放动漫 | 天天操天天噜| 亚洲va欧美va国产综合下载| 成人一级黄色毛片| 欧美中文字幕在线视频|