1. 程式人生 > 程式設計 >python3實現高效的埠掃描

python3實現高效的埠掃描

我們通過python-nmap實現一個高效的埠掃描工具,與定時作業crontab及郵件告警結合,可以很好的幫助我們及時發現異常開放的高危埠。當然,該工具也可以作為業務服務埠的可用性探測,例如掃描192.168.209.121-125網段Web服務埠80s是否處於open狀態。我們這裡所採用的scan方法arguments引數指定為-v -PE -p + 埠, -v表示啟用細節模式,可以返回非up狀態主機清單;-PE表示採用TCP同步掃描(TCP SYN)方式; -p指定掃描埠範圍。程式輸出部分採用三個for迴圈體,第一層遍歷掃描主機,第二層為遍歷協議,第三層為遍歷埠,最後輸出主機狀態。

具體指令碼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)

#接收使用者輸入的主機
hosts = scan_row[0]
#接收使用者收入的埠
port = scan_row[1]

try:
  #建立埠掃描物件
  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:
  #呼叫掃描方法,引數指定掃描主機hosts,nmap掃描命令列引數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('---------------------------------------------------------------------')
  #輸出主機及主機名
  print('Host : %s (%s)' % (host,nm[host].hostname()))
  #輸出主機狀態,如up、down
  print('State : %s' % nm[host].state())
  #遍歷掃描協議,tcp、udp
  for proto in nm[host].all_protocols():
    print('--------------')
    #輸出協議名
    print('Protocol : %s' % proto)

    #獲取協議的所有掃描埠
    lport = list(nm[host][proto].keys())
    #埠列表排序
    lport.sort()
    #遍歷埠輸出埠與狀態
    for port in lport:
      print('port %s\tstate : %s' % (port,nm[host][proto][port]['state']))

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。