p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }

端口扫描器:

Python的第三方模块python-nmap可以实现高效的端口扫描。比如服务器的22,21,3389,3306等高危端口是否暴露在了互联网上。python-nmap是Linux命令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-nmap是nmap命令的封装,因此必须先安装nmap

p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }

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

p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }

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():打印出对应的linux的namp命令

nm.scaninfo():得到nm的扫描信息。包括使用的协议,端口以及方法。从结果中可以看到扫描使用的是tcp协议,采用的是syn的方式。

nm.all_hosts():得到所有出来的主机地址,返回一个列表

nm[host].state():得到各个主机的状态,分为up和down

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()

p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }

运行结果如下:可以看到192.168.0.1的22端口关闭,但是80端口打开。192.168.0.8的22和80端口都关闭

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

p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }

80端口

p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }

22端口

p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }

但是从上面的结果可以看出。当扫描80端口的时候TCP三次握手完成,而在扫描22端口的时候对端发送了rst报文终止链接。所以192.168.0.1的80端口是正常工作,而22端口是没有打开的

p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }

再来看192.168.0.8的报文:22端口和80端口对端都回复了rst报文,由此证明对应的端口并没有打开

22端口:

p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }

80端口

p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }

python自动化运维四:nmap端口扫描的更多相关文章

  1. Python自动化运维:技术与最佳实践 PDF高清完整版|网盘下载内附地址提取码|

    内容简介: <Python自动化运维:技术与最佳实践>一书在中国运维领域将有“划时代”的重要意义:一方面,这是国内第一本从纵.深和实践角度探讨Python在运维领域应用的著作:一方面本书的 ...

  2. python自动化运维之CMDB篇-大米哥

    python自动化运维之CMDB篇 视频地址:复制这段内容后打开百度网盘手机App,操作更方便哦 链接:https://pan.baidu.com/s/1Oj_sglTi2P1CMjfMkYKwCQ  ...

  3. 【目录】Python自动化运维

    目录:Python自动化运维笔记 Python自动化运维 - day2 - 数据类型 Python自动化运维 - day3 - 函数part1 Python自动化运维 - day4 - 函数Part2 ...

  4. Day1 老男孩python自动化运维课程学习笔记

    2017年1月7日老男孩python自动化运维课程正式开课 第一天学习内容: 上午 1.python语言的基本介绍 python语言是一门解释型的语言,与1989年的圣诞节期间,吉多·范罗苏姆为了在阿 ...

  5. python自动化运维学习第一天--day1

    学习python自动化运维第一天自己总结的作业 所使用到知识:json模块,用于数据转化sys.exit 用于中断循环退出程序字符串格式化.format字典.文件打开读写with open(file, ...

  6. python自动化运维篇

    1-1 Python运维-课程简介及基础 1-2 Python运维-自动化运维脚本编写 2-1 Python自动化运维-Ansible教程-Ansible介绍 2-2 Python自动化运维-Ansi ...

  7. Python自动化运维的职业发展道路(暂定)

    Python职业发展之路 Python自动化运维工程 Python基础 Linux Shell Fabric Ansible Playbook Zabbix Saltstack Puppet Dock ...

  8. Python自动化运维 技术与最佳实践PDF高清完整版免费下载|百度云盘|Python基础教程免费电子书

    点击获取提取码:7bl4 一.内容简介 <python自动化运维:技术与最佳实践>一书在中国运维领域将有"划时代"的重要意义:一方面,这是国内第一本从纵.深和实践角度探 ...

  9. python自动化运维之路~DAY5

    python自动化运维之路~DAY5 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.模块的分类 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数 ...

随机推荐

  1. 妙用Outlook2003群发商业邮件

    妙用Outlook2003群发商业邮件   我们知道,如果需要在Outlook 2003中向多个对象发送邮件,那么只需要在指定收件人时用分号输入多个邮件地址或者使用抄送方式即可:假如对象较多,可以使用 ...

  2. gulp使用流程

    1.全局安装gulp $ npm install --global gulp 2.作为项目的开发依赖(devDependencies)安装 $ npm install --save-dev gulp ...

  3. Java 数据类型在实际开发中应用

    在前边的博文中,我已经介绍了Java核心的容器IO等,现在我来说一下java中的数据类型.在java中,一切东西皆为对象(这句话意思是java中绝大数情况都用对象),极少数不是对象的,也存在与之对应的 ...

  4. 利用Python实现一个感知机学习算法

    本文主要参考英文教材Python Machine Learning第二章.pdf文档下载链接: https://pan.baidu.com/s/1nuS07Qp 密码: gcb9. 本文主要内容包括利 ...

  5. RabbitMQ知多少

    1.引言 RabbitMQ--Rabbit Message Queue的简写,但不能仅仅理解其为消息队列,消息代理更合适.RabbitMQ 是一个由 Erlang 语言开发的AMQP(高级消息队列协议 ...

  6. Mac下安装 MongoDB

    Mac 下安装 MongoDB 一般有两种方法,一种是通过源码安装,一种是直接使用 homebrew ,个人推荐使用 homebrew ,简单粗暴. 1.安装 homebrew : /usr/bin/ ...

  7. OpenLayers3--ol3--新特性

    OL3: A high-performance, feature-packed library for all your mapping needs < 一个可以满足各种地图应用的高性能的.功能 ...

  8. 实例甜点 Unreal Engine 4迷你教程(4)之用C++实现添加子Widget到VerticalBox中以及ClearChildren

    前置教程: 1. 实例甜点前面的三篇教程: 2. 最好看看笔者前面的一篇关于博文(后记:本来笔者想用C++做DragAndDrop的功能,但是失败了,下面是蓝图实现的方法): http://www.c ...

  9. 用Django做一个省份选择器

    做一个省份选择器 使用django做后端, mysql数据库, jQuery 列出结构主要的文件, 其它配置比较简单 models.py 因为所有数据的结构基本一致, 把所有省份, 市和区全部存储一张 ...

  10. 使用MvcPager实现Ajax分页

    接触ASP.NET MVC的时间不长,这段时间做东西的时候要用到分页,但是普通的分页用户体验不是很好,所以想实现无刷新的分页. 在网上找了好多例子,但是感觉都封装的不好,不小心发现了Webdiyer. ...