首頁 > 軟體

利用Python指令碼寫埠掃描器socket,python-nmap

2022-07-22 22:01:18

前言:

一個用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內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com