python nmap实现端口扫描器教程


Posted in Python onMay 28, 2020

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端口,直至主机所 使用的操作系统;还可以将所有探测结果记录到各种格式的日志中, 供进一步分析操作。

nmap安装

nmap安装:

Windows:https://nmap.org/ 下载安装包,正常安装就好。

Linux:sudo apt-get install nmap

再安装python-nmap(针对Python3,未来趋势而已。2.x的基本不要玩了)

pip3 install python-nmap

Python操作nmap

ping扫描,支持域名,公网IP地址,IP地址段,批量IP地址。

import nmap
import sys


def nmap_ping_scan(network_prefix):
 # 创建一个扫描实例
 nm = nmap.PortScanner()
 # 配置nmap参数
 ping_scan_raw_result = nm.scan(hosts=network_prefix, arguments='-v -n -sn')
 # 分析扫描结果,并放入主机清单
 host_list = [result['addresses']['ipv4'] for result in ping_scan_raw_result['scan'].values() if
 result['status']['state'] == 'up']
 return host_list


if __name__ == '__main__':
 for host in nmap_ping_scan('www.rspt.org.cn'):
 print('%-20s %5s' % (host, 'is UP'))

E:\CodeLibrarySoftware\Anaconda3\python3.exe
47.94.150.6 is UP
Process finished with exit code 0

A扫描,支持域名,公网IP地址,IP地址段,批量IP地址。

import nmap
import sys


def nmap_A_scan(network_prefix):
 nm = nmap.PortScanner()
 # 配置nmap扫描参数
 scan_raw_result = nm.scan(hosts=network_prefix, arguments='-v -n -A')
 # 分析扫描结果
 for host, result in scan_raw_result['scan'].items():
 if result['status']['state'] == 'up':
 print('#' * 17 + 'Host:' + host + '#' * 17)
 print('-' * 20 + '操作系统猜测' + '-' * 20)
 for os in result['osmatch']:
 print('操作系统为:' + os['name'] + ' ' * 3 + '准确度为:' + os['accuracy'])
 idno = 1
 try:
 for port in result['tcp']:
 try:
 print('-' * 17 + 'TCP服务器详细信息' + '[' + str(idno) + ']' + '-' * 17)
 idno += 1
 print('TCP端口号:' + str(port))
 try:
 print('状态:' + result['tcp'][port]['state'])
 except:
 pass
 try:
 print('原因:' + result['tcp'][port]['reason'])
 except:
 pass
 try:
 print('额外信息:' + result['tcp'][port]['extrainfo'])
 except:
 pass
 try:
 print('名字:' + result['tcp'][port]['name'])
 except:
 pass
 try:
 print('版本:' + result['tcp'][port]['version'])
 except:
 pass
 try:
 print('产品:' + result['tcp'][port]['product'])
 except:
 pass
 try:
 print('CPE:' + result['tcp'][port]['cpe'])
 except:
 pass
 try:
 print('脚本:' + result['tcp'][port]['script'])
 except:
 pass
 except:
 pass
 except:
 pass

 idno = 1
 try:
 for port in result['udp']:
 try:
 print('-' * 17 + 'UDP服务器详细信息' + '[' + str(idno) + ']' + '-' * 17)
 idno += 1
 print('UDP端口号:' + str(port))
 try:
 print('状态:' + result['udp'][port]['state'])
 except:
 pass
 try:
 print('原因:' + result['udp'][port]['reason'])
 except:
 pass
 try:
 print('额外信息:' + result['udp'][port]['extrainfo'])
 except:
 pass
 try:
 print('名字:' + result['udp'][port]['name'])
 except:
 pass
 try:
 print('版本:' + result['udp'][port]['version'])
 except:
 pass
 try:
 print('产品:' + result['udp'][port]['product'])
 except:
 pass
 try:
 print('CPE:' + result['udp'][port]['cpe'])
 except:
 pass
 try:
 print('脚本:' + result['udp'][port]['script'])
 except:
 pass
 except:
 pass
 except:
 pass


if __name__ == '__main__':
 nmap_A_scan('www.rspt.org.cn')
E:\CodeLibrarySoftware\Anaconda3\python3.exe 
#################Host:47.94.150.6#################
--------------------操作系统猜测--------------------
操作系统为:Linux 3.10 - 4.11 准确度为:98
操作系统为:Linux 3.16 - 4.6 准确度为:97
操作系统为:Linux 3.2 - 4.9 准确度为:96
操作系统为:Linux 4.4 准确度为:95
操作系统为:Linux 3.2 - 3.8 准确度为:95
操作系统为:Linux 4.10 准确度为:94
操作系统为:Linux 3.16 准确度为:94
操作系统为:Linux 3.13 准确度为:93
操作系统为:Linux 3.13 or 4.2 准确度为:93
操作系统为:Linux 4.2 准确度为:93
-----------------TCP服务器详细信息[1]-----------------
TCP端口号:22
状态:open
原因:syn-ack
额外信息:Ubuntu Linux; protocol 2.0
名字:ssh
版本:6.6.1p1 Ubuntu 2ubuntu2.8
产品:OpenSSH
CPE:cpe:/o:linux:linux_kernel
-----------------TCP服务器详细信息[2]-----------------
TCP端口号:80
状态:open
原因:syn-ack
额外信息:Ubuntu
名字:http
版本:1.4.6
产品:nginx
CPE:cpe:/o:linux:linux_kernel
-----------------TCP服务器详细信息[3]-----------------
TCP端口号:443
状态:closed
原因:reset
额外信息:
名字:https
版本:
产品:
CPE:
-----------------TCP服务器详细信息[4]-----------------
TCP端口号:3000
状态:open
原因:syn-ack
额外信息:Express middleware
名字:http
版本:
产品:Node.js
CPE:cpe:/a:nodejs:node.js
-----------------TCP服务器详细信息[5]-----------------
TCP端口号:3389
状态:closed
原因:reset
额外信息:
名字:ms-wbt-server
版本:
产品:
CPE:

