前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nmap 使用指南

Nmap 使用指南

作者头像
LuckySec
发布2022-11-02 12:57:40
1.1K0
发布2022-11-02 12:57:40
举报
文章被收录于专栏:LuckySec网络安全

0x001 Nmap 简介

  Nmap是一款网络扫描和主机检测的非常有用的工具。 Nmap是不局限于仅仅收集信息和枚举,同时可以用来作为一个漏洞探测器或安全扫描器。它可以适用于winodws,linux,mac等操作系统。

0x002 Nmap 用途

  1. 检测活在网络上的主机(主机发现)
  2. 检测主机上开放的端口(端口发现或枚举)
  3. 检测到相应的端口(服务发现)的软件和版本
  4. 检测操作系统,硬件地址,以及软件版本
  5. 检测脆弱性的漏洞(Nmap的脚本)

0x003 Nmap 基础使用

Nmap 命令行参数

代码语言:javascript
复制
nmap [Scan Type(s)] [Options] {target specification}    
scan type(s) 用于指定扫描类型   
options 用于指定选项  
target specification 用于指定扫描目标   
-s 指定扫描类型   
如下: 
-sP (ping扫描) *存活主机探测    
-sS (TCP SYN扫描 隐身扫描)  *默认扫描方式   
-sT (tcp 扫描) * syn 不能用时就tcp扫描   
-sU (UDP 扫描)    
-sA  (ACK扫描) *三次握手 用于探测出防火墙过滤端口 实际渗透中没多大用   
-sV   (版本探测)    
-A    操作系统探测    
-O (启用操作系统检测)   
-v    详细    
选项说明    
-P0  [指定端口] (无ping扫描)   
-PU  [指定端口] (udp ping扫描)    
-PS [指定端口] (TCP SYN ping 扫描)    
-PA  [指定端口] (tcp ack ping扫描)    
-PI   使用真正的pingICMP echo请求来扫描目标主机是否正在运行 
-iL 指定扫描主机列表    
-iR 随机选择目标  
--exclude 排除扫描目标    
--excludefile 排除文件中目标列表 
-n (不用域名解析) 
-R (为所有目标解析域名)  
-T  时间优化(每隔多久发一次包 ) -T5 最快 -T0 最慢   
-F  快速扫描    
-e  指定网络接口

ping 扫描

代码语言:javascript
复制
nmap -sn 202.100.1.0/24
nmap -sn 202.100.1.10 202.100.1.11
nmap -sn 202.100.1.10-100
nmap -sn -iL Ahost
nmap -sn 202.100.1.0/24 -exclude 202.100.1.254
nmap -sn 202.100.1.0/24 -excludefile Ahost

Ahost:主机清单
-exclude:排除指定主机

TCP/UDP 扫描

代码语言:javascript
复制
TCP SYN 扫描
nmap -sS 202.100.1.210
TCP Connect扫描
nmap -sT 202.100.1.210
TCP FIN 扫描
nmap -sF 202.100.1.210
UDP 扫描
nmap -sU 202.100.1.210

端口服务扫描

代码语言:javascript
复制
nmap -sV 202.100.1.210

综合扫描

代码语言:javascript
复制
nmap -A 202.100.1.210

全面综合扫描

代码语言:javascript
复制
nmap -T4 -A -v 202.100.1.210

0x004 Nmap 脚本扫描

1. Nmap脚本命令行参数
代码语言:javascript
复制
-sC: 等价于–script=default,使用默认类别的脚本进行扫描 可更换其他类别 
–script=<Lua scripts>: <Lua scripts>使用某个或某类脚本进行扫描,支持通配符描述
–script-args=<n1=v1,[n2=v2,...]>: 为脚本提供默认参数
–script-args-file=filename: 使用文件来为脚本提供参数
–script-trace: 显示脚本执行过程中发送与接收的数据
–script-updatedb: 更新脚本数据库
–script-help=<scripts>: 显示脚本的帮助信息,其中<scripts>部分可以逗号分隔的文件或脚本类别
2. Nmap脚本分类

  Nmap所有脚本文件在/usr/share/nmap/scripts/目录下,切换到该目录下,然后扫描时可根据需要设置--script=类别这种方式进行比较笼统的扫描

