python自動化運維四:nmap端口掃描


端口掃描器:

Python的第三方模塊python-nmap可以實現高效的端口掃描。比如服務器的22,21,33893306等高危端口是否暴露在了互聯網上。python-nmapLinux命令nmap的封裝

Python安裝了nmap后執行代碼:

nm=nmap.PortScanner()

nm.scan('192.168.0.8','22,80')

報如下的錯誤,提示nmap不在path

Traceback (most recent call last):

File "/home/zhf/zhf/python_prj/auto_manintance/chapter4.py", line 1, in <module>

from namp import *

ImportError: No module named namp

[Finished in 0.1s with exit code 1]

[shell_cmd: python -u "/home/zhf/zhf/python_prj/auto_manintance/chapter4.py"]

[dir: /home/zhf/zhf/python_prj/auto_manintance]

[path: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games]

/usr/bin中搜索namp發現原來是系統沒有安裝nmap。由於python-nmapnmap命令的封裝,因此必須先安裝nmap

執行命令apt-get install nmap后,在usr/bin后可以找到nmap程序。

nm=nmap.PortScanner()

nm.scan('192.168.0.1-10','2280')

print nm.command_line()

print nm.scaninfo()

print nm.all_hosts()

for host in nm.all_hosts():

print host,,nm[host].state(),nm[host].all_protocols(),nm[host].all_tcp()


得到的結果如下:

nmap -oX - -p 2280 -sV 192.168.0.1-10

{'tcp': {'services': '22,80', 'method': 'syn'}}

['192.168.0.1', '192.168.0.2', '192.168.0.6', '192.168.0.8']

192.168.0.1 up ['tcp'] [22, 80]

192.168.0.2 up ['tcp'] [22, 80]

192.168.0.6 up ['tcp'] [22, 80]

192.168.0.8 up ['tcp'] [22, 80]


nm.command_line():打印出對應的linuxnamp命令

nm.scaninfo():得到nm的掃描信息。包括使用的協議,端口以及方法。從結果中可以看到掃描使用的是tcp協議,采用的是syn的方式。

nm.all_hosts():得到所有出來的主機地址,返回一個列表

nm[host].state():得到各個主機的狀態,分為updown

nm[host].all_protocols():返回掃描的協議

nm[host].all_tcp():返回掃描的端口

下面來看一個完整的端口掃描程序

import nmap

def nmap_function():
    nm=nmap.PortScanner()
    nm.scan('192.168.0.1-10','22,80')
    for host in nm.all_hosts():
        print host,nm[host].hostname()
        print nm[host].state()
        for proto in nm[host].all_protocols():
            print proto
            lport=nm[host][proto].keys()
            lport.sort()
            for port in lport:
                print port,nm[host][proto][port]['state']


if __name__=="__main__":
    nmap_function()

 

運行結果如下:可以看到192.168.0.122端口關閉,但是80端口打開。192.168.0.82280端口都關閉

192.168.0.1

up

tcp

22 closed

80 open

192.168.0.8

up

tcp

22 closed

80 closed


先看下192.168.0.1的報文。通過wireshark抓包可以看到發出的syn報文,對於目的地址各發送了2條消息。原因在於需要掃描2個端口。

80端口

 

22端口

但是從上面的結果可以看出。當掃描80端口的時候TCP三次握手完成,而在掃描22端口的時候對端發送了rst報文終止鏈接。所以192.168.0.180端口是正常工作,而22端口是沒有打開的

再來看192.168.0.8的報文:22端口和80端口對端都回復了rst報文,由此證明對應的端口並沒有打開

22端口:

80端口

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM