我們通過(guò)python-nmap實(shí)現(xiàn)一個(gè)高效的端口掃描工具,與定時(shí)作業(yè)crontab及郵件告警結(jié)合,可以很好的幫助我們及時(shí)發(fā)現(xiàn)異常開(kāi)放的高危端口。當(dāng)然,該工具也可以作為業(yè)務(wù)服務(wù)端口的可用性探測(cè),例如掃描192.168.209.121-125網(wǎng)段Web服務(wù)端口80s是否處于open狀態(tài)。我們這里所采用的scan方法arguments參數(shù)指定為-v -PE -p + 端口, -v表示啟用細(xì)節(jié)模式,可以返回非up狀態(tài)主機(jī)清單;-PE表示采用TCP同步掃描(TCP SYN)方式; -p指定掃描端口范圍。程序輸出部分采用三個(gè)for循環(huán)體,第一層遍歷掃描主機(jī),第二層為遍歷協(xié)議,第三層為遍歷端口,最后輸出主機(jī)狀態(tài)。
具體腳本port_scanner.py代碼如下:
import sys
import nmap
scan_row = []
input_data = input('Please input hosts and port: ')
#scan_row以空格分隔
scan_row = input_data.split(' ')
if len(scan_row) != 2:
print("Input errors, example \"192.168.209.0/24 80,443,22 \"")
sys.exit(0)
#接收用戶(hù)輸入的主機(jī)
hosts = scan_row[0]
#接收用戶(hù)收入的端口
port = scan_row[1]
try:
#創(chuàng)建端口掃描對(duì)象
nm = nmap.PortScanner()
except nmap.PortScannerError:
print('Nmap not found', sys.exc_info()[0])
sys.exit(0)
except Exception as e:
print("Unexpected error:", sys.exc_info()[0])
print(str(e))
sys.exit(0)
try:
#調(diào)用掃描方法,參數(shù)指定掃描主機(jī)hosts,nmap掃描命令行參數(shù)arguments
nm.scan(hosts=hosts, arguments=' -v -sS -p ' + port)
except Exception as e:
print("Scan error:" + str(e))
for host in nm.all_hosts():
print('---------------------------------------------------------------------')
#輸出主機(jī)及主機(jī)名
print('Host : %s (%s)' % (host, nm[host].hostname()))
#輸出主機(jī)狀態(tài),如up、down
print('State : %s' % nm[host].state())
#遍歷掃描協(xié)議,tcp、udp
for proto in nm[host].all_protocols():
print('--------------')
#輸出協(xié)議名
print('Protocol : %s' % proto)
#獲取協(xié)議的所有掃描端口
lport = list(nm[host][proto].keys())
#端口列表排序
lport.sort()
#遍歷端口輸出端口與狀態(tài)
for port in lport:
print('port %s\tstate : %s' % (port, nm[host][proto][port]['state']))
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

