使用 python-nmap 进行端口扫描

LinuxGeek
• 阅读 8515
  1. 利用 python-nmap模块进行端口扫描,简单的实现方式

  2. 实现了三种输入方式
    1)单个端口扫描,例如 python scanport.py -H host -P port
    2)多个端口扫描,例如 python scanport.py -H host -P port1,port2,.....
    3)连续端口扫描,例如 python scanport.py -H host -P start_port-end_port

使用 python-nmap 进行端口扫描

#coding:utf-8

import nmap
import optparse
import sys

class INFO:
    HEADER = '\033[95m'
    OKBLUE = '\033[94m'
    OKGREEN = '\033[92m'
    WARNING = '\033[93m'
    ARNING = '\033[93m'
    FAIL = '\033[91m'
    ENDC = '\033[0m'
    BOLD = '\033[1m'
    UNDERLINE = '\033[4m'


def scanport(host, port):
    nm =nmap.PortScanner()
    try:
        result = nm.scan(host,port)
        state = result['scan'][host]['tcp'][int(port)]['state']# 多层字典嵌套取值
        if state =='open':
            print INFO.OKBLUE+'[*] '+host+ ' tcp/'+port+" "+state+INFO.ENDC
        else:
            print INFO.WARNING+'[*] '+host+ ' tcp/'+port+" "+state+INFO.ENDC
    except Exception,e:
        raise e


if __name__ == '__main__':
    parser = optparse.OptionParser("usage %prog -H <target host> -p <target port> or -p <start_port>-<end_port>")
    parser.add_option('-H', dest='Host', type='string', help='specify target host')
    parser.add_option('-P', dest='Port', type='string', help='specify target port[s] separated by "-"'or ",")
    (options, args) = parser.parse_args()

    if options.Host ==None or options.Port==None:
        print parser.usage
        sys.exit()

    host = options.Host
    ports = options.Port
    print host,ports
    
    #如果是连续的端口
    if '-' in ports:
        ports_list = ports.split('-')
        for p in range(int(ports_list[0]),int(ports_list[1])+1):
           scanport(host, str(p))
           
    #其他的情况
    else:
        ports_list = ports.split(',')
        for p in ports_list:
            scanport(host, p)

上面的代码有点复杂,改良之后的代码如下:
优化结构

import nmap,argparse, sys
class INFO:
    HEADER = '\033[95m'
    OKBLUE = '\033[94m'
    OKGREEN = '\033[92m'
    WARNING = '\033[93m'
    ARNING = '\033[93m'
    FAIL = '\033[91m'
    ENDC = '\033[0m'
    BOLD = '\033[1m'
    UNDERLINE = '\033[4m'
    



def scan_port(host, port):
    nm = nmap.PortScanner()
    try:
        result= nm.scan(host,port)
        print result
        state = result['scan'][host]['tcp'][int(port)]['state']
        if state == 'open':
            print INFO.OKBLUE+'[*] '+host+ ' tcp/'+port+" "+state+INFO.ENDC
        else:
            print INFO.WARNING + '[*] ' + host + ' tcp/' + port + " " + state + INFO.ENDC
    except Exception,e:
        raise e

def get_args():
    parger = argparse.ArgumentParser(description='port scan script')
    parger.add_argument('-H', '--host', help='specify target host')
    parger.add_argument('-P', '--port', help='specify target port')
    args = parger.parse_args()
    print args
    if args.host == None:
        parger.error('host is required')
        sys.exit()
    if args.port == None:
        parger.error('host is required')
        sys.exit()
    else:
        return args

        
def main():
    args = get_args()
    if '-' in args.port:
        ports_list = args.port.split('-')
        for p in range(int(ports_list[0]),int(ports_list[1])+1):
            scan_port(args.host, str(p))
    else:
        ports_list = args.port.split(',')
        for p in ports_list:
            scan_port(args.host, p)  
    

if __name__ == '__main__':
    main()
           
点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
待兔 待兔
1年前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
李志宽 李志宽
2年前
2023年最流行的道德黑客工具
道德黑客工具和软件是由开发人员设计的计算机程序或复杂类型的脚本,由安全专业人员用于识别机器操作系统、web应用程序、服务器和网络中的弱点。如今,许多企业都依赖这种道德黑客工具来更好地保护数据免受各种攻击。安全专家使用诸如包嗅探器、密码破解器、端口扫描器等黑
Stella981 Stella981
3年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Linux服务器的弱口令检测及端口扫描
  一、弱口令检测——JohntheRipper  JohntheRipper工具可以帮助我们扫描出系统中密码安全性较低的用户,并将扫描后的结果显示出来。  1、安装JohntheRipper:  也可从官网直接下载:  www.openwall.com  \root@localhostmedia\tarzxfj
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这