nmap概念
NMap,也就是Network Mapper,最早是Linux下的网络扫描和嗅探工具包。
nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(这是亦称 fingerprinting)。它是网络管理员必用的软件之一,以及用以评估网络系统安全。
正如大多数被用于网络安全的工具,nmap 也是不少黑客及骇客(又称脚本小子)爱用的工具 。系统管理员可以利用nmap来探测工作环境中未经批准使用的服务器,但是黑客会利用nmap来搜集目标电脑的网络设定,从而计划攻击的方法。
Nmap 常被跟评估系统漏洞软件Nessus 混为一谈。Nmap 以隐秘的手法,避开闯入检测系统的监视,并尽可能不影响目标系统的日常操作。
Nmap 在黑客帝国(The Matrix)中,连同SSH1的32位元循环冗余校验漏洞,被崔妮蒂用以入侵发电站的能源管理系统。
nmap功能
基本功能有三个,一是探测一组主机是否在线;其次是扫描 主机端口,嗅探所提供的网络服务;还可以推断主机所用的操作系统 。Nmap可用于扫描仅有两个节点的LAN,直至500个节点以上的网络。Nmap 还允许用户定制扫描技巧。通常,一个简单的使用ICMP协议的ping操作可以满足一般需求;也可以深入探测UDP或者TCP端口,直至主机所 使用的操作系统;还可以将所有探测结果记录到各种格式的日志中, 供进一步分析操作。
进行ping扫描,打印出对扫描做出响应的主机,不做进一步测试(如端口扫描或者操作系统探测):
1
|
nmap - sP 192.168 . 1.0 / 24 |
仅列出指定网络上的每台主机,不发送任何报文到目标主机:
1
|
nmap - sL 192.168 . 1.0 / 24 |
探测目标主机开放的端口,可以指定一个以逗号分隔的端口列表(如-PS22,23,25,80):
1
|
nmap - PS 192.168 . 1.234 |
使用UDP ping探测主机:
1
|
nmap - PU 192.168 . 1.0 / 24 |
使用频率最高的扫描选项:SYN扫描,又称为半开放扫描,它不打开一个完全的TCP连接,执行得很快:
1
|
nmap - sS 192.168 . 1.0 / 24 |
nmap安装
本文以linux Ubuntu16.04为例,最后主要用python操作
1. 先安装nmap
1
|
sudo apt - get install nmap |
2.再安装python-nmap
1
|
sudo pip install python-nmap |
安装完之后python导入nmap测试验证是否成功
1
2
3
4
5
|
com@pythontab:~ # python Python 2.7.12 (default, Dec 3 2016, 10:42:27) [GCC 4.4.7 20120313 (Red Hat 4.4.7-17)] on linux2 Type "help" , "copyright" , "credits" or "license" for more information. >>> import nmap |
python操作nmap
1.简单的小案例
创建PortScanner实例,然后扫描114.114.114.114这个IP的20-443端口。
1
2
3
4
|
import nmap nm = nmap.PortScanner() ret = nm.scan( '114.114.114.114' , '20' ) print ret |
返回格式如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
{ 'nmap' : { 'scanstats' : { 'uphosts' : '1' , 'timestr' : 'Tue Oct 25 11:30:47 2016' , 'downhosts' : '0' , 'totalhosts' : '1' , 'elapsed' : '1.11' }, 'scaninfo' : { 'tcp' : { 'services' : '20' , 'method' : 'connect' }}, 'command_line' : 'nmap -oX - -p 20 -sV 115.239.210.26' }, 'scan' : { '115.239.210.26' : { 'status' : { 'state' : 'up' , 'reason' : 'syn-ack' }, 'hostnames' : [{ 'type' : '' , 'name' : '' }], 'vendor' : {}, 'addresses' : { 'ipv4' : '115.239.210.26' }, 'tcp' : {20: { 'product' : '' , 'state' : 'filtered' , 'version' : '' , 'name' : 'ftp-data' , 'conf' : '3' , 'extrainfo' : '' , 'reason' : 'no-response' , 'cpe' : '' } } } } } |
2.内置方法:
还可以打印出简单的信息
1
2
3
4
5
6
|
import nmap nm = nmap.PortScanner() print nm.scaninfo() # {u'tcp': {'services': u'20-443', 'method': u'syn'}} print nm.command_line() # u'nmap -oX - -p 20-443 -sV 114.114.114.114' |
查看有多少个host
1
|
print nm.all_hosts() |
[u’114.114.114.114′]
查看该host的详细信息
1
|
nm[ '114.114.114.114' ] |
查看该host包含的所有协议
1
|
nm[ '114.114.114.114' ].all_protocols() |
查看该host的哪些端口提供了tcp协议
1
2
|
nm[ '114.114.114.114' ][ 'tcp' ] nm[ '114.114.114.114' ][ 'tcp' ].keys() |
查看该端口是否提供了tcp协议
1
|
nm[ '114.114.114.114' ].has_tcp( 21 ) |
还可以像这样设置nmap执行的参数
1
|
nm.scan(hosts = '192.168.1.0/24' , arguments = '-n -sP -PE -PA21,23,80,3389' ) |
暂无评论内容