代码语言:javascript
复制
auth: 负责处理鉴权证书(绕开鉴权)的脚本
broadcast: 在局域网内探查更多服务开启状况,如dhcp/dns/sqlserver等服务
brute: 提供暴力破解方式,针对常见的应用如http/snmp等
default: 使用-sC或-A选项扫描时候默认的脚本,提供基本脚本扫描能力
discovery: 对网络进行更多的信息,如SMB枚举、SNMP查询等
dos: 用于进行拒绝服务攻击
exploit: 利用已知的漏洞入侵系统
external: 利用第三方的数据库或资源,例如进行whois解析
fuzzer: 模糊测试的脚本,发送异常的包到目标机,探测出潜在漏洞 
intrusive: 入侵性的脚本,此类脚本可能引发对方的IDS/IPS的记录或屏蔽
malware: 探测目标机是否感染了病毒、开启了后门等信息
safe: 此类与intrusive相反,属于安全性脚本
version: 负责增强服务与版本扫描(Version Detection)功能的脚本
vuln: 负责检查目标机是否有常见的漏洞(Vulnerability),如是否有MS08_067 
3. 部分使用案例

(1)负责处理鉴权证书(绕开鉴权)的脚本,也可以作为检测部分应用弱口令

代码语言:javascript
复制
nmap --script=auth 192.168.137.*

(2)提供暴力破解的方式可对数据库,smb,snmp等进行简单密码的暴力猜解

代码语言:javascript
复制
nmap --script=brute 192.168.137.*

(3)默认的脚本扫描,主要是搜集各种应用服务的信息,收集到后,可再针对具体服务进行攻击

代码语言:javascript
复制
nmap --script=default 192.168.137.* 
或者 
nmap -sC 192.168.137.*

(4)检查是否存在常见漏洞

代码语言:javascript
复制
nmap --script=vuln 192.168.137.*    

(5)在局域网内探查更多服务开启状况

代码语言:javascript
复制
nmap -n -p445 --script=broadcast 192.168.137.4

(6)利用第三方的数据库或资源,例如进行whois解析

代码语言:javascript
复制
nmap --script external 202.103.243.110 

0x005 Nmap 应用服务扫描

1. vnc扫描

检查vnc bypass

代码语言:javascript
复制
nmap  --script=realvnc-auth-bypass 192.168.137.4

检查vnc认证方式

代码语言:javascript
复制
nmap  --script=vnc-auth  192.168.137.4

获取vnc信息

代码语言:javascript
复制
nmap  --script=vnc-info  192.168.137.4
2. smb扫描

smb破解

代码语言:javascript
复制
nmap  --script=smb-brute.nse 192.168.137.4

smb字典破解

代码语言:javascript
复制
nmap --script=smb-brute.nse --script-args=userdb=/var/passwd,passdb=/var/passwd 192.168.137.4

smb已知的几个严重漏洞

代码语言:javascript
复制
nmap  --script=smb-check-vulns.nse --script-args=unsafe=1 192.168.137.4

查看共享目录

代码语言:javascript
复制
nmap -p 445  --script smb-ls --script-args 'share=e$,path=\,smbuser=test,smbpass=test' 192.168.137.4

查询主机一些敏感信息(注:需要下载nmap_service)

代码语言:javascript
复制
nmap -p 445 -n –script=smb-psexec --script-args= smbuser=test,smbpass=test 192.168.137.4

查看会话

代码语言:javascript
复制
nmap -n -p445 --script=smb-enum-sessions.nse --script-args=smbuser=test,smbpass=test 192.168.137.4

系统信息

代码语言:javascript
复制
nmap -n -p445 --script=smb-os-discovery.nse --script-args=smbuser=test,smbpass=test 192.168.137.4
3. Mssql扫描

猜解Mssql用户名和密码

代码语言:javascript
复制
nmap -p1433 --script=ms-sql-brute --script-args=userdb=/var/passwd,passdb=/var/passwd 192.168.137.4

xp_cmdshell 执行命令

代码语言:javascript
复制
nmap -p 1433 --script ms-sql-xp-cmdshell --script-args mssql.username=sa,mssql.password=sa,ms-sql-xp-cmdshell.cmd="net user" 192.168.137.4

dumphash值

