Python学习笔记_基础篇(十二)_nmap使用及案例

nmap概念及功能

概念

NMap,也就是Network Mapper,最早是Linux下的网络扫描和嗅探工具包。

nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(这是亦称 fingerprinting)。它是网络管理员必用的软件之一,以及用以评估网络系统安全。

正如大多数被用于网络安全的工具,nmap 也是不少黑客及骇客(又称脚本小子)爱用的工具 。系统管理员可以利用nmap来探测工作环境中未经批准使用的服务器,但是黑客会利用nmap来搜集目标电脑的网络设定,从而计划攻击的方法。

Nmap 常被跟评估系统漏洞软件Nessus 混为一谈。Nmap 以隐秘的手法,避开闯入检测系统的监视,并尽可能不影响目标系统的日常操作。

Nmap 在黑客帝国(The Matrix)中,连同SSH1的32位元循环冗余校验漏洞,被崔妮蒂用以入侵发电站的能源管理系统。

功能

基本功能有三个,一是探测一组主机是否在线;其次是扫描 主机端口,嗅探所提供的网络服务;还可以推断主机所用的操作系统 。Nmap可用于扫描仅有两个节点的LAN,直至500个节点以上的网络。Nmap 还允许用户定制扫描技巧。通常,一个简单的使用ICMP协议的ping操作可以满足一般需求;也可以深入探测UDP或者TCP端口,直至主机所 使用的操作系统;还可以将所有探测结果记录到各种格式的日志中, 供进一步分析操作。

进行ping扫描,打印出对扫描做出响应的主机,不做进一步测试(如端口扫描或者操作系统探测):

nmap -sP 192.168.1.0/24

仅列出指定网络上的每台主机,不发送任何报文到目标主机:

nmap -sL 192.168.1.0/24

探测目标主机开放的端口,可以指定一个以逗号分隔的端口列表(如-PS22,23,25,80):

nmap -PS 192.168.1.234

使用UDP ping探测主机:

nmap -PU 192.168.1.0/24

使用频率最高的扫描选项:SYN扫描,又称为半开放扫描,它不打开一个完全的TCP连接,执行得很快:

nmap -sS 192.168.1.0/24

nmap安装

本文以linux Ubuntu16.04为例,最后主要用python操作

1. 先安装nmap

sudo apt-get install nmap

2.再安装python-nmap

sudo pip install python-nmap

安装完之后python导入nmap测试验证是否成功

root@LiDebin:~# python
Python 2.7.12 (default, Jul  1 2016, 15:12:24) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import nmap

python操作nmap

1.简单的小案例

创建PortScanner实例,然后扫描159.239.210.26这个IP的20-443端口。

import nmapnm = nmap.PortScanner()
ret = nm.scan('115.239.210.26','20')
print ret返回格式如下:
{'nmap': {'scanstats': 
{'uphosts': '1', 'timestr': 'Tue Oct 25 11:30:47 2016', 'downhosts': '0', 'totalhosts': '1', 'elapsed': '1.11'},'scaninfo': {'tcp': {'services': '20', 'method': 'connect'}}, 'command_line': 'nmap -oX - -p 20 -sV 115.239.210.26'},'scan': {'115.239.210.26': {'status': {'state': 'up', 'reason': 'syn-ack'}, 'hostnames': [{'type': '', 'name': ''}],'vendor': {}, 'addresses': {'ipv4': '115.239.210.26'},'tcp': {20: {'product': '', 'state': 'filtered', 'version': '', 'name': 'ftp-data', 'conf': '3', 'extrainfo': '',   
'reason': 'no-response', 'cpe': ''}
}
}
}
}

2.内置方法:

还可以打印出简单的信息

import nmap  
nm = nmap.PortScanner() 
print nm.scaninfo()
# {u'tcp': {'services': u'20-443', 'method': u'syn'}}
print nm.command_line() 
# u'nmap -oX - -p 20-443 -sV 115.239.210.26' 

查看有多少个host

print nm.all_hosts()
# [u'115.239.210.26'] 

查看该host的详细信息

nm['115.239.210.26']

查看该host包含的所有协议

nm['115.239.210.26'].all_protocols() 

查看该host的哪些端口提供了tcp协议

nm['115.239.210.26']['tcp']nm['115.239.210.26']['tcp'].keys() 

查看该端口是否提供了tcp协议

nm['115.239.210.26'].has_tcp(21)

还可以像这样设置nmap执行的参数

nm.scan(hosts='192.168.1.0/24', arguments='-n -sP -PE -PA21,23,80,3389') 

更多操作请进官网http://xael.org/pages/python-nmap-en.html

