zoukankan      html  css  js  c++  java
  • 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端口

  • 相关阅读:
    输入输出重定向
    进程管理
    普通变量_环境变量_环境变量配置文件
    高级文件操作命令_文件查找
    软件包管理_rpm命令管理_yum工具管理_文件归档压缩_源码包管理
    用户管理_组管理_设置主机名_UGO_文件高级权限_ACL权限
    字符串是否包含中文
    SQL 优化
    JS数组
    RedisUtil 工具类
  • 原文地址:https://www.cnblogs.com/zhanghongfeng/p/7403356.html
Copyright © 2011-2022 走看看