代码语言:javascript
复制
nmap -p 1433 --script ms-sql-dump-hashes.nse --script-args mssql.username=sa,mssql.password=sa  192.168.137.4
4. Mysql扫描

扫描root空口令

代码语言:javascript
复制
nmap -p3306 --script=mysql-empty-password.nse 192.168.137.4

列出所有mysql用户

代码语言:javascript
复制
nmap -p3306 --script=mysql-users.nse --script-args=mysqluser=root 192.168.137.4

支持同一应用的所有脚本扫描

代码语言:javascript
复制
nmap --script=mysql-* 192.168.137.4
5. Oracle扫描

oracle sid扫描

代码语言:javascript
复制
nmap --script=oracle-sid-brute -p 1521-1560 192.168.137.5

oracle 弱口令破解

代码语言:javascript
复制
nmap --script oracle-brute -p 1521 --script-args oracle-brute.sid=ORCL,userdb=/var/passwd,passdb=/var/passwd 192.168.137.5
6. 其他好用脚本

发现网关

代码语言:javascript
复制
nmap --script=broadcast-netbios-master-browser 192.168.137.4

破解rsync

代码语言:javascript
复制
nmap -p 873 --script rsync-brute --script-args 'rsync-brute.module=www' 192.168.137.4

informix数据库破解

代码语言:javascript
复制
nmap --script informix-brute -p 9088 192.168.137.4

pgsql破解

代码语言:javascript
复制
nmap -p 5432 --script pgsql-brute 192.168.137.4

snmp破解

代码语言:javascript
复制
nmap -sU --script snmp-brute 192.168.137.4

telnet破解

代码语言:javascript
复制
nmap -sV --script=telnet-brute 192.168.137.4

jboss autopwn

代码语言:javascript
复制
nmap --script=http-vuln-cve2010-0738 --script-args 'http-vuln-cve2010-0738.paths={/path1/,/path2/}' <target>

检查http方法

代码语言:javascript
复制
nmap --script=http-methods.nse 192.168.137.4

dos攻击,对于处理能力较小的站点还挺好用的

代码语言:javascript
复制
nmap --script http-slowloris --max-parallelism 400 192.168.137.4   'half-HTTP' connections

samba破解

代码语言:javascript
复制
nmap --script=samba-vuln-cve-2012-1182  -p 139 192.168.137.4
7. 不靠谱的脚本:
  • vnc-brute 次数多了会禁止连接
  • pcanywhere-brute 次数多了会禁止连接

0x006 Nmap 高级用法


1. 回顾Nmap简单扫描方式

  上述的扫描方式能满足一般的信息搜集需求。而若想利用Nmap探索出特定的场景中更详细的信息,则需仔细地设计Nmap命令行参数,以便精确地控制Nmap的扫描行为。

代码语言:javascript
复制
全面扫描:nmap -T4 -A targetip
主机发现:nmap -T4 -sn targetip
端口扫描:nmap -T4 targetip
服务扫描:nmap -T4 -sV targetip
操作系统扫描:nmap -T4 -O targetip
2. 查看本地路由与接口

Nmap中提供了--iflist选项来查看本地主机的接口信息与路由信息。

代码语言:javascript
复制
nmap --iflist
3. 指定网口与IP地址

Nmap可指定用哪个网口发送数据,-e <interface>选项。接口的详细信息可以参考--iflist选项输出结果。

代码语言:javascript
复制
nmap -e eth0 targetip

  Nmap也可以显式地指定发送的源端IP地址。使用-S <spoofip>选项,Nmap将用指定的spoofip作为源端IP来发送探测包。

  另外可以使用Decoy(诱骗)方式来掩盖真实的扫描地址,例如-D ip1,ip2,ip3,ip4,ME,这样就会产生多个虚假的ip同时对目标机进行探测,其中ME代表本机的真实地址,这样对方的防火墙不容易识别出是扫描者的身份。

4. 定制探测包

  Nmap提供--scanflags选项,用户可以对需要发送的TCP探测包的标志位进行完全的控制。可以使用数字或符号指定TCP标志位:URG, ACK, PSH,RST, SYN,and FIN

