nmap地址段下的ip_安服福音——花式nmap扫描整理结果(文末重磅消息)

0x01应用背景

安全服务的工作,日常扫扫扫、日常的工作一次性让人扫描多个网段,经验充足的老师傅会使用xml转excel,但是新入门的安服小伙伴们,是否也经历过一段手工一个个整理的时期呢,我是的。后来,随着需求的复杂化,输出的形式也各种各样,不得不使整个过程自动化,不然真的会做到我是谁我在哪我在做什么,所以本文我用以下三种场景,由最初简单的需求到最终复杂化的,step by step教大家如何将python和安服结合在一起,为自己节省更多的时间和体力,并投入时间到学习中,有效地增值自己。

需求1为扫描地址211.191.233.175的21,22,23,25,443,80,8080是否开放,按ip地址-端口-状态-服务整理成excel。

需求2为扫描地址A部门211.191.233.0-211.191.235.0和B部门21.1.1.0-21.1.3.0两个地址段(实际有100多个部门,平均每个部门有十来个地址段)的21,22,23,25,443,80,8080是否开放,按每个部门整理成一个excel(也就是要整理100多个excel,手工做真的夭寿了)格式是ip地址-端口-状态-服务。

需求3excel里面已经给出了各单位部门起始的IP和终止的IP,需要扫描excel所有地址段,(实际有100多个部门,平均每个部门有十来个地址段)的21,22,23,25,443,80,8080是否开放,按每个部门整理成一个excel,大概要整理100多次,一次7个端口

0x02 文章结构简介

扫描需求与nmap参数

前言

需求1介绍与应用脚本编写

需求2介绍与应用脚本编写

需求3介绍与应用脚本编写

延伸—扫描效率优化

0x03扫描需求与nmap参数

前言:

本文相关的ip地址已经替换过个别数字进行脱敏处理,所以本文中出现过的ip不合理或者扫不到也是正常的。

在很久以前我还是一个渗透实习生,那时候还需要兼做挺多一些安全服务的工作,做下扫描、整理下报告。第一次的时候任务是这样的,需要我一次性扫描十几个ip地址段然后整理成 ip地址-端口-状态-服务 格式一一对应地用excel整理出来。这个第一次做的时候我真的手工一个一个去整理出来,手工做了整整一天。

附版式图(已替换个别数字脱敏)

后来学会了python,一秒出结果了。

现成的工具网上有一个xml转xls,但是在长期的扫描过程这种方式不算很方便。

如果我扫描命令是nmap -n -Pn -v 8.8.8.8 >result.txt  输出将会重定向到一个txt文件,扫描到一半的时候还可以打开txt来看扫描的进度等等。本文就是基于输出重定向的结果进行结果处理。

前期准备

