国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

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

2021-01-15 08:48:14孟彬智云壘鐘翡
關(guān)鍵詞:端口號(hào)服務(wù)端IP地址

◆孟彬 智云壘 鐘翡

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

◆孟彬 智云壘 鐘翡

(96822部隊(duì) 云南 650000)

本文研究了計(jì)算機(jī)端口掃描技術(shù),介紹了常用端口掃描技術(shù)的原理,并利用Python的socket模塊實(shí)現(xiàn)遠(yuǎn)程計(jì)算機(jī)TCP端口的全連接掃描,通過掃描發(fā)現(xiàn)處于開放狀態(tài)的高危端口,提醒網(wǎng)絡(luò)運(yùn)維人員合理的關(guān)閉高危端口可提高計(jì)算機(jī)的安全性。

全連接掃描;Python;socket

端口在計(jì)算機(jī)中有非常重要的意義,端口是計(jì)算機(jī)與外界交互信息的通道??梢赃@樣理解,計(jì)算機(jī)端口在傳輸層上用來標(biāo)識(shí)同一臺(tái)計(jì)算機(jī)的不同進(jìn)程??蛻舳送ǔ?duì)它使用的端口號(hào)不關(guān)心,只需要保障該端口在本機(jī)上是唯一的即可,客戶端與服務(wù)端通信時(shí)常用動(dòng)態(tài)端口,服務(wù)端使用固定的知名端口,客戶端的端口號(hào)與服務(wù)端的端口號(hào)不需要一一對(duì)應(yīng)。IP地址和端口號(hào)的組合成為套接字Socket,在一個(gè)主機(jī)上是唯一的,一條連接由客戶端和服務(wù)器的套接字組成[1]。

計(jì)算機(jī)端口在網(wǎng)絡(luò)安全方面有極重要的意義,黑客和一些木馬程序會(huì)利用端口漏洞實(shí)施入侵活動(dòng)。對(duì)目標(biāo)主機(jī)進(jìn)行掃描可以得到其端口的開放情況,根據(jù)主機(jī)運(yùn)行的業(yè)務(wù),合理的關(guān)閉不需要的高危端口,就可以防止木馬與黑客利用這些端口開展攻擊的活動(dòng),從而提高計(jì)算機(jī)的安全性。常見的高危端口有135、137、138、139、445等端口,135端口用于RPC(遠(yuǎn)程過程調(diào)用)服務(wù)、137端口用于NetBIOS名稱服務(wù),138和139端口用于局域網(wǎng)中的共享服務(wù),445用于文件夾和打印機(jī)共享服務(wù)[2]。

1 常見端口掃描技術(shù)

常見端口掃描技術(shù)有全連接掃描、半連接掃描、FIN掃描、ACK掃描和NULL掃描等。

TCP Connect掃描又稱全連接掃描,TCP connect()函數(shù)會(huì)調(diào)用系統(tǒng)提供的傳輸層接口API,嘗試通過三次握手與目標(biāo)的指定端口建立TCP連接,根據(jù)連接的建立情況判斷目標(biāo)端口是否開放。優(yōu)點(diǎn)是易于實(shí)現(xiàn),掃描速度快,可同時(shí)掃描多個(gè)用戶,無須管理員權(quán)限。缺點(diǎn)是會(huì)在目標(biāo)主機(jī)的日志中記錄大量的連接建立與關(guān)閉信息。

TCP SYN掃描又稱半連接掃描,掃描時(shí)與目標(biāo)機(jī)指定端口建立TCP連接時(shí)僅完成前兩次握手,在第三次握手時(shí)不發(fā)送確認(rèn)報(bào)文,使TCP連接無法確認(rèn)。優(yōu)點(diǎn)是目標(biāo)主機(jī)日志中記錄的連接信息較少,缺點(diǎn)是實(shí)現(xiàn)較為復(fù)雜且需要較高的權(quán)限。

FIN掃描,不依賴TCP的三次握手,向目標(biāo)端口發(fā)送一個(gè)設(shè)置了FIN標(biāo)記的報(bào)文,根據(jù)系統(tǒng)返回或不返回報(bào)文判斷端口的開放情況。缺點(diǎn)是掃描結(jié)果不準(zhǔn)確,容易得到錯(cuò)誤結(jié)論。