代码语言:javascript
复制
nmap -sX -T4 --scanflags URGACKPSHRSTSYNFINtargetip

  此命令设置全部的TCP标志位为1,可以用于某些特殊场景的探测。

  • --ip-options可以定制IP包的options字段
  • -S指定虚假的IP地址
  • -D指定一组诱骗IP地址(ME代表真实地址)
  • -e指定发送探测包的网络接口
  • -g(--source-port)指定源端口
  • -f指定使用IP分片方式发送探测包
  • --spoof-mac指定使用欺骗的MAC地址
  • --ttl指定生存时间。

0x007 扫描防火墙

  防火墙在今天网络安全中扮演着重要的角色,如果能对防火墙系统进行详细的探测,那么绕开防火墙或渗透防火墙就更加容易。所以,此处讲解利用Nmap获取防火墙基本信息典型的用法。

  为了获取防火墙全面的信息,需尽可能多地结合不同扫描方式来探测其状态。在设计命令行参数时,可以综合网络环境来微调时序参数,以便加快扫描速度。 SYN扫描

  首先可以利用基本的SYN扫描方式探测其端口开放状态。

代码语言:javascript
复制
nmap -sS -T4 www.fakefirewall.com

扫描输出为:

代码语言:javascript
复制
All 997 ports are filtered
PORT    STATE  SERVICE
80/tcp  open   http
113/tcp closed auth
507/tcp open   crs

  我们可以看到SYN方式探测到3个端口开放,而有997个端口被过滤。Nmap默认扫描只扫描1000个最可能开放的端口,如果想扫描全部的端口,使用命令

代码语言:javascript
复制
nmap -sS -T4-p- www.fakefirewall.com
1. FIN扫描

  然后可以利用FIN扫描方式探测防火墙状态。FIN扫描方式用于识别端口是否关闭,收到RST回复说明该端口关闭,否则说明是openfiltered状态。

代码语言:javascript
复制
nmap -sF -T4 www.fakefirewall.com

扫描输出为:

代码语言:javascript
复制
PORT      STATE         SERVICE
7/tcp     open|filtered echo
9/tcp     open|filtered discard
11/tcp    open|filtered systat
13/tcp    open|filtered daytime
23/tcp    open|filtered telnet
25/tcp    open|filtered smtp
37/tcp    open|filtered time
79/tcp    open|filtered finger
80/tcp    open|filtered http
更多端口,此处省略
2. ACK扫描

  然后利用ACK扫描判断端口是否被过滤。针对ACK探测包,未被过滤的端口(无论打开、关闭)会回复RST包。

代码语言:javascript
复制
nmap -sA -T4 www.fakefirewall.com

扫描输出为:

代码语言:javascript
复制
Not shown: 997 unfiltered ports
PORT      STATE    SERVICE
135/tcp   filtered msrpc
1434/tcp  filtered ms-sql-m
32777/tcp filtered sometimes-rpc17

  从结果可以997个端口是未被过滤的(unfiltered),而3个(135/1434/32777)被过滤了。所以,将ACK与FIN扫描的结果结合分析,我们可以找到很多开放的端口。例如7号端口,FIN中得出的状态是:openfiltered,从ACK中得出的状态是unfiltered,那么该端口只能是open的。

3. Window扫描

  当然也可以利用Window扫描方式,得出一些端口信息,可以与之前扫描分析的结果相互补充。Window扫描方式只对某些TCP/IP协议栈才有效。

  window扫描原理与ACK类似,发送ACK包探测目标端口,对回复的RST包中的Window size进行解析。在某些TCPIP协议栈实现中,关闭的端口在RST中会将Window size设置为0;而开放的端口将Window size设置成非0的值。

代码语言:javascript
复制
nmap -sW -p- -T4 docsrv.caldera.com

输出结果:

代码语言:javascript
复制
PORT      STATE    SERVICE
7/tcp     open     echo
9/tcp     open     discard
11/tcp    open     systat
13/tcp    open     daytime
更多端口,此处省略

  在采用多种方式获取出防火墙状态后,可以进一步进行应用程序与版本侦测及OS侦测,此处不再赘述!

0x008 扫描路由器

  Nmap内部维护了一份系统与设备的数据库(nmap-os-db),能够识别数千种不同系统与设备。所以,可以用来扫描主流的路由器设备。

1. 扫描思科路由器
代码语言:javascript
复制
nmap -p1-25,80,512-515,2001,4001,6001,9001 10.20.0.1/16

  思科路由器会在上述端口中运行了常见的服务。列举出上述端口开放的主机,可以定位到路由器设备可能的IP地址及端口状态。

