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端口

 

 

 

posted @ 2017-08-21 11:20  red_leaf_412  阅读(2575)  评论(0编辑  收藏  举报