实验案例

检测内网机器端口

1.定义函数库mytools.py

 #-*- coding:utf-8 -*- 
import smtplib 
from email.mime.text import MIMEText 
from email.header import Header 
def sendemail(sender,receiver,subject,content,smtpserver,smtpuser,smtppass): msg = MIMEText(content,'html','utf-8')#中文需参数‘utf-8',单字节字符不需要 msg['Subject'] = Header(subject, 'utf-8') msg['From'] = '<%s>' % sender msg['To'] = ";".join(receiver) try: smtp = smtplib.SMTP() smtp.connect(smtpserver) smtp.login(smtpuser, smtppass) smtp.sendmail(sender, receiver, msg.as_string()) smtp.quit() except Exception,e: print e

2. 实现端口扫描的程序,单线程版本nmscan.py

 # !/usr/bin/python 
# -*- coding:utf-8 -*- import nmap
import re
import mytools as tool
import sysreload(sys)
sys.setdefaultencoding('utf8')def nmScan(hostlist, portrange, whitelist):p = re.compile("^(\d*)\-(\d*)$")if type(hostlist) != list:help()portmatch = re.match(p, portrange)if not portmatch:help()l = []for host in hostlist:result = ''nm = nmap.PortScanner()tmp = nm.scan(host, portrange)result = result + "<h2>ip地址:%s 主机名:[%s]  ......  %s</h2><hr>" % (host, tmp['scan'][host]['hostname'], tmp['scan'][host]['status']['state'])try:ports = tmp['scan'][host]['tcp'].keys()except KeyError, e:if whitelist:whitestr = ','.join(whitelist)result = result + "未扫到开放端口!请检查%s端口对应的服务状态" % whitestrelse:result = result + "扫描结果正常,无暴漏端口"for port in ports:info = ''if port not in whitelist:info = '<strong><font color=red>Alert:非预期端口</font><strong>&nbsp;&nbsp;'else:info = '<strong><font color=green>Info:正常开放端口</font><strong>&nbsp;&nbsp;'portinfo = "%s <strong>port</strong> : %s &nbsp;&nbsp;<strong>state</strong> : %s &nbsp;&nbsp;<strong>product<strong/> : %s <br>" % (info, port, tmp['scan'][host]['tcp'][port]['state'],tmp['scan'][host]['tcp'][port]['product'])result = result + portinfol.append([host, str(result)])return ldef help():print "Usage: nmScan(['127.0.0.1',],'0-65535')"if __name__ == "__main__":hostlist = ['10.10.10.10', '10.10.10.11']portrange = '0-65535'whitelist = [80, 443]l = nmScan(hostlist, portrange, whitelist)sender = '75501664@qq.com'receiver = ['zhangyanlin8851@163.com', '877986976@qq.com']subject = '服务器端口扫描'smtpserver = 'smtp.exmail.qq.com'smtpuser = 'zhangyanlin8851@163.cn'smtppass = 'linuxidc163'mailcontent = ''for i in range(len(l)):mailcontent = mailcontent + l[i][1]tool.sendemail(sender, receiver, subject, mailcontent, smtpserver, smtpuser, smtppass)

3.多线程版本

 # !/usr/bin/python
# -*- coding:utf-8 -*-import nmap
import re
import mytools as tool
import sys
from multiprocessing import Pool
from functools import partialreload(sys)
sys.setdefaultencoding('utf8')def nmScan(host, portrange, whitelist):p = re.compile("^(\d*)\-(\d*)$")# if type(hostlist) != list:#    help()portmatch = re.match(p, portrange)if not portmatch:help()if host == '121.42.32.172':whitelist = [25, ]result = ''nm = nmap.PortScanner()tmp = nm.scan(host, portrange)result = result + "<h2>ip地址:%s 主机名:[%s]  ......  %s</h2><hr>" % (host, tmp['scan'][host]['hostname'], tmp['scan'][host]['status']['state'])try:ports = tmp['scan'][host]['tcp'].keys()for port in ports:info = ''if port not in whitelist:info = '<strong><font color=red>Alert:非预期端口</font><strong>&nbsp;&nbsp;'else:info = '<strong><font color=green>Info:正常开放端口</font><strong>&nbsp;&nbsp;'portinfo = "%s <strong>port</strong> : %s &nbsp;&nbsp;<strong>state</strong> : %s &nbsp;&nbsp;<strong>product<strong/> : %s <br>" % (info, port, tmp['scan'][host]['tcp'][port]['state'], tmp['scan'][host]['tcp'][port]['product'])result = result + portinfoexcept KeyError, e:if whitelist:whitestr = ','.join(whitelist)result = result + "未扫到开放端口!请检查%s端口对应的服务状态" % whitestrelse:result = result + "扫描结果正常,无暴漏端口"return resultdef help():print "Usage: nmScan(['127.0.0.1',],'0-65535')"return Noneif __name__ == "__main__":hostlist = ['10.10.10.10', '10.10.10.11']portrange = '0-65535'whitelist = [80, 443]l = nmScan(hostlist, portrange, whitelist)sender = '75501664@qq.com'receiver = ['zhangyanlin8851@163.com', '877986976@qq.com']subject = '服务器端口扫描'smtpserver = 'smtp.exmail.qq.com'smtpuser = 'zhangyanlin8851@163.cn'smtppass = 'linuxidc163'mailcontent = ''for i in range(len(l)):mailcontent = mailcontent + l[i][1]tool.sendemail(sender, receiver, subject, mailcontent, smtpserver, smtpuser, smtppass)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/41309.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT在智能音乐推荐和个性化播放列表中的应用如何?