2. 扫描路由器TFTP
代码语言:javascript
复制
nmap –sU –p69 –nvv target

  大多数的路由器都支持TFTP协议(简单文件传输协议),该协议常用于备份和恢复路由器的配置文件,运行在UDP 69端口上。使用上述命令可以探测出路由器是否开放TFTP。

3. 扫描路由器操作系统
代码语言:javascript
复制
nmap -O -F -n 192.168.1.1

  与通用PC扫描方式类似,使用-O选项扫描路由器的操作系统。-F用于快速扫描最可能开放的100个端口,并根据端口扫描结果进一步做OS的指纹分析。

0x009 扫描互联网

  Nmap内部的设计非常强大灵活,既能扫描单个主机、小型的局域网,也可以扫描成千上万台主机从中发掘用户关注的信息。扫描大量主机,需要对扫描时序等参数进行仔细的优化。

1. 发现互联网上web服务器
代码语言:javascript
复制
nmap -iR 100000 -sS -PS80 -p 80 -oG nmap.txt

  随机地产生10万个IP地址,对其80端口进行扫描。将扫描结果以greppable(可用grep命令提取)格式输出到nmap.txt文件。可以使用grep命令从输出文件提取关心的细节信息。

2. 统计互联网主机基本数据

  Nmap的创始人Fyodor在2008年的Black Hat大会发表一篇演讲,讲的是如何使用Nmap来扫描互联网(Nmap: Scanning the Internet)

  Fyodor进行互联网扫描的初衷是统计出网络经验数据并用之优化Nmap的性能。例如,根据统计出每个端口开放的概率,优先扫描常见端口,以节省用户的时间。

3. 产生随机IP地址

  产生100万个随机的IP地址,并将之保存到文件中,方便后续扫描时作为参数输入。

代码语言:javascript
复制
nmap -iR 1200000 -sL -n | grep "not scanned" | awk '{print $2}' | sort -n | uniq >! tp; head -25000000 tp >! tcp-allports-1M-IPs; rm tp

  上述命令含义:随机生成1200000个IP地址(-iR 120000),并进行列表扫描(-sL,列举出IP地址,不进行真正的扫描),不进行dns解析操作(-n),这样将产生Nmap列表扫描的结果。在此结果中搜出未扫描的行(grep “not scanned”),打印出每一行的第二列内容(awk ‘{print $2}’,也就是IP地址),然后对获取到的IP地址进行排序(sort -n),然后剔除重复IP地址,将结果保存到临时文件tp,再取出前1000000个IP地址保存到tcp-allports-1M-IPs文件中,删除临时文件。

  总之,此处产生了1000000个随机IP地址存放在tcp-allports-1M-IPs文件中。

4. 优化主机发现
代码语言:javascript
复制
nmap -sP -PE -PP -PS21,22,23,25,80,113,31339-PA80,113,443,10042 --source-port 53 -T4 -iL tcp-allports-1M-IPs

  上述命令进行主机发现:使用产生的IP地址(-iL tcp-allports-1M-IPs),指定发送包的源端口为53(--source-port 53,该端口是DNS查询端口,一般的防火墙都允许来自此端口的数据包),时序级别为4(-T4,探测速度比较快),以TCP SYN包方式探测目标机的21,22,23,25,80,113,31339端口,以TCP ACK包方式探测对方80,113,443,10042端口,另外也发送ICMP ECHO/ICMP TIMESTAMP包探测对方主机。只要上述的探测包中得到一个回复,就可以证明目标主机在线。

5. 完整的扫描命令

  在准备了必要的IP地址文件,并对主机发现参数优化后,我们就得到最终的扫描命令:

