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使用urllib模块开发的多线程豆瓣小站mp3下载器
Jan 16 Python
python时间整形转标准格式的示例分享
Feb 14 Python
Python实现处理管道的方法
Jun 04 Python
给Python入门者的一些编程建议
Jun 15 Python
学习python之编写简单乘法口诀表实现代码
Feb 27 Python
利用pyinstaller或virtualenv将python程序打包详解
Mar 22 Python
Python+matplotlib绘制不同大小和颜色散点图实例
Jan 19 Python
pycharm 解除默认unittest模式的方法
Nov 30 Python
Python 从一个文件中调用另一个文件的类方法
Jan 10 Python
在tensorflow中实现屏蔽输出的log信息
Feb 04 Python
Pycharm 使用 Pipenv 新建的虚拟环境(图文详解)
Apr 16 Python
解决Pymongo insert时会自动添加_id的问题
Dec 05 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
论建造顺序的重要性
2020/03/04 星际争霸
基于PHP文件操作的详解
2013/06/05 PHP
PHP中遇到的时区问题解决方法
2015/07/23 PHP
Yii2.0 模态弹出框+ajax提交表单
2016/05/22 PHP
详细对比php中类继承和接口继承
2018/10/11 PHP
基于jQuery的ajax功能实现web service的json转化
2009/08/29 Javascript
JavaScript 注册事件代码
2011/01/27 Javascript
jquery打开直接跳到网页最下面、最低端实现代码
2013/04/22 Javascript
js控制表单操作的常用代码小结
2013/08/15 Javascript
IE浏览器下PNG相关功能
2015/07/05 Javascript
基于javascript实现句子翻牌网页版小游戏
2016/03/23 Javascript
AngularJS实践之使用NgModelController进行数据绑定
2016/10/08 Javascript
BootStrap tooltip提示框使用小结
2016/10/26 Javascript
JavaScript实现二分查找实例代码
2017/02/22 Javascript
vuejs2.0实现分页组件使用$emit进行事件监听数据传递的方法
2017/02/22 Javascript
详解vue2父组件传递props异步数据到子组件的问题
2017/06/29 Javascript
JS沙箱模式实例分析
2017/09/04 Javascript
JavaScript调用模式与this关键字绑定的关系
2018/04/21 Javascript
ES6入门教程之Array.from()方法
2019/03/23 Javascript
vue全局使用axios的操作
2020/09/08 Javascript
vue-cli4使用全局less文件中的变量配置操作
2020/10/21 Javascript
详解template标签用法(含vue中的用法总结)
2021/01/12 Vue.js
[49:41]NB vs NAVI Supermajor小组赛A组 BO3 第一场 6.2
2018/06/03 DOTA
[01:59][TI9趣味视频] 全明星赛奖励
2019/08/23 DOTA
python使用psutil模块获取系统状态
2016/08/27 Python
Python smtplib实现发送邮件功能
2018/05/22 Python
python匿名函数lambda原理及实例解析
2020/02/07 Python
解决keras加入lambda层时shape的问题
2020/06/11 Python
Python爬虫防封ip的一些技巧
2020/08/06 Python
Python批量获取并保存手机号归属地和运营商的示例
2020/10/09 Python
Book Depository澳大利亚:世界领先的专业在线书店之一
2018/12/27 全球购物
C语言基础笔试题
2013/04/27 面试题
大学生最常用的自我评价
2013/12/07 职场文书
婚礼双方父亲致辞
2015/07/27 职场文书
教你使用vscode 搭建react-native开发环境
2021/07/07 Javascript
node快速搭建后台的实现步骤
2022/02/18 NodeJs