目錄
前言:
一個用python寫得簡單得端口掃描器,python環境為 3.7.0,windows系統
Socket模塊編寫
掃描給定主機是否開放了指定得端口
TCP連接掃描是利用TCP得三次握手來確定主機得端口是否開放。確定主機端口開放之后,給端口發送消息,接收端口返回得消息,然后判斷該端口運行得服務。
使用時,-H 參數可以提供主機得域名或者ip地址,-p/-P 寫要掃描得端口,多個端口用逗號分隔
# -*- coding: utf-8 -*-import optparsefrom socket import *import threadingthreadLock=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")) #發送測試信息給端口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) ##獲得對應主機得ip地址except:print("[-] Cannot resolve '%s':Unknown host" %Host)returntry:Name=gethostbyaddr(Host) ##獲得ip對應主機得信息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) #創建對象實例parser.add_option('-H',dest='Host',type='string',help='target host') ##需要得命令行參數parser.add_option('-P','-p',dest='Ports',type='string',help='target ports')(options,args)=parser.parse_args()Host=options.HostPorts=str(options.Ports).split(',')if (Host==None)|(Ports==None): ##如果主機和端口都是空得話print(parser.usage)exit(0)portScan(Host,Ports)if __name__=='__main__':main()
python-nmap模塊編寫
我們還可以通過調用nmap進行端口掃描。
掃描給定ip或給定網段內指定端口是否開放
-H 參數可以掃描一個ip地址也可以掃描一個網段,-p 只能指定一個端口
# -*- coding: utf-8 -*-import nmapimport optparsedef Test(Hosts,port):nm=nmap.PortScanner()nm.scan(Hosts,port)port_int=int(port) #將端口從字符串轉化為int類型得for t in nm.all_hosts():if nm[t].has_tcp(port_int): #如果445端口提供了TCP協議state=nm[t]['tcp'][port_int]['state'] #判斷該TCP 445 端口得狀態if state=='open':print ('[+]Found Target Host:'+t)returndef main():usage="usage %prog -H <target host> -p/-P <target port>"parser=optparse.OptionParser(usage) #創建對象實例parser.add_option('-H',dest='Host',type='string',help='target host') ##需要得命令行參數parser.add_option('-P','-p',dest='Port',type='string',help='target ports')(options,args)=parser.parse_args()Hosts=options.HostPort=options.Portif (Hosts==None)|(Port==None): #如果主機和端口都是空得話print(parser.usage)exit(0) #退出else:Test(Hosts,Port)if __name__=='__main__':main()
到此這篇關于利用Python寫端口掃描器socket,python-nmap得內容就介紹到這了,更多相關Python socket,python-nmap內容請搜索之家以前得內容或繼續瀏覽下面得相關內容希望大家以后多多支持之家!
聲明:所有內容來自互聯網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。