代码语言:javascript
复制
nmap -S [srcip] -d --max-scan-delay 10 -oAlogs/tcp-allports-%T-%D -iL tcp-allports-1M-IPs --max-retries 1--randomize-hosts -p- -PS21,22,23,25,53,80,443 -T4 --min-hostgroup 256 --min-rate175 –max-rate 300

  上述命令用于扫描互联网上100万台主机全部的TCP端口的开放情况。

  使用包含100万个IP地址的文件(-iL tcp-allports-1M-IPs),源端IP地址设置为srcip(指定一个IP地址,保证该IP地址位于统一局域网中,否则无法收到目标机的回复包),主机发现过程使用TCP SYN包探测目标机的21,22,23,25,53,80,443,扫描过程将随机打乱主机顺序(--randomize-hosts,因为文件中的IP已经排序,这里将之打乱,避免被防火墙检查出),端口扫描过程检查全部的TCP端口(-p-,端口1到65535),使用时序级别为4(-T4,速度比较快),将结果以XML/grepable/普通格式输出到文件中(-oA logs/tcp-allports-%T-%D,其中%T表示扫描时间,%D表示扫描日期)。

  • -d表示打印调试出信息。
  • --max-scan-delay 10表示发包最多延时10秒,防止特殊情景下等待过长的时间。
  • --max-retries 1,表示端口扫描探测包最多被重传一次,防止Nmap在没有收到回复的情况下多次重传探测包,当然这样也会降低探测的准确性。
  • --min-host-group 256表示进行端口扫描与版本侦测时,同时进行探测的主机的数量,这里至少256个主机一组来进行扫描,可以加快扫描速度。
  • --min-rate 175--max-rate 300,表示发包速率介于175和300之间,保证扫描速度不会太慢,也不会因为速率过高引起目标机的警觉。
6. 扫描结果

  Fyodor组织的此次扫描得出很多重要结论,统计出了互联网最有可能开放的10个TCP端口。

代码语言:javascript
复制
80 (http)
23 (telnet)
22 (ssh)
443 (https)
3389 (ms-term-serv)
445 (microsoft-ds)
139 (netbios-ssn)
21 (ftp)
135 (msrpc)
25 (smtp)

最有可能开放的10个UDP端口。

代码语言:javascript
复制
137 (netbios-ns)
161 (snmp)
1434 (ms-sql-m)
123 (ntp)
138 (netbios-dgm)
445 (microsoft-ds)
135 (msrpc)
67 (dhcps)
139 (netbios-ssn)
53 (domain)

0x010 扫描Web站点

  Web是互联网上最广泛的应用,而且越来越多的服务倾向于以Web形式提供出来,所以对Web安全监管也越来越重要。目前安全领域有很多专门的Web扫描软件(如AppScan、WebInspect、W3AF),能够提供端口扫描、漏洞扫描、漏洞利用、分析报表等诸多功能。而Nmap作为一款开源的端口扫描器,对Web扫描方面支持也越来越强大,可以完成Web基本的信息探测:服务器版本、支持的Method、是否包含典型漏洞。功能已经远远超过同领域的其他开源软件,如HTTPrint、Httsquash。

  目前Nmap中对Web的支持主要通过Lua脚本来实现,NSE脚本库中共有50多个HTTP相关的脚本。

  扫描实例:

代码语言:javascript
复制
nmap -sV -p 80 -T4 --script http*,defaultscanme.nmap.org

  上面以扫描scanme.nmap.org的Web应用展示Nmap提供Web扫描能力,从图中可以看到扫描结果中提供了比较丰富的信息。

  首先是应用程序及版本:Apachehttpd 2.2.14 ((Ubuntu))

  然后搜出了该站点的affiliate-id:该ID可用于识别同一拥有者的不同页面。

  然后输出HTTP-headers信息,从中查看到基本配置信息。

  从http-title中,可以看到网页标题。某些网页标题可能会泄漏重要信息,所以这里也应对其检查。

0x011 Python Nmap

Python 安装 Nmap

代码语言:javascript
复制
pip3 install python-nmap

Python Nmap Ping 扫描

代码语言:javascript
复制
# -*- coding=utf-8 -*-

import nmap
import sys
def nmap_ping_scan(network_prefix):
    nm = nmap.PortScanner()
    ping_scan_raw_result = nm.scan(hosts=network_prefix,arguments='-v -n -sn')
    host_list = []
    for Result in ping_scan_raw_result['scan'].values():
        if Result['status']['state'] == 'up':
            host_list.append(Result['addresses']['ipv4'])
    return host_list

if __name__ == '__main__':
    for host in nmap_ping_scan(sys.argv[1]):
        print('%s %s' % (host,'is UP'))

执行命令如下