1.地址段需要准确,比如要扫192.168.1.0到192.168.2.255;需要整理成192.168.1-2.0-255这种格式,(excel直接复制下来可能会出现"和空格个别有些未换行,需要检查整理替换一下)

2.nmap.exe添加到环境变量

3.python2.74.python安装模块xlwt(pip install xlwt) 

5.运行时命令:python pl-nmscan.py + 地址段txt的所在文件夹路径

需求1:

需求为扫描地址211.191.233.175的21,22,23,25,443,80,8080是否开放,按ip地址-端口-状态-服务整理成excel。

由需求得知,需要知道指定端口是否开放即可了。所以对应扫描参数如下:

nmap-n -Pn -p 21,22,23,25,443,80,8080 211.191.233.175 >result.txt

-n是不做地址解析

-Pn是绕过防火墙探测端口(结果更准确一点)

-p是指定端口

>result.txt是指定输出的文件和路径

扫描的结果大致如下

使用(下章节我会附上代码)工具后,会在当前目录下输出一个excel。

命令是:pythonF:\cybersec\poc\Selftools\myPythontools\nmapScan.pyC:\Users\lenovo\Desktop\result.txt

输出结果是这样的:(ip已替换数字脱敏处理)

所以可以发现上面txt中端口是开放的地址,都被输出到这个excel里面。

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# made by 3s_NwGeek
import xlwt,re,sys,osclass FILE:def __init__(self, FILEPATH):self.filepath=FILEPATH                               #文件完整路径self.filename = (FILEPATH.split("\\")[-1])         # 有后缀文件名self.dirpath = FILEPATH.replace(self.filename,""# 文件所在文件夹路径self.filename_noformat = self.filename.split(".")[0]  # 无后缀文件名self.fileformat = "." + self.filename.split(".")[-1]  # 文件名后缀def rename(self,NEWNAME):
        newname = self.dirpath + NEWNAME + self.fileformat  #文件重命名新路经os.rename(self.filepath,newname)def copy(self,targpath):
        os.system("copy %s %s" % (self.filepath, targpath))if __name__ == '__main__':print "usage:nmapScan.pyC:\\Users\\PortResult.txt"f=FILE(sys.argv[1])
    items=open(sys.argv[1],"r+").read().splitlines() #读取txt
    line=0file = xlwt.Workbook(encoding = 'utf-8')
    table = file.add_sheet('NmapResult')
    table.col(0).width=220*20vaule=['ip地址','端口','状态','协议']  #写入excel首行for columnin range(0,len(vaule)):
        table.write(0,column, vaule[column])for item in items:                       #每行往下读取扫描结果if "Nmap" in item :
                ip=item.replace("Nmap scan report for ","")#获取ipif "open" in item :                            #获取ip对应的端口if "Discovered" not in item:
                result=ip+" "+item
                line=line+1vaule= re.sub(r"\s{2,}","",result).split(" ")#nmap扫描结果bug有时候会有多个空格,使用正则多个空格替换成一个for column in range(0,4):     #写入结果
                   table.write(line,column,vaule[column])
    p=f.dirpath+'NmapReport.xls'file.save(p)

使用方法如下

usage:nmapScan.py C:\\Users\\PortResult.txt

需求2:

需求为扫描地址A部门211.191.233.0-211.191.235.0和B部门21.1.1.0-21.1.3.0两个地址段(实际有50多个部门,每个部门有十来个地址段)的21,22,23,25,443,80,8080是否开放,按每个部门整理成一个excel(也就是要整理50多个excel,手工做真的夭寿了)格式是ip地址-端口-状态-服务。

由需求得知,需要知道指定地址段中的ip端口是否开放即可了。所以对应扫描参数如下:

每个部门的扫描参数命令是:

nmap -n -Pn -iL A单位.txt -p 21,22,23,25,443,80,8080  >A单位result.txt

-iL是按每行读取字典作为扫描目标

因为涉及多个地址段,所以需要把资产地址段保存为txt文件进行读取,而且有规定的格式。所以ip地址段的格式比如说是这样的211.191.233.0-211.191.235.0这样nmap不能识别,所以正确写法要改成这样的211.191.233-235.0-255

然后使用python用个for循环调用nmap每个单位扫一次就可以了,再使用需求1的脚本循环输出即可。

扫描前的准备txt

脚本运行如下图:

Python nmap_scan_pl.py 所有txt文件所在的文件夹路径

输出结果有多个excel,一个部门一个excel,每个都是这样的(ip已脱敏)

使用python编写脚本如下

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# made by 3s_NwGeek
import xlwt,re,glob,os,sysclass FILE:def __init__(self, FILEPATH):self.filepath=FILEPATH                               #文件完整路径self.filename = (FILEPATH.split("\\")[-1])          # 有后缀文件名self.dirpath = FILEPATH.replace(self.filename, ""# 文件所在文件夹路径def main(paths):
    f=FILE(paths)
    items=open(paths,"r+").read().splitlines()# items=open("C:\Users\lenovo\Desktop\\1.txt","r+").read().splitlines()line=0file = xlwt.Workbook(encoding = 'utf-8'# 注意这里的Workbook首字母是大写table = file.add_sheet('NmapResult') #新建一个sheettable.col(0).width=220*20vaule=['ip地址','端口','状态','协议号']for column in range(0, 4):
        table.write(line, column, vaule[column])for item in items:if "Nmap" in item :if "Discovered" not in item:
                ip=item.replace("Nmap scan report for ","")if "open" in item :if "Discovered" not in item:
                result=ip+" "+item
                line=line+1vaule= re.sub(r"\s{2,}"," ",result).split(" ")for column in range(0,6):try:
                        table.write(line,column,vaule[column])except:passsavepath = path + '\\scan_result'try:
        os.mkdir(savepath)except:passfile.save(r'%s.xls'%(savepath+'\\'+f.filename_noformat))print "done"def cmdgen (paths):#命令生成cmd=[]
    savepath=path+'\\nmap_result'try:
        os.mkdir(savepath)except:pass
    for
filepath in glob.glob(paths):#读取所有资产准备生成命令.txtf=FILE(filepath)
        cmd.append('nmap -v -n -Pn -p 80,8080,443 -iL %s > %s'%(f.filepath,savepath+'\\'+f.filename))#生成命令数组return cmddef excute(cmd):    #调用nmap函数for c in cmd:print 'scaning :%s\nwait..'%c
        res = str(os.popen(c).read())   #读取回显print resdef resoutput():
    nmap_resultpath=path+'\\nmap_result\*.txt'for filepath in glob.glob(nmap_resultpath):#读取所有扫描结果main(filepath)#输出if __name__ == '__main__':if len(sys.argv) <2:
        usage = "\n####################################\nusage: python nmap_Scans_output.py C:\\\\Desktop\\dir\\\n文件夹是扫描的地址段\n####################################"print usage
        sys.exit()
    path=sys.argv[1]
    tpath=path+'\*.txt' #拼接扫描路径cmd=cmdgen(tpath)#生成扫描命令参数
    excute(cmd)   #调用nmap扫描
    resoutput()   #输出nmap结果

需求3:

需求为excel里面已经给出了单位部门和起始的IP和终止的IP,需要扫描excel所有地址段,(这次实际有100多个部门,每个部门有十来个地址段)的21,22,23,25,443,80,8080是否开放,按每个部门整理成一个excel,也是一个很要命的需求了如果手工做的话。(IP已做替换数字脱敏处理,所以出现了255以上的数字)

我是这样处理的,先把每行excel读取下来,处理成一数组,然后数组的第二第三位是起始和终止ip,整理为nmap扫描的格式,然后每个部门分类生成一个扫描的txt,使用python用for循环调用nmap去扫描生成txt的结果,然后使用需求1的脚本去生成扫描结果excel。最终实现从运行脚本到扫描最后输出结果,一键完成

结果生成100多个端口扫描结果的excel。

是在2基础上增加个读取excel整理成多个txt。读取excel并整理成nmap扫描格式代码如下,新增了一个函数,其余的跟需求2一样,就不冗余粘贴了,贴出了新增函数的代码。

不过值得注意的是:

按之前给出来的nmap格式扫描会出现问题,比如说要扫192.1.1.20到192.1.2.21的地址。如果拼接成192.1.1-2.20-21,那么nmap扫描的就只有4个地址:

分别是192.1.1.20、192.1.1.21、192.1.2.20、192.1.2.21

所以以下代码已经做好了调整,自动生成为

192.1.1.20-255

192.1.2.0-21

所以使用本函数是可以正常进行扫描的

defip_xls(filename):
    data = xlrd.open_workbook(filename)
    table = data.sheets()[0]
    nrows = table.nrows  # 获取该sheet中的有效行数ncols = table.ncols  # 获取列表的有效列数for  num in range(1, nrows):   #循环次数row = table.row_values(num)# print rowstart_ip=row[2].encode("unicode_escape").replace(' ','').split('.')
        stop_ip = row[3].encode("unicode_escape").replace(' ','').split('.')
        c_start_ip=start_ip[2]
        d_start_ip=start_ip[3]
        c_stop_ip=stop_ip[2]
        d_stop_ip=stop_ip[3].replace('\n','')
        department=row[1]+row[5].replace('\n','')
        f = codecs.open('%s.txt' % (path+'\\'+department), 'a','utf-8')if start_ip[0] == stop_ip[0] and start_ip[1] ==stop_ip[1] and c_start_ip == c_stop_ip:      #192.168.1.0-99if  int(d_start_ip) <= int(d_stop_ip) :
                nmapip = (start_ip[0]+'.'+start_ip[1]+'.'+c_start_ip+'.'+d_start_ip+'-'+d_stop_ip).replace('\\n','')
                output= nmapip.replace('\n','')
                f.write(output+'\n')elif start_ip[0] == stop_ip[0] and start_ip[1] ==stop_ip[1] and int(c_start_ip) <int(c_stop_ip):    ##192.168.1-3.0-99if int(c_stop_ip)-int(c_start_ip)>1:
                nmapip = start_ip[0]+'.'+start_ip[1]+'.'+c_start_ip+'.'+d_start_ip+'-'+'254'        ##192.168.1.9-255output= nmapip.replace('\n','')
                f.write(output+'\n')
                nmapip = (start_ip[0] + '.' + start_ip[1] +'.' + str(int(c_start_ip) + 1) + '-' +str(int(c_stop_ip) - 1) +'.' + '1' + '-' + '254').replace('--','-') ##192.168.2.0-255output= nmapip.replace('\n','')
                f.write(output+'\n')
                nmapip = start_ip[0]+'.'+start_ip[1]+'.'+c_stop_ip+'.'+'0'+'-'+d_stop_ip            ##192.168.3.0-99output= nmapip.replace('\n','')
                f.write(output+'\n')else:print '\n\nerror for start_ip:%s - stop_ip:%s'%(row[2],row[3])print '\n\n IP format success!!\n\nbegin scanning:'

输出多个结果:

每个部门输出格式:

0x04延伸—扫描效率优化

经过长期扫描经验总结,个人觉得有多个可以提高扫描效率的地方。所以写了个扫描器进行端口扫描。

我一般进行nmap扫描的参数是这样的:

nmap -v -Pn -n -p21,22,23,3389,161,443,445,3306,1521,5901,1143,5900,80,7001,8000-8080,2181,111,11211--max-retries 2 --initial-rtt-timeout 5  --min-hostgroup50 --min-parallelism 50 -iL target.txt >PortResult.txt

但是我觉得nmap已经满足不了我的效率要求了,就算加了以上几个参数。

因为长期比较多需求是做全端口的扫描,会发现nmap的全端口扫描实在是太慢了,有一次任务扫800多个ip的全端口,整整扫了一个月才扫完,因为nmap多了比较多的判断,不只是在单纯地判断端口是否开放。所以,python可以帮到你,使用socket快速判断端口是否开放。

个人觉得可以从多方面进行优化

  1. 使用有线网络的时候超时时间可以缩短到5秒,无线的话需要10秒才能比较准确。

  2. 多线程与多协程

  3. 逻辑上的优化,比较少的服务器是单单开放20000端口到30000端口以上的。所以我们可以从端口1扫到20000端口然后判断是否有开放的端口,没有开放的端口就不继续扫下去,有开放的端口继续扫下去,那么可以算出来,使用了这个逻辑判断就可以提高了35535/65535也就是提升大概二分之一的效率了,如果觉得20000个端口不够保险,那可以改成30000或者到40000,再继续扫,那也提高了很可观的效率。

最后:重磅消息,我们字节脉搏为了上线与众位大佬交流,积极准备了上千份礼物,将于两周内开始举办活动,具体时间呢还未定,因为某一些奖品还没到,请大家敬请期待,同时扫一下关注我们吧!第一时间参加活动

07383765da13b7ed9918625b882f07c8.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/489352.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

getter方法的作用 vuex_Vuex的工作流程

Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候&#xff0c;若 store 中的状态发生变化&#xff0c;那么相应的组件也会相应地得到高效更新。你不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交 (commit) mutation。vuex有哪几种…

从生态、业绩角度分析芯片行业

来源&#xff1a;国信证券生态角度&#xff1a;合作伙伴、底层架构、高级人才、EDA 软件技术的发展是从点到面&#xff0c;逐渐复杂。产业的发展也是从单一点突破&#xff0c;最后形成上下游产业链。伴随着技术变复杂和产业链延伸&#xff0c;市场形成稳定的生态结构&#xff0…

tensorflow计算网络占用内存_详细图解神经网络梯度下降法(tensorflow计算梯度)...

1.什么是梯度各个方向的偏微分组成的向量​ 举例说明&#xff0c;z对x的偏微分和对y的偏微分如下&#xff0c;则梯度是&#xff08;-2x&#xff0c;2y&#xff09;的这样一个向量​ 在光滑连续函数的每个点上&#xff0c;都可以计算一个梯度&#xff0c;也就是一个向量&#xf…

关于数据中台系统,需要了解哪些技术?

来源&#xff1a;国家建材大数据研究中心今天让我们全面解读中台&#xff0c;包括企业为什么要平台化&#xff0c;目前中台都有哪些形式&#xff0c;实施中台系统的优势、面临的问题以及建议都有哪些&#xff1f;中台这个概念早期是由美军的作战体系演化而来的&#xff0c;技术…

python for循环连续输入五个成绩判断等级_Python条件循环判断

1.条件判断语句 Python中条件选择语句的关键字为&#xff1a;if 、elif 、else这三个。其基本形式如下&#xff1a; 1 2 3 4 5 6 7 8 9 age_of_cc 27 age int(input("guessage:")) if age age_of_cc: print("Yes,you got it!") elif age > age_of_cc: p…

人工智能的下半场,一定少不了自监督学习

来源&#xff1a;AI科技评论作者 | Lilian Wang 王荔编译 | MrBear对于给定的任务&#xff0c;在拥有足够的标签的情况下&#xff0c;监督式学习可以很好地解决该问题。想要得到好的性能&#xff0c;往往需要大量的数据标签&#xff0c;但是手动收集数据的成本很高&#xff08;…

bert 多义词_BERT之后,GLUE基准升级为SuperGLUE:难度更大

选自Medium作者&#xff1a;Alex Wang等机器之心编译参与&#xff1a;PandaBERT 等模型的进展已让 GLUE 基准在新模型的评估方面日渐乏力&#xff0c;为推动 NLP 技术的进一步发展&#xff0c;有必要对 GLUE 指标进行更新。为此&#xff0c;纽约大学、Facebook 人工智能研究所、…

thread.sleep是让哪个线程休眠_Java多线程:多线程基础知识

点击上方☝SpringForAll社区 轻松关注&#xff01;及时获取有趣有料的技术文章本文来源&#xff1a;https://www.cnblogs.com/ITtangtang/p/7602363.html一、线程安全性定义&#xff1a;多个线程之间的操作无论采用何种执行时序或交替方式&#xff0c;都要保证不变性条件不被破…

整个领域没了!学术界有史以来最大的丑闻

来源&#xff1a;中大科技处10月15日&#xff0c;学术界发生了一件大事。哈佛终身教授学术造假&#xff0c;31篇文献被撤&#xff0c;无数研究化为泡影……哈佛一次性从各类顶尖期刊上撤稿了31篇论文&#xff0c;整个心肌干细胞相关的研究被认定为“从一开始就基于欺诈性数据”…

thinkPHP-空操作

空操作 当访问的方法不存在时&#xff0c;可以定义一个empty方法来避免空操作 function _empty(){echo "网页不存在&#xff0c;请检查地址信息";} 这样当访问不存在的方法时就会显示以上信息 当访问的控制器不存在时&#xff0c;可以定义一个空操作器 <?php nam…

python3 面向对象_Python3 面向对象

Python和C都是一门面向对象的语言&#xff0c; 面向对象技术简介 类(Class):用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。比如 f file()##创建了一个类(file())的对象f 类变量&#xff1a;类变量在整个实例的对象…

口腔ct重建服务器原理,牙科CT是什么?牙科CT的原理及优势介绍

原标题&#xff1a;牙科CT是什么&#xff1f;牙科CT的原理及优势介绍牙科CT是什么&#xff1f;牙科CT&#xff0c;又称口腔CT&#xff0c;是一种新型牙科类仪器&#xff0c;它可以从三维角度对口腔部组织情况进行扫描检查。牙科CT在业界被誉为神奇的“慧眼”&#xff0c;它犹如…

机器学习奠基人Michael Jordan:下代技术是融合经济学,解读2项重要进展

来源&#xff1a; 北京智源人工智能研究院2019年11月1日北京智源大会全体大会及闭幕式上&#xff0c;被誉为“机器学习之父”的加州大学伯克利教授、智源研究院学术顾问委员会委员 Michael I.Jordan 做了题为《决策与情境&#xff1a;基于梯度的博弈均衡求解方法》&#xff08;…

matlab 带有下标的赋值维度不匹配_远见另类资产管理体系下的核心系统搭建

另类资产管理体系下的信息化建设&#xff0c;或许是小众领域中的更小众话题&#xff0c;但仍值得讨论。很多基金公司、投资公司或资产管理公司都搭建了各种大大小小的应用系统&#xff0c;如OA系统、财务系统、CRM系统等&#xff0c;但对于上系统的价值&#xff0c;不仅很难量化…

cfree运行程序错误的原因_Python入门教程 | 第 8 章 错误、调试和测试

第八章 错误、调试和测试在程序运行过程中&#xff0c;总会遇到各种各样的错误。有的错误是程序编写有问题造成的&#xff0c;比如本来应该输出整数结果输出了字符串&#xff0c;这种错误我们通常称之为bug&#xff0c;bug是必须修复的。有的错误是用户输入造成的&#xff0c;比…

我的世界服务器物品id错误,我的世界错误代码,怎么弄

我的世界错误代码&#xff0c;怎么弄0xu1125yuan2017.07.24浏览323次分享举报1.Minecraft:[16:05:37][Clientthread/FATAL][NotEnoughItemsFingerprintVerification]:ThefingerprintformodNotEnoughItemsisinvalid!Expected:f1850c39b2516232a2108a7bd84d1cb5df9... 1.Minecraf…

今日头条CEO朱文佳:新一代搜索引擎已经来了

来源&#xff1a;今日头条11月27日&#xff0c;今日头条CEO朱文佳在36kr wise大会上谈及头条搜索。在他看来&#xff0c;要做好搜索&#xff0c;有三件事最重要。首先是技术&#xff0c;技术决定搜索的体验&#xff1b;其次是内容&#xff0c;内容是搜索的根本&#xff1b;最后…

串口打印怎么使用】_爱普生打印机怎么使用 爱普生打印机使用方法【详解】...

市面上的打印机品牌有很多&#xff0c;其中就有爱普生打印机&#xff0c;这个品牌的打印机是在上个世纪的四十年代成立的&#xff0c;并且爱普生这款打印机逐渐深入我们的生活&#xff0c;一般我们很多都会使用爱普生打印机来打印资料或者是下载各种工作材料&#xff0c;那么你…

日益谨慎的谷歌AI,会在自我限制中越走越慢吗?

来源&#xff1a;wired为了防止技术被滥用&#xff0c;谷歌对新推出的人脸识别服务进行了限制&#xff0c;但这种限制有时候反而会让竞争对手抢得市场先机。谷歌之所以成为今天的谷歌&#xff0c;是因为它不断创造先进的新技术&#xff0c;并将这些技术向所有人开放。大型企业和…