利用Python腳本寫端口掃描器socket,python-nmap
前言:
一個用python寫的簡單的端口掃描器,python環境為 3.7.0,windows系統
Socket模塊編寫
掃描給定主機是否開放瞭指定的端口
TCP連接掃描是利用TCP的三次握手來確定主機的端口是否開放。確定主機端口開放之後,給端口發送消息,接收端口返回的消息,然後判斷該端口運行的服務。
使用時,-H 參數可以提供主機的域名或者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")) #發送測試信息給端口 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) return try: 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.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模塊編寫
我們還可以通過調用nmap進行端口掃描。
掃描給定ip或給定網段內指定端口是否開放
-H 參數可以掃描一個ip地址也可以掃描一個網段,-p 隻能指定一個端口
# -*- coding: utf-8 -*- import nmap import optparse def 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) return def 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.Host Port=options.Port if (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內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Python編寫nmap掃描工具
- 用Python實現zip密碼破解實例
- PyHacker編寫指南引用Nmap模塊實現端口掃描器
- Python實現Socket通信建立TCP反向連接
- Python實現多任務版的udp聊天器