ACK掃描,發(fā)送的報(bào)文只設(shè)置ACK標(biāo)志位,若收到目標(biāo)主機(jī)返回的RST標(biāo)記的報(bào)文,只能判斷目標(biāo)主機(jī)未被防火墻保護(hù)不能判斷端口是否開放。若未收到任何報(bào)文或收到ICMP不可達(dá)報(bào)文,說明端口受到防火墻保護(hù)。ACK掃描判斷端口是否開放容易出錯(cuò),更適合確定目標(biāo)是否在線。

NULL掃描又稱空掃描,將發(fā)送的報(bào)文中所有標(biāo)記都置為0,若目標(biāo)返回RST報(bào)文表示端口關(guān)閉,若目標(biāo)沒返回報(bào)文,表示端口開放或被防火墻保護(hù)[3]。缺點(diǎn)是掃描結(jié)果不準(zhǔn)確。

綜上所述,TCP Connect掃描因具有掃描速度快、掃描結(jié)果準(zhǔn)確、權(quán)限要求低等優(yōu)點(diǎn),得到了較廣泛的應(yīng)用。

2 使用Python進(jìn)行端口掃描

計(jì)算機(jī)間通過IP地址與端口號(hào)進(jìn)行通信的方式稱為socket通信,HTTP、FTP、DNS等應(yīng)用都是通過socket通信實(shí)現(xiàn)的,socket通信中提供服務(wù)的一方稱為socket服務(wù)端,調(diào)用socket服務(wù)的一方稱為socket客戶端。Socket服務(wù)端用自己的IP地址、指定端口號(hào)和連接方式創(chuàng)建服務(wù)并啟動(dòng)服務(wù)并等待客戶端的連接請(qǐng)求,socket客戶端向服務(wù)端發(fā)起連接請(qǐng)求,連接請(qǐng)求被服務(wù)端接受后,客戶端和服務(wù)端就可以進(jìn)行通信了。

Python可直接調(diào)用socket對(duì)象,通過socket套接字向目標(biāo)主機(jī)的端口發(fā)送TCP connect()請(qǐng)求,若目標(biāo)主機(jī)上的指定端口處于偵聽狀態(tài),就可以建立連接[4]。若目標(biāo)主機(jī)未開放該端口,則connect()操作失敗,產(chǎn)生異常。

2.1 建立TCP connect()

在掃描前要先建立TCP連接,關(guān)鍵代碼如下:

import socket #導(dǎo)入socket模塊

tcps=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #建立TCP套接字

tcps.connect((ip,port))#連接指定主機(jī)的目標(biāo)端口

tcps.shutdown(2)

tcps就是建立的socket對(duì)象,利用socket對(duì)象tcps對(duì)目標(biāo)主機(jī)進(jìn)行connect連接,connect()函數(shù)只能接受一個(gè)參數(shù),ip地址與端口號(hào)要用元組表示,ip與端口號(hào)在函數(shù)調(diào)用時(shí)傳入。tcps.shutdown(2)表示tcps套接字不允許傳輸數(shù)據(jù),只能用于掃描端口。

若目標(biāo)主機(jī)指定端口未開啟,則返回connect refuse結(jié)果,會(huì)產(chǎn)生connect操作失敗異常,可以用try except捕捉connect異常,通過對(duì)連接異常的捕捉可判斷目標(biāo)主機(jī)端口的開啟情況。

2.2 實(shí)現(xiàn)程序

定義連接判斷函數(shù):

def TcpOpen(ip,port):

tcps=socket.socket(socket.AF_INET,

socket.SOCK_STREAM)

try:

tcps.connect((ip,int(port)))

tcps.shutdown(2)

result.insert('insert','TCP端口{}isopen!!! '.format(port))

tcps.close()

except Exception as e:

return None

連接判斷函數(shù)的主要功能是:根據(jù)ip和port參數(shù)指定的IP地址和端口號(hào),去連接目標(biāo)主機(jī)的相應(yīng)端口,若連接成功在Text窗體result上顯示端口開放信息,表示端口是開放的,連接失敗的端口不顯示,表示端口未開放。

定義掃描函數(shù):

def scanport():

begin = input1.get() #變量begin表示起始掃描端口

end=input2.get() #變量end表示終止掃描端口

ip =show_ip.get() #變量ip是要掃描的目標(biāo)主機(jī)IP

for i in range(eval(begin), eval(end)):

TcpOpen(ip,i)

掃描主機(jī)的ip地址由用戶填寫,ip地址默認(rèn)為”127.0.0.1”,,既可以掃描遠(yuǎn)程計(jì)算機(jī)也可以掃描本地計(jì)算機(jī)。用戶可任意指定開始端口號(hào)和終止端口號(hào),知名端口、注冊(cè)端口和動(dòng)態(tài)端口號(hào)均可,但要注意的是端口范圍越大掃描的時(shí)間就越長。