智能音乐推荐和个性化播放列表是音乐流媒体领域中的重要应用&#xff0c;可以帮助用户发现新音乐、定制自己的音乐体验&#xff0c;并提升音乐平台的用户满意度。ChatGPT作为一种先进的自然语言处理模型&#xff0c;可以在智能音乐推荐和个性化播放列表领域发挥重要作用。本文将…

神经网络基础-神经网络补充概念-56-迁移学习

迁移学习&#xff08;Transfer Learning&#xff09;是一种机器学习技术&#xff0c;旨在将在一个任务上学到的知识或模型迁移到另一个相关任务上&#xff0c;以提高新任务的性能。迁移学习的核心思想是通过利用源领域&#xff08;source domain&#xff09;的知识来改善目标领…

微信小程序全局事件订阅eventBus

微信小程序全局事件订阅 在Vue开发中&#xff0c;我们可能用过eventBus来解决全局范围内的事件订阅及触发逻辑&#xff0c;在微信小程序的开发中我们可能也也会遇到同样的需求&#xff0c;那么我们尝试下在小程序&#xff08;原生小程序开发&#xff09;中实现类似eventBus的事…

大模型技术实践(一)|ChatGLM2-6B基于UCloud UK8S的创新应用

近半年来&#xff0c;通过对多款主流大语言模型进行了调研&#xff0c;我们针对其训练方法和模型特点进行逐一分析&#xff0c;方便大家更加深入了解和使用大模型。本文将重点分享ChatGLM2-6B基于UCloud云平台的UK8S实践应用。 01各模型结构及特点 自从2017年6月谷歌推出Transf…

FlexTools plugin and 3dWindow plugin for SketchUp Crack

FlexTools v2.3.6 plugin for SketchUp 3dWindow v.4.5 plugin for SketchUp 建筑师和3D艺术家使用FlexTools创建SketchUp门、窗、楼梯和其他建筑元素&#xff0c;具有卓越的速度和控制水平。 SketchUp功能强大但易于使用的扩展。对于在施工图或建筑图中使用SketchUp的每个人…

数学建模:论文排版技巧及图表公式规范制作

Excel 论文样式提前设置利用题注和表注能够自动排序mac m1 mathtype没有永久版&#xff0c;淘宝价格比官网低 编辑公式注意事项&#xff1a; 1、公式居中&#xff0c;标号为英文状态输入并右对齐。 2、中英文状态下&#xff0c;对应字母的状态不同&#xff0c;请合理选择。 3、…

034_小驰私房菜_[问题复盘] Qcom平台,某些三方相机拍照旋转90度

全网最具价值的Android Camera开发学习系列资料~ 作者:8年Android Camera开发,从Camera app一直做到Hal和驱动~ 欢迎订阅,相信能扩展你的知识面,提升个人能力~ 【一、问题】 某些三方相机,预览正常,拍照旋转90度 【二、问题排查】 1 ) HAL这边Jpeg编码数据在哪个地方…

C# 随机法求解线性规划问题 蒙特卡洛

线性规划问题: max3x12x2 x12x2<5 2x1x2<4 4x13x2<9 x1>0 x2>0 正确的结果:x11.5; x21, max z6.5 Random random1 new Random(DateTime.Now.Millisecond);Random random2 new Random(DateTime.Now.Millisecond*DateTime.Now.Millisecond);double max-9999,x1…

Pycharm与Anaconda Python的开发环境搭建

目录 一&#xff1a;下载 二&#xff1a;安装python 三&#xff1a;设置Pycharm 一&#xff1a;下载 下载Anaconda&#xff1a; Anaconda | The World’s Most Popular Data Science Platform 安装好以后&#xff0c;设置一下环境变量&#xff1a; 打开命令行&#xff0c…

UI界面设置

文章目录 1. 修改 share.html 内容如下&#xff1a;2. 修改 html 文件格式为 utf-83.保存&#xff0c;运行程序4. 访问页面 1. 修改 share.html 内容如下&#xff1a; <!DOCTYPE html><html> <head><meta charset"utf-8"><title>1v1屏…

uniapp 官方扩展组件 uni-combox 实现:只能选择不能手写(输入中支持过滤显示下拉列表)

uniapp 官方扩展组件 uni-combox 实现&#xff1a;只能选择不能手写&#xff08;输入中支持过滤显示下拉列表&#xff09; uni-comboxuni-combox 原本支持&#xff1a;问题&#xff1a; 改造源码参考资料 uni-combox uni-combox 原本支持&#xff1a; 下拉选择。输入关键字&am…

【002】学习笔记之typescript的【任意类型】

任意类型 顶级类型&#xff1a;any类型和 unknown 类型 any类型 声明变量的时候没有指定任意类型默认为any任意类型都可以赋值给any&#xff0c;不需要检查类型。也是他的弊端如果使用any 就失去了TS类型检测的作用 unknown 类型 TypeScript 3.0中引入的 unknown 类型也被认为…

WSL2 ubuntu子系统换源

文章目录 1.直接编辑/etc/apt/sources.list文件&#xff08;需要使用 sudo&#xff09;:2.将文件中的内容删除&#xff0c;将以下对应版本镜像源复制到里面。ubuntu的镜像源 3.更新 1.直接编辑/etc/apt/sources.list文件&#xff08;需要使用 sudo&#xff09;: 将原文件做备份…

Leetcode Top 100 Liked Questions(序号53~74)

53. Maximum Subarray 题意&#xff1a;一个数组&#xff0c;找到和最大的子串 我的思路 我记得好像On的动态规划来做的&#xff1f;但是想不起来了&#xff0c;先死做&#xff0c;用的前缀和——TLE超时 那就只能想想dp怎么做了 假设dp[i]表示的是以 i 为右端点的最大的…

XDR解决方案成为了新的安全趋势

和当今指数倍增长的安全数据相比&#xff0c;安全人才的短缺带来了潜在的风险。几乎所有的公司&#xff0c;无论规模大小&#xff0c;在安全资源能力上都有限&#xff0c;需要过滤各种告警才能将分析量保持在可接受范围。但这样一来&#xff0c;潜在的威胁线索就可能被埋没&…

LeetCode 0023. 合并 K 个升序链表

【LetMeFly】23.合并 K 个升序链表 力扣题目链接&#xff1a;https://leetcode.cn/problems/merge-k-sorted-lists/ 给你一个链表数组&#xff0c;每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表。 示例 1&#xff1a; 输入&…

docker的资源控制管理——Cgroups

目录 一、对CPU使用率的控制 1.1 CPU 资源控制 1.2 cgroups有四大功能 1.3 设置cpu使用率上限 查看周期限制和cpu配额限制 进行cpu压力测试然后修改每个周期的使用cpu的时间&#xff0c;查看cpu使用率 1.4 设置cpu资源占用比&#xff08;设置多个容器时才有效&#xf…

跨境外贸业务,选择动态IP还是静态IP?

在跨境业务中&#xff0c;代理IP是一个关键工具。它们提供了匿名的盾牌&#xff0c;有助于克服网络服务器针对数据提取设置的限制。无论你是需要经营管理跨境电商店铺、社交平台广告投放&#xff0c;还是独立站SEO优化&#xff0c;代理IP都可以让你的业务程度更加丝滑&#xff…

Linux命令 -- vim

Linux命令 -- vim 前言一般模式光标移动复制粘贴内容查找 底线命令行模式 前言 用vim指令进入文件。 刚进入时是命令行模式&#xff0c;也叫一般模式。 按i或者insert进入编辑模式&#xff0c;此时可以编辑文件内容。 按esc可从编辑模式退回到一般模式&#xff0c;输入冒号进…

基于 spring boot 的动漫信息管理系统【源码在文末】

半山腰总是最挤的&#xff0c;你得去山顶看看 大学生嘛&#xff0c;论文写不出&#xff0c;代码搞不懂不要紧&#xff0c;重要的是&#xff0c;从这一刻就开始学习&#xff0c;立刻马上&#xff01; 今天带来的是最新的选题&#xff0c;基于 spring boot 框架的动漫信息管理系…