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

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: 如果你在运行时遇到这种问题:

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

添加nmap.exe路径:

ok,自行摸索吧。

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

(0)

相关推荐

  • python端口扫描系统实现方法

    本文实例讲述了python端口扫描系统实现方法.分享给大家供大家参考.具体实现方法如下: 该程序的主要功能如下: 1. 从自有API接口获取所有的外网IP段: 2. 用Nmap 遍历扫描所有的IP段,-oX 生成XML的扫描报告: 3. 用xml.etree.ElementTree模块方法读取XML文件,将ip,开放端口,对应服务等写入Mysql数据库. 功能很简单,没有满足老大高大上的需求,所以这个小项目就这么英勇的挂掉了!~~~完全都还没考虑程序异常终止,扫描服务器异常歇菜的情况. 贴上代码

  • Python扫描IP段查看指定端口是否开放的方法

    本文实例讲述了Python扫描IP段查看指定端口是否开放的方法.分享给大家供大家参考.具体实现方法如下: #!/usr/local/bin/python #-*- coding: UTF-8 -*- #################################################################### ################################################## #BLOG:http://hi.baidu.com/alal

  • Python3多线程版TCP端口扫描器

    本文实例为大家分享了Python3多线程版TCP端口扫描器的具体代码,供大家参考,具体内容如下 使用命令 python BannerDemo.py -H 192.168.200.101 -p 22,3306 代码如下 import optparse import socket from socket import * from threading import * screenLock = Semaphore(value=1) def connScan(tgtHost,tgtPort): try

  • 使用python实现扫描端口示例

    python最简洁易懂的扫描端口代码.运行绝对会很有惊奇感 复制代码 代码如下: from threading import Thread, activeCount import socket import os def test_port(dst,port): os.system('title '+str(port)) cli_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: indicator = cli_sock.c

  • python多线程扫描端口示例

    复制代码 代码如下: # -*- coding: cp936 -*-import socketfrom threading import Thread,activeCount,Lockfrom time import ctimemutex = Lock() class Loop(Thread):    def __init__(self,ip,port,que):        Thread.__init__(self)        self.ip     = ip        self.p

  • Python实现的多线程端口扫描工具分享

    昨晚今晚写了两晚,总算把Py Port Scanner 写完了,姑且称之为0.1版本,算是一个Python多线程端口扫描工具. 水平有限,实话中间有一些困惑和不解的地方,代码可能也写的比较乱.有些问题并未找到很好的解决方法,还望大家谅解.速度大家自己试验,我感觉还行. 送上效果图两份,分别是扫单IP和扫IP段: 源码: 复制代码 代码如下: # -*- coding: utf-8 -*- __author__ = 'Phtih0n' import threading, socket, sys,

  • python基础教程之udp端口扫描

    一.概述任务描述:开发一个程序,用于获取局域网中开启snmp服务的主机ip地址列表,并写入相应文件以便其它程序使用.背景知识:SNMP是基于UDP的,而且标准的SNMP服务使用161和162端口.思路:1.获取局域在线主机列表:2.获取各个主机的snmp端口(比如161)开启状况:3.以特定格式写入特定文件.这里只实现前两步. 二.nmap实现1.安装nmapLinux平台(CentOS为例): yum install nmap -y     widows平台(下载地址):http://nmap

  • 使用Python编写简单的端口扫描器的实例分享

    单线程实现 单线程实现道理比较简单,这里尝试Soket连接3389,连接成功说明端口开放,否则说明没有开远程服务.随便修改了一下就ok了,代码如下,最终得到自己的IP地址. #!/usr/bin/env python import socket if __name__=='__main__': port=3389 s=socket.socket() for cnt in range(253,2,-1): address='XXX.XXX.XXX.'+str(cnt) #XXX.XXX.XXX I

  • python实现多线程端口扫描

    一个简易的TCP端口扫描器,使用python3实现. 需求:扫描目标网站开放哪些端口号,将所有开放的端口号输出. 分析:使用socket连接,如果连接成功,认为端口开放,如果连接失败,认为端口关闭(有可能端口开放但连接失败,这里简单认为端口不开放) 使用到的库:socket, threading 过程: 先定义一个函数,对给定的(ip, port)进行扫描,看其是否能连接成功. def tcpPortScan(ip, port, openPort): sock = socket.socket(s

  • Python端口扫描简单程序

    本文实例为大家分享了Python端口扫描的实现代码,供大家参考,具体内容如下 获取本机的IP和端口号: import socket def get_my_ip(): try: csock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) csock.connect(('8.8.8.8', 80)) (addr, port) = csock.getsockname() csock.close() return addr,port except s

随机推荐