利用Python腳本寫端口掃描器socket,python-nmap
前言:
一個用python寫的簡單的端口掃描器,python環(huán)境為 3.7.0,windows系統(tǒng)
Socket模塊編寫
掃描給定主機是否開放了指定的端口
TCP連接掃描是利用TCP的三次握手來確定主機的端口是否開放。確定主機端口開放之后,給端口發(fā)送消息,接收端口返回的消息,然后判斷該端口運行的服務(wù)。
使用時,-H 參數(shù)可以提供主機的域名或者ip地址,-p/-P 寫要掃描的端口,多個端口用逗號分隔
# -*- coding: utf-8 -*- import optparse from socket import * import threading threadLock=threading.Lock() #實例化threadLock對象 def connScan(Host,Port): try: conn=socket(AF_INET,SOCK_STREAM) conn.connect((Host,Port)) conn.send('test message'.encode("utf-8")) #發(fā)送測試信息給端口 results=conn.recv(100) #接收主機返回的信息 threadLock.acquire() #加鎖 print('[+]%d/tcp open'% Port) print('[+] '+results.decode("utf-8")) conn.close() except Exception as e: threadLock.acquire() print(e) print('[-]%d/tcp closed'% Port) finally: threadLock.release() #釋放鎖 conn.close() def portScan(Host,Ports): try: IP=gethostbyname(Host) ##獲得對應(yīng)主機的ip地址 except: print("[-] Cannot resolve '%s':Unknown host" %Host) return try: Name=gethostbyaddr(Host) ##獲得ip對應(yīng)主機的信息 print ("\n[+] Scan Results for:"+Name[0]) except: print ("\n[+] Scan Results for:"+IP) setdefaulttimeout(1) for Port in Ports: print ("Scanning port "+Port) connScan(Host,int(Port)) def main(): usage="usage %prog -H <target host> -p/-P <target ports>" parser=optparse.OptionParser(usage) #創(chuàng)建對象實例 parser.add_option('-H',dest='Host',type='string',help='target host') ##需要的命令行參數(shù) parser.add_option('-P','-p',dest='Ports',type='string',help='target ports') (options,args)=parser.parse_args() Host=options.Host Ports=str(options.Ports).split(',') if (Host==None)|(Ports==None): ##如果主機和端口都是空的話 print(parser.usage) exit(0) portScan(Host,Ports) if __name__=='__main__': main()
python-nmap模塊編寫
我們還可以通過調(diào)用nmap進行端口掃描。
掃描給定ip或給定網(wǎng)段內(nèi)指定端口是否開放
-H 參數(shù)可以掃描一個ip地址也可以掃描一個網(wǎng)段,-p 只能指定一個端口
# -*- coding: utf-8 -*- import nmap import optparse def Test(Hosts,port): nm=nmap.PortScanner() nm.scan(Hosts,port) port_int=int(port) #將端口從字符串轉(zhuǎn)化為int類型的 for t in nm.all_hosts(): if nm[t].has_tcp(port_int): #如果445端口提供了TCP協(xié)議 state=nm[t]['tcp'][port_int]['state'] #判斷該TCP 445 端口的狀態(tài) if state=='open': print ('[+]Found Target Host:'+t) return def main(): usage="usage %prog -H <target host> -p/-P <target port>" parser=optparse.OptionParser(usage) #創(chuàng)建對象實例 parser.add_option('-H',dest='Host',type='string',help='target host') ##需要的命令行參數(shù) parser.add_option('-P','-p',dest='Port',type='string',help='target ports') (options,args)=parser.parse_args() Hosts=options.Host Port=options.Port if (Hosts==None)|(Port==None): #如果主機和端口都是空的話 print(parser.usage) exit(0) #退出 else: Test(Hosts,Port) if __name__=='__main__': main()
到此這篇關(guān)于利用Python腳本寫端口掃描器socket,python-nmap的文章就介紹到這了,更多相關(guān)Python socket,python-nmap內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python實現(xiàn)socket端口重定向示例
- Python的Socket編程過程中實現(xiàn)UDP端口復(fù)用的實例分享
- Python的Asyncore異步Socket模塊及實現(xiàn)端口轉(zhuǎn)發(fā)的例子
- 基于Python socket的端口掃描程序?qū)嵗a
- python基于socket進行端口轉(zhuǎn)發(fā)實現(xiàn)后門隱藏的示例
- python使用多線程+socket實現(xiàn)端口掃描
- python基于socket函數(shù)實現(xiàn)端口掃描
- Python利用socket模塊開發(fā)簡單的端口掃描工具的實現(xiàn)
相關(guān)文章
詳解Python圖像形態(tài)學(xué)處理(開運算,閉運算,梯度運算)
數(shù)學(xué)形態(tài)學(xué)(Mathematical Morphology)是一種應(yīng)用于圖像處理和模式識別領(lǐng)域的新方法。本文將為大家介紹Python圖像形態(tài)學(xué)處理中的開運算、閉運算和梯度運算,感興趣的可以了解一下2022-06-06python+selenium+autoit實現(xiàn)文件上傳功能
這篇文章主要介紹了python+selenium+autoit實現(xiàn)文件上傳功能,需要的朋友可以參考下2017-08-08python微信聊天機器人改進版(定時或觸發(fā)抓取天氣預(yù)報、勵志語錄等,向好友推送)
這篇文章主要介紹了python微信聊天機器人改進版,定時或觸發(fā)抓取天氣預(yù)報、勵志語錄等,向好友推送 ,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-04-04tensorflow1.0學(xué)習(xí)之模型的保存與恢復(fù)(Saver)
這篇文章主要介紹了tensorflow1.0學(xué)習(xí)之模型的保存與恢復(fù)(Saver) ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-04-04python3調(diào)用百度翻譯API實現(xiàn)實時翻譯
這篇文章主要為大家詳細介紹了python3調(diào)用百度翻譯API,實現(xiàn)實時翻譯,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-08-08