Python程序設計-安全滲透測試模塊-Nmap模塊

二、Nmap模塊

功能

1、主機發現功能
向目標計算機發送信息,然後根據目標的反應來確定它是否處於開機並聯網的狀態。
2、端口掃描
向目標計算機的指定端口發送信息,然後根據目標端口的反應來判斷它是否開放。
3、服務及版本檢測
向目標計算機的目標端口發送特製的信息,然後根據目標的反應來檢測它運行服務的服務類型和版本。
4、操作系統檢測

python-nmap

  • python-nmap是一個可以幫助使用 Nmap功能的 Python 模塊文件。
  • 在python-nmap模塊的幫助下,可以輕鬆地在自己的程序中使用Nmap掃描的結果,也可以編寫程序自動化地完成掃描任務。
  • 模塊的作者的個人網站爲http://xael.org/
  • 如果希望在Python中正常使用python-nmap模塊,必須先在系統中安裝Nmap;因爲在這個模塊文件中會調用Nmap的一些功能
  • Windows操作系統下直接下載安裝即可
  • Linux操作系統中則需要使用如下命令。
sudo apt-get install python-pip
sudo apt-get install python3-pip
sudo apt-get install nmap
sudo pip install python-nmap

基本用法

python-nmap模塊的核心就是
PortScanner、PortScannerAsync、PortScannerError、PortScannerHostDict、PortScannerYield等5個類
其中最爲重要的是PortScanner類

實例化

  • nmap.ProtScanner()
    這個類實現Nmap工具功能的封裝
    在這裏插入圖片描述
  • nmap.PortScannerAsync()
    PortScannerAsync類和PortScanner類的功能相似,但是這個類可以實現異步掃描
    在這裏插入圖片描述

函數-PortScanner類

  • scan()
scan(self, hosts='127.0.0.1', ports=None, arguments='-sV',sudo=False)

用來對指定目標進行掃描,其中需要設置的三個參數包括hosts、ports和arguments

scan(self, hosts='127.0.0.1', ports=None, arguments='-sV',sudo=False)

參數hosts的值爲字符串類型,表示要掃描的主機,形式可以是IP地址,例如“192.168.1.1”,也可以是一個域名,例如“www.nmap.org”。
參數ports的值也是字符串類型,表示要掃描的端口。如果要掃描的是單一端口,形式可以爲“80”。如果要掃描的是多個端口,可以用逗號分隔開,形式爲“80,443,8080”。如果要掃描的是連續的端口範圍,可以用橫線,形式爲“1-1000”
參數arguments的值也是字符串類型,這個參數實際上就是Nmap掃描時所使用的參數,

- “-sP”表示對目標進行Ping主機在線掃描,
- “-PR”表示對目標進行一個ARP的主機在線掃描,
- “-sS”表示對目標進行一個TCP半開(SYN)類型的端口掃描,
- “-sT”表示對目標進行一個TCP全開類型的端口掃描,
- “-O”表示掃描目標的操作系統類型,
- “-sV”表示掃描目標上所安裝網絡服務軟件的版本。

如果要對192.168.1.101的1~500端口進行一次TCP半開掃描
在這裏插入圖片描述
掃描一個網段的主機IP

nm.scan("192.168.43.0\24")

返回一個被掃描的所有主機列表

nm.all_hosts()

返回在當前掃描中使用的命令行

nm.command_line()
  • csv()
    返回值是一個CSV(逗號分隔值文件格式)的輸出,如圖所示。顯示一個比較工整的掃描結果
    在這裏插入圖片描述
    在這裏插入圖片描述
  • has_host(self, host)
    檢查是否有host的掃描結果,如果有返回True,沒有返回False
    在這裏插入圖片描述
  • scaninfo()
    列出一個掃描信息的結構
    在這裏插入圖片描述
    在這裏插入圖片描述

函數-PortScannerAsync類

  • scan()
scan(self, hosts='127.0.0.1',ports=None, arguments='-sV', callback=None, sudo=False)

callback回調函數,參數爲(host, scan_date)
在這裏插入圖片描述

  • still_scanning()
    如果掃描正在進行,返回True,否則返回False
    在這裏插入圖片描述
  • wait(self, timeout=None)
    等待時間
    在這裏插入圖片描述
  • stop()
    停止當前掃描

使用python-nmap模塊來編寫一個掃描器

import nmap

nm = nmap.PortScanner()
nm.scan("192.168.0.121", "1-1000")

for host in nm.all_hosts():
    print("-"*50)
    print("Host : {} ({})".format(host, nm[host].hostname()))
    print("State : {}".format(nm[host].state()))
    for proto in nm[host].all_protocols():
        print("-"*50)
        print("Protocol:{}".format(proto))
        lport = nm[host][proto].keys()
        lport.sort()
        for port in lport:
            print("port:{}\tstate:{}".format(port, nm[host][proto][port]['state']))

在這裏插入圖片描述

掃描器2:查看某網段有多少臺終端設備

import nmap
nm = nmap.PortScanner()
nm.scan(hosts='192.168.0.0/24', arguments='-sP')
hosts_list=[(x, nm[x]['status']['state'])for x in nm.all_hosts()]
for host,status in hosts_list:
    print(host+'is'+status)

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章