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

  • 相关阅读:
    Quartz入门例子简介 从入门到菜鸟(一)
    初识Quartz之第一个Quartz实例
    @DisallowConcurrentExecution 注解的作用 【定时器执行完当前任务才开启下一个线程的方式】
    no identities are available for signing
    Unity3D研究院之在把代码混淆过的游戏返混淆回来
    安沃广告问题
    IOS 接ShareSDK问题
    网页中插入Flvplayer视频播放器代码
    unity Android 打包后读取 xml 文件
    unity3d 下操作excel 与打印
  • 原文地址:https://www.cnblogs.com/zhanghongfeng/p/7403356.html
Copyright © 2020-2023  润新知