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实现批量修改文件名实例
Jul 08 Python
举例详解Python中yield生成器的用法
Aug 05 Python
python高手之路python处理excel文件(方法汇总)
Jan 07 Python
python正则表达式及使用正则表达式的例子
Jan 22 Python
利用pandas将numpy数组导出生成excel的实例
Jun 14 Python
python 读取.csv文件数据到数组(矩阵)的实例讲解
Jun 14 Python
深入了解Django View(视图系统)
Jul 23 Python
python时间日期操作方法实例小结
Feb 06 Python
python 函数中的参数类型
Feb 11 Python
Django怎么在admin后台注册数据库表
Nov 14 Python
PyQt5结合QtDesigner实现文本框读写操作
Jun 11 Python
Python音乐爬虫完美绕过反爬
Aug 30 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编程注意事项的小结
2013/04/27 PHP
php 利用array_slice函数获取随机数组或前几条数据
2015/09/30 PHP
PHP实现时间比较和时间差计算的方法示例
2017/07/24 PHP
node.js chat程序如何实现Ajax long-polling长链接刷新模式
2012/03/13 Javascript
关于extjs treepanel复选框选中父节点与子节点的问题
2013/04/02 Javascript
IE8的JavaScript点击事件(onclick)不兼容的解决方法
2013/11/22 Javascript
PHP配置文件php.ini中打开错误报告的设置方法
2015/01/09 PHP
谈谈js中的prototype及prototype属性解释和常用方法
2015/11/25 Javascript
jQuery+css实现的换页标签栏效果
2016/01/27 Javascript
Vue.js双向绑定操作技巧(初级入门)
2016/12/27 Javascript
折叠菜单及选择器的运用
2017/02/03 Javascript
jQuery使用unlock.js插件实现滑动解锁
2017/04/04 jQuery
小程序封装wx.request请求并创建接口管理文件的实现
2019/04/29 Javascript
jQuery实现查看图片功能
2020/12/01 jQuery
利用JS判断元素是否为数组的方法示例
2021/01/08 Javascript
[45:44]完美世界DOTA2联赛PWL S2 FTD vs PXG 第一场 11.27
2020/12/01 DOTA
Python解释执行原理分析
2014/08/22 Python
利用pyinstaller或virtualenv将python程序打包详解
2017/03/22 Python
浅谈Python中的zip()与*zip()函数详解
2018/02/24 Python
Python OpenCV获取视频的方法
2018/02/28 Python
使用python动态生成波形曲线的实现
2019/12/04 Python
flask框架自定义url转换器操作详解
2020/01/25 Python
台湾东南旅游社网站:东南旅游
2019/02/11 全球购物
新闻网站实习自我鉴定
2013/09/25 职场文书
司机岗位职责
2013/11/15 职场文书
主持人演讲稿范文
2013/12/28 职场文书
自我鉴定四大框架
2014/01/17 职场文书
党校个人自我鉴定范文
2014/03/28 职场文书
中层干部竞聘演讲稿
2014/05/15 职场文书
运动会广播稿100字
2014/09/14 职场文书
开展党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
乡镇务虚会发言材料
2014/10/20 职场文书
教师辞职书范文
2015/02/26 职场文书
2015年幼儿园班主任个人工作总结
2015/10/22 职场文书
Python自动化爬取天眼查数据的实现
2021/06/15 Python
微信小程序实现轮播图指示器
2022/06/25 Javascript