代码语言:javascript
复制
root@kali:~/Desktop/CTF脚本/nmap# python3 nmap_ping_scan.py 192.168.1.0/24
192.168.1.1 is UP
192.168.1.7 is UP
192.168.1.9 is UP

Python Nmap -A 综合扫描

代码语言:javascript
复制
# -*- coding=utf-8 -*-

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'] + '   准确度为: ' + os['accuracy'])
            idno = 1
            try:
                for port in result['tcp']:
                    try:
                        print('-'*17 + 'TCP服务详细信息' + '[' + str(idno) + ']' + '-'*17)
                        idno = 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 = 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
            print('-'*20 + '地址详细信息' + '-'*20)
            try:
                print('IP地址: ' + result['addresses']['ipv4'])
                print('MAC地址: ' + result['addresses']['mac'])
            except:
                pass

if __name__ == '__main__':
    nmap_A_scan(sys.argv[1])

执行命令如下

代码语言:javascript
复制
root@kali:~/Desktop/CTF脚本/nmap# python3 nmap_A_scan.py 192.168.1.7
#################Host:192.168.1.7#################
--------------------操作系统猜测--------------------
操作系统为: Microsoft Windows Server 2008 SP1 or Windows Server 2008 R2   准确度为: 93
操作系统为: Microsoft Windows 7   准确度为: 91
操作系统为: Microsoft Windows Phone 7.5 or 8.0   准确度为: 87
操作系统为: Cisco ACE load balancer   准确度为: 87
操作系统为: Microsoft Windows Server 2008 R2 or Windows 8.1   准确度为: 86
操作系统为: Microsoft Windows 7 Professional or Windows 8   准确度为: 86
操作系统为: Microsoft Windows 7 SP1 or Windows Server 2008 R2   准确度为: 86
操作系统为: Microsoft Windows Vista SP0 or SP1, Windows Server 2008 SP1, or Windows 7   准确度为: 86
操作系统为: Microsoft Windows 8.1 Update 1   准确度为: 86
操作系统为: Microsoft Windows 7 or Windows Server 2008 R2   准确度为: 85
-----------------TCP服务详细信息[1]-----------------
TCP端口号:135
状态: open
原因: syn-ack
额外信息: 
名字: msrpc
版本: 
产品: Microsoft Windows RPC
CPE: cpe:/o:microsoft:windows
-----------------TCP服务详细信息[2]-----------------
TCP端口号:139
状态: open
原因: syn-ack
额外信息: 
名字: netbios-ssn
版本: 
产品: Microsoft Windows netbios-ssn
CPE: cpe:/o:microsoft:windows
...
...

Python Nmap 更多用法:http://xael.org/pages/python-nmap-en.html

参考文章

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-11-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x001 Nmap 简介
  • 0x002 Nmap 用途
  • 0x003 Nmap 基础使用
  • 0x004 Nmap 脚本扫描
    • 1. Nmap脚本命令行参数
      • 2. Nmap脚本分类
        • 3. 部分使用案例
        • 0x005 Nmap 应用服务扫描
          • 1. vnc扫描
            • 2. smb扫描
              • 3. Mssql扫描
                • 4. Mysql扫描
                  • 5. Oracle扫描
                    • 6. 其他好用脚本
                      • 7. 不靠谱的脚本:
                      • 0x006 Nmap 高级用法
                        • 1. 回顾Nmap简单扫描方式
                          • 2. 查看本地路由与接口
                            • 3. 指定网口与IP地址
                              • 4. 定制探测包
                              • 0x007 扫描防火墙
                                • 1. FIN扫描
                                  • 2. ACK扫描
                                    • 3. Window扫描
                                    • 0x008 扫描路由器
                                      • 1. 扫描思科路由器
                                        • 2. 扫描路由器TFTP
                                          • 3. 扫描路由器操作系统
                                          • 0x009 扫描互联网
                                            • 1. 发现互联网上web服务器
                                              • 2. 统计互联网主机基本数据
                                                • 3. 产生随机IP地址
                                                  • 4. 优化主机发现
                                                    • 5. 完整的扫描命令
                                                      • 6. 扫描结果
                                                      • 0x010 扫描Web站点
                                                      • 0x011 Python Nmap
                                                      • 参考文章
                                                      相关产品与服务
                                                      腾讯云 BI
                                                      腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
                                                      领券
                                                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档