2.3 顯示界面設(shè)計(jì)

界面設(shè)計(jì)采用Python自帶的Tkinter模塊,運(yùn)行的界面如下:

圖1 端口掃描器的界面

2.4 功能測(cè)試

指定掃描端口范圍是0-1024,指定目標(biāo)主機(jī)的ip是28.90.31.182,程序執(zhí)行完畢后就會(huì)輸出在1-1024范圍里的所有的開放的端口,如下圖2所示。

圖2 目標(biāo)主機(jī)的端口掃描結(jié)果

通過端口掃描可看到110、135、139、443、902、912等知名端口是處于開放狀態(tài)的,網(wǎng)絡(luò)運(yùn)維人員可以根據(jù)主機(jī)的實(shí)際運(yùn)行情況關(guān)閉部分開放的端口,可提高計(jì)算機(jī)的安全性。這里以掃描TCP知名端口為例,對(duì)于動(dòng)態(tài)端口和注冊(cè)端口也同樣適用。

3 結(jié)語

端口掃描技術(shù)對(duì)于計(jì)算機(jī)安全有重要的意義,隨著計(jì)算機(jī)網(wǎng)絡(luò)的發(fā)展,計(jì)算機(jī)面臨的網(wǎng)絡(luò)攻擊與日俱增,端口掃描是網(wǎng)絡(luò)防御的重要環(huán)節(jié)。本文介紹了5種常用的端口掃描技術(shù),并編寫了端口掃描工具,實(shí)現(xiàn)了對(duì)目標(biāo)主機(jī)TCP端口的掃描功能,得到了開放的TCP端口列表,及時(shí)關(guān)閉不使用的高危端口可提高計(jì)算機(jī)的安全性。下一步,將重點(diǎn)研究如何快捷高效的掃描UDP端口,同時(shí)端口掃描工具有較強(qiáng)的可擴(kuò)展性,還需進(jìn)一步豐富掃描工具的功能、提高可用性。

[1]Brandon Rhodes John Goerzen. Python網(wǎng)絡(luò)編程[M].北京:人民郵電出版社,2016:18-19.

[2]裴志斌,李斌勇,王星程.IP及端口掃描體系的邏輯處理設(shè)計(jì)[J]. 網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2017(10):26-27.

[3]梁劍非.多線程端口掃描軟件設(shè)計(jì)與實(shí)現(xiàn)[D].成都:電子科技大學(xué),2011

[4]趙宏,包廣斌,馬棟林.Python網(wǎng)絡(luò)編程(Linux)[M].北京:清華大學(xué)出版社,2018:108-111.

猜你喜歡
端口號(hào)服務(wù)端IP地址
鐵路遠(yuǎn)動(dòng)系統(tǒng)幾種組網(wǎng)方式IP地址的申請(qǐng)和設(shè)置
在Docker容器中安裝應(yīng)用程序
云存儲(chǔ)中基于相似性的客戶-服務(wù)端雙端數(shù)據(jù)去重方法
新時(shí)期《移動(dòng)Web服務(wù)端開發(fā)》課程教學(xué)改革的研究
在Windows Server 2008上創(chuàng)建應(yīng)用
基于SNMP的IP地址管理系統(tǒng)開發(fā)與應(yīng)用
黑龍江電力(2017年1期)2017-05-17 04:25:16
淺談以java為基礎(chǔ)的Socket通信簡介及實(shí)現(xiàn)
青春歲月(2017年5期)2017-04-20 18:34:23
Winsock編程在《計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)》教學(xué)中的應(yīng)用
基于Android系統(tǒng)的互動(dòng)展示APP的研究與設(shè)計(jì)
“鴿子”玩升級(jí) 黑你沒商量
嘉定区| 社旗县| 河北省| 平利县| 广德县| 正镶白旗| 天峨县| 化德县| 白玉县| 赤城县| 沙洋县| 阳江市| 梧州市| 杭锦后旗| 衢州市| 丹江口市| 论坛| 元氏县| 长岭县| 温州市| 灌南县| 安远县| 阳城县| 偏关县| 郧西县| 彩票| 新田县| 德安县| 博客| 萨迦县| 北安市| 孝昌县| 巴青县| 永和县| 常宁市| 北碚区| 本溪市| 固安县| 黎城县| 玛纳斯县| 抚州市|