Process finished with exit code 0

PS: 如果你在运行时遇到这种问题:

python nmap实现端口扫描器教程

OK,打开nmap.py文件,在import nmap处按住Ctrl,点击进入nmap。

添加nmap.exe路径:  

python nmap实现端口扫描器教程

ok,自行摸索吧。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在Python编程过程中用单元测试法调试代码的介绍
Apr 02 Python
Python实现定时任务
Feb 08 Python
详解Python pygame安装过程笔记
Jun 05 Python
使用NumPy和pandas对CSV文件进行写操作的实例
Jun 14 Python
对django xadmin自定义菜单的实例详解
Jan 03 Python
对python dataframe逻辑取值的方法详解
Jan 30 Python
对python中UDP,socket的使用详解
Aug 22 Python
python的json包位置及用法总结
Jun 21 Python
Spring @Enable模块驱动原理及使用实例
Jun 23 Python
利用Python中的Xpath实现一个在线汇率转换器
Sep 09 Python
简单介绍Python的第三方库yaml
Jun 18 Python
一文搞懂python异常处理、模块与包
Jun 26 Python
Python3多线程版TCP端口扫描器
Aug 31 #Python
简单了解python协程的相关知识
Aug 31 #Python
利用rest framework搭建Django API过程解析
Aug 31 #Python
Python进度条的制作代码实例
Aug 31 #Python
python类的实例化问题解决
Aug 31 #Python
python检测服务器端口代码实例
Aug 31 #Python
python实现多线程端口扫描
Aug 31 #Python
You might like
十天学会php之第九天
2006/10/09 PHP
php正则校验用户名介绍
2008/07/19 PHP
php面向对象全攻略 (六)__set() __get() __isset() __unset()的用法
2009/09/30 PHP
PHP中异常处理的一些方法整理
2015/07/03 PHP
yii2 modal弹窗之ActiveForm ajax表单异步验证
2016/06/13 PHP
PHP排序算法之堆排序(Heap Sort)实例详解
2018/04/21 PHP
php微信分享到朋友圈、QQ、朋友、微博
2019/02/18 PHP
sina的lightbox效果。
2007/01/09 Javascript
JQuery Ajax通过Handler访问外部XML数据的代码
2010/06/01 Javascript
用JQuery调用Session的实现代码
2010/10/29 Javascript
jQuery 名称冲突的解决方法
2011/04/08 Javascript
js实现单一html页面两套css切换代码
2013/04/11 Javascript
js中方法重载如何实现?以及函数的参数问题
2013/08/01 Javascript
快速获取/设置iframe内对象元素的几种js实现方法
2016/05/20 Javascript
javascript三种代码注释方法
2016/06/02 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单
2016/11/25 Javascript
vue中使用iview自定义验证关键词输入框问题及解决方法
2018/03/26 Javascript
vue 项目打包通过命令修改 vue-router 模式 修改 API 接口前缀
2018/06/13 Javascript
[01:04:14]OG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
使用python实现baidu hi自动登录的代码
2013/02/10 Python
跟老齐学Python之深入变量和引用对象
2014/09/24 Python
Python 比较两个数组的元素的异同方法
2017/08/17 Python
flask/django 动态查询表结构相同表名不同数据的Model实现方法
2019/08/29 Python
django 多对多表的创建和插入代码实现
2019/09/09 Python
python实现XML解析的方法解析
2019/11/16 Python
Python 实现判断图片格式并转换,将转换的图像存到生成的文件夹中
2020/01/13 Python
pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
2020/04/24 Python
纯CSS3制作的鼠标悬停时边框旋转
2017/01/03 HTML / CSS
分享29个基于Bootstrap的HTML5响应式网页设计模板
2015/11/19 HTML / CSS
副科级后备干部考察材料
2014/05/15 职场文书
求职自我推荐信
2014/06/25 职场文书
营销总监岗位职责
2014/09/16 职场文书
委托书的样本
2015/01/28 职场文书
地道战观后感2000字
2015/06/04 职场文书
工程款催款函
2015/06/24 职场文书
带你了解Java中的ForkJoin
2022/04/28 Java/Android