python自动化运维四:nmap端口扫描
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端口扫描的更多相关文章
- Python自动化运维:技术与最佳实践 PDF高清完整版|网盘下载内附地址提取码|
内容简介: <Python自动化运维:技术与最佳实践>一书在中国运维领域将有“划时代”的重要意义:一方面,这是国内第一本从纵.深和实践角度探讨Python在运维领域应用的著作:一方面本书的 ...
- python自动化运维之CMDB篇-大米哥
python自动化运维之CMDB篇 视频地址:复制这段内容后打开百度网盘手机App,操作更方便哦 链接:https://pan.baidu.com/s/1Oj_sglTi2P1CMjfMkYKwCQ ...
- 【目录】Python自动化运维
目录:Python自动化运维笔记 Python自动化运维 - day2 - 数据类型 Python自动化运维 - day3 - 函数part1 Python自动化运维 - day4 - 函数Part2 ...
- Day1 老男孩python自动化运维课程学习笔记
2017年1月7日老男孩python自动化运维课程正式开课 第一天学习内容: 上午 1.python语言的基本介绍 python语言是一门解释型的语言,与1989年的圣诞节期间,吉多·范罗苏姆为了在阿 ...
- python自动化运维学习第一天--day1
学习python自动化运维第一天自己总结的作业 所使用到知识:json模块,用于数据转化sys.exit 用于中断循环退出程序字符串格式化.format字典.文件打开读写with open(file, ...
- python自动化运维篇
1-1 Python运维-课程简介及基础 1-2 Python运维-自动化运维脚本编写 2-1 Python自动化运维-Ansible教程-Ansible介绍 2-2 Python自动化运维-Ansi ...
- Python自动化运维的职业发展道路(暂定)
Python职业发展之路 Python自动化运维工程 Python基础 Linux Shell Fabric Ansible Playbook Zabbix Saltstack Puppet Dock ...
- Python自动化运维 技术与最佳实践PDF高清完整版免费下载|百度云盘|Python基础教程免费电子书
点击获取提取码:7bl4 一.内容简介 <python自动化运维:技术与最佳实践>一书在中国运维领域将有"划时代"的重要意义:一方面,这是国内第一本从纵.深和实践角度探 ...
- python自动化运维之路~DAY5
python自动化运维之路~DAY5 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.模块的分类 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数 ...
随机推荐
- Mac之OS系统下搭建JavaEE环境 <一> 之JDK的安装配置
这篇文章介绍了如何在Mac下搭建我们的JavaEE工作环境,对于初学者来说还是比较通俗易懂的. 一.JDK的安装及配置 1.首先我们到Oracle官网下JDK http://www.oracle.co ...
- Centos7yum安装Redis详细教程
原本是在自己的mac上安装redis的,通过brew去安装的redis觉得很简单,实际macos系统与centos系统还是有一些区别的. 1.yum安装redis服务 sudo yum install ...
- 微信公众平台——token验证php版
这几天开始接触微信公众号的开发,注册这些就不说了,我是先弄了个测试号用着.进入正题 所谓token验证,其实就是微信服务器向自己要用到的服务器url发送一段数据,其中有一个参数$_GET['echho ...
- 面向对象设计模式——观察者(OBSERVER)模式
定义 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新. Observer模式描述了如何建立这种关系.这一模式中的关键对象是目标(subject ...
- ASP.NET MVC HttpPostedFileBase文件上传
HttpPostedFileBase文件上传,支持多文件一次上传,如有图片,则支持略缩图保存 文件传输信息封装 /// <summary> /// 文件生成方式 /// </summ ...
- 华为OJ之自动售货系统
本题主要难点有两部分: 1,找零算法.如何找零应该是最具技巧性的部分,根据已有的硬币金额分布,对应的解决办法可能会有不同.本题中的1,2,5,10这种情况满足贪心性质,故我们简单的用贪心算法的思想来解 ...
- Spark笔记——技术点汇总
目录 概况 手工搭建集群 引言 安装Scala 配置文件 启动与测试 应用部署 部署架构 应用程序部署 核心原理 RDD概念 RDD核心组成 RDD依赖关系 DAG图 RDD故障恢复机制 Standa ...
- (转)eclipse导入Gradle项目
场景:最近在学习spring实战(第4版),下载完源码后发现不是maven工程,使用Gradle构建. 1准备工作 1.1 安装插件 打开eclipse,Help——Marketplace,搜索bui ...
- Java之集合初探(二)Iterator(迭代器),collections,打包/解包(装箱拆箱),泛型(Generic),comparable接口
Iterator(迭代器) 所有实现了Collection接口的容器都有一个iterator方法, 用来返回一个实现了Iterator接口的对象 Iterator对象称作迭代器, 用来方便的实现对容器 ...
- 教你上传本地代码到github
最近想起学Git,并且注册了Github. 将新创建的本地代码上传到github上,这里简单的记录一下,我喜欢使用命令行,这里全用命令行来实现,不了解Git命令的可以去了解下. 第一步:建立git仓库 ...