扫描者:1.1.1.1
被扫描者:2.2.2.2

0x00 介绍
在日常工作对目标信息收集时,我们经常用到nmap这款网络探测工具和安全/端口扫描器,虽然我们关注的是结果(如目标开启了哪些危险端口,什么操作系统等等),现在,跟我来看一个简单的例子,看看nmap扫描时到底做了什么?和我们看到的结果有什么不同?

0x01 命令选项
首先,我们来介绍下nmap -sS和 -p 选项:
-sS (TCP SYN扫描)
SYN扫描作为默认的也是最受欢迎的扫描选项,是有充分理由的。 它执行得
很快,在一个没有入侵防火墙的快速网络上,每秒钟可以扫描数千个 端口。
SYN扫描相对来说不张扬,不易被注意到,因为它从来不完成TCP连接。 它也
不像Fin/Null/Xmas,Maimon和Idle扫描依赖于特定平台,而可以应对任何兼
容的 TCP协议栈。 它还可以明确可靠地区分open(开放的), closed(关闭
的),和filtered(被过滤的) 状态

它常常被称为半开放扫描, 因为它不打开一个完全的TCP连接。它发送一
个SYN报文, 就像您真的要打开一个连接,然后等待响应。 SYN/ACK表示端
口在监听 (开放),而 RST (复位)表示没有监听者。如果数次重发后仍没响
应, 该端口就被标记为被过滤。如果收到ICMP不可到达错误 (类型3,代码1
,2,3,9,10,或者13),该端口也被标记为被过滤。

-p <port ranges> (只扫描指定的端口)
该选项指明您想扫描的端口,覆盖默认值。 单个端口和用连字符表示的端口
范围(如 1-1023)都可以。 范围的开始以及/或者结束值可以被省略, 分别
导致Nmap使用1和65535。所以您可以指定 -p-从端口1扫描到65535。 如果您
特别指定,也可以扫描端口0。 对于IP协议扫描(-sO),该选项指定您希望扫
描的协议号 (0-255)。

当既扫描TCP端口又扫描UDP端口时,您可以通过在端口号前加上T: 或者U:指
定协议。 协议限定符一直有效您直到指定另一个。 例如,参数 -p U:53
,111,137,T:21-25,80,139,8080 将扫描UDP 端口53,111,和137,同
时扫描列出的TCP端口。注意,要既扫描 UDP又扫描TCP,您必须指定 -sU ,
以及至少一个TCP扫描类型(如 -sS,-sF,或者 -sT)。如果没有给定协议限
定符, 端口号会被加到所有协议列表。
0x02 被扫描者先运行开始抓包
[root@2.2.2.2_Server ~]# tcpdump -tnn -i eth1 ip host 1.1.1.1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
IP 1.1.1.1 > 2.2.2.2: ICMP echo request, id 59748, seq 0, length 8
IP 2.2.2.2 > 1.1.1.1: ICMP echo reply, id 59748, seq 0, length 8
IP 1.1.1.1 > 2.2.2.2: ICMP time stamp query id 35654 seq 0, length 20
IP 2.2.2.2 > 1.1.1.1: ICMP time stamp reply id 35654 seq 0: org 00:00:00.000, recv 16:57:19.208, xmit 16:57:19.208, length 20
IP 1.1.1.1.43085 > 2.2.2.2.80: Flags [.], ack 1250535980, win 1024, length 0
IP 2.2.2.2.80 > 1.1.1.1.43085: Flags [R], seq 1250535980, win 0, length 0
IP 1.1.1.1.43085 > 2.2.2.2.443: Flags [S], seq 1250535980, win 1024, options [mss 1436], length 0
IP 2.2.2.2.443 > 1.1.1.1.43085: Flags [S.], seq 2628103251, ack 1250535981, win 14600, options [mss 1460], length 0
IP 1.1.1.1.43085 > 2.2.2.2.443: Flags [R], seq 1250535981, win 0, length 0
IP 1.1.1.1.43341 > 2.2.2.2.2121: Flags [S], seq 1693928585, win 1024, options [mss 1436], length 0
IP 2.2.2.2.2121 > 1.1.1.1.43341: Flags [S.], seq 3143359954, ack 1693928586, win 14600, options [mss 1460], length 0
IP 1.1.1.1.43341 > 2.2.2.2.2121: Flags [R], seq 1693928586, win 0, length 0

0x03 扫描者开始扫描
[root@1.1.1.1_Server ~]# nmap -sS -p 2121 2.2.2.2

Starting Nmap 6.47 ( http://nmap.org ) at 2017-03-24 00:56 CST
Nmap scan report for 2.2.2.2
Host is up (0.14s latency).
PORT STATE SERVICE
2121/tcp open ccproxy-ftp

Nmap done: 1 IP address (1 host up) scanned in 0.62 seconds

0x04 数据包分析
首先,我们可以把抓到的包分为4部分:
0x041
IP 1.1.1.1 > 2.2.2.2: ICMP echo request, id 59748, seq 0, length 8
IP 2.2.2.2 > 1.1.1.1: ICMP echo reply, id 59748, seq 0, length 8
第一个数据包是扫描者向被扫描者发出ICMP请求回显(类型为8即ping)
第二个数据包是被扫描者发给扫描者的ICMP回显应答(类型为0)
可以看出nmap第一个扫描项是先用ping来检测主机是否存活,接下来,我们看第二部分:
0x042
IP 1.1.1.1 > 2.2.2.2: ICMP time stamp query id 35654 seq 0, length 20
IP 2.2.2.2 > 1.1.1.1: ICMP time stamp reply id 35654 seq 0: org 00:00:00.000, recv 16:57:19.208, xmit 16:57:19.208, length 20
第三个数据包是扫描者向被扫描者发出ICMP时间戳查询
第四个数据包是被扫描者发给扫描者的ICMP时间戳应答
简单介绍下时间戳:ICMP时间戳请求允许系统向另一个系统查询当前的时间。返回的建议值是自午夜开始计算的毫秒数,协调的统一时间(Coordinated Universal Time ,UTC)(早起的参考手册认为UTC是格林尼治时间)。
这里不过多介绍,有兴趣的朋友可以看一下《TCP/IP详解 卷1:协议》一书的53-56页,其中详细讲解了ICMP时间戳请求与应答。
0x043
IP 1.1.1.1.43085 > 2.2.2.2.80: Flags [.], ack 1250535980, win 1024, length 0
IP 2.2.2.2.80 > 1.1.1.1.43085: Flags [R], seq 1250535980, win 0, length 0
第五个数据包是扫描者使用本地43085端口发往被扫描者80端口的数据包,并明确说明我希望收到你回复的1250535980号seq包,我能接受的window size是1024个缓存窗口大小,长度为0
第六个数据包是被扫描者回应给扫描者的RST(复位)数据包,前面0x01部分红色字明确标明客户端回应了SYN/ACK表示端口在监听 (开放),而 RST (复位)表示没有监听者。如果数次重发后仍没响应,该端口就被标记为被过滤。所以可以判断被扫描者2.2.2.2 80端口除于关闭状态,但博主认为此处存在误报,比如,如果我不想访客使用IP地址的方式来访问我的博客,那我就可以在nginx配置文件中这样配置:
# vim /etc/nginx/conf.d/default.conf
server {
listen 80 default_server;
server_name _;
return 444;
}
#return后续的配置无效,非标准的444代码可以强制关闭服务器与客户端的连接而不返回任何响应信息给客户端
如上,这样明明我开启了80端口,但数据包中却显示我没有监听80端口,但如果你用nmap –Ss –p 80 2.2.2.2 直接扫描80端口你会发现,即使是RST(复位)flag,也显示80端口是开放的,这就是nmap神奇的地方。
flag是tcp包中的标志信息,[S]是SYN标志,F(FIN),P(PUSH),R(RST),"."(没有标记)

0x044
IP 1.1.1.1.43085 > 2.2.2.2.443: Flags [S], seq 1250535980, win 1024, options [mss 1436], length 0
IP 2.2.2.2.443 > 1.1.1.1.43085: Flags [S.], seq 2628103251, ack 1250535981, win 14600, options [mss 1460], length 0
IP 1.1.1.1.43085 > 2.2.2.2.443: Flags [R], seq 1250535981, win 0, length 0
回过头来我们简单看下第七个数据包:连接被扫描者443端口….略
第八个数据包中被扫描者回应了扫描者SYN建立连接的请求,并标明我收到了你的1250535980序列号的包,并且我希望下一个数据包收到你的1250535981号包,我的窗口大小是14600,我能接受的每个TCP包所能携带的最大数据量是1460个字节大小
第九个数据包扫描者直接发给被扫描者一个序列号为1250535981的包,但长度为0,windos size为0表示RST(复位),主动断开连接
0x045
IP 1.1.1.1.43341 > 2.2.2.2.2121: Flags [S], seq 1693928585, win 1024, options [mss 1436], length 0
IP 2.2.2.2.2121 > 1.1.1.1.43341: Flags [S.], seq 3143359954, ack 1693928586, win 14600, options [mss 1460], length 0
IP 1.1.1.1.43341 > 2.2.2.2.2121: Flags [R], seq 1693928586, win 0, length 0
第十个数据包也是一样,扫描者向被扫描者发送SYN请求连接2121端口
第十一个数据包被扫描者回应说,我收到你的请求,你连把,我希望下一个收到你的1693928586号包
第十二个数据包扫描者回复说,给你1693928586号包,但我要RST(复位)主动断开连接。

好吧,感谢你能够耐心看到结尾,如果有喜欢网络分析的朋友,推荐给你们三本书:《TCP/IP 详解 卷1:协议》,《Wireshark网络分析就这么简单》(林沛满2014年出版)和《Wireshark网络分析的艺术》(林沛满2016年出版)

nmap数据流的更多相关文章

  1. Nmap参数详解

    转自:http://blog.csdn.net/huangwwu11/article/details/20230795 Nmap--networkmapper,网络探测工具和安全/端口扫描器 nmap ...

  2. 只有小于65535端口编程可以用,查看哪些端口被打开netstat -anp,nc命令,nmap命令

    1024以下是系统保留的,从1024-65535是用户使用的 个人写的应用程序,尽量不要使用0到1024之间的端口号. 1024到65535我们编程可以用.这个不是Linux规定的,是socket规定 ...

  3. Nmap参考指南(Man Page)

    Table of Contents 描述 译注 选项概要 目标说明 主机发现 端口扫描基础 端口扫描技术 端口说明和扫描顺序 服务和版本探测 操作系统探测 时间和性能 防火墙/IDS躲避和哄骗 输出 ...

  4. Nmap的详细使用

    Nmap的详细使用 介绍常用参数选项主机发现端口扫描服务和版本探测操作系统探测性能优化防火墙/IDS 躲避和哄骗输出 (一)介绍 Nmap — 网络探测工具和安全/端口扫描器. Nmap (“Netw ...

  5. Nmap渗透测试使用方法

    Nmap渗透测试使用方法 目标选择2 端口选择2 操作系统和服务检测2 Nmap输出格式2 用NSE脚本深入挖掘2 HTTP服务信息3 检测SSL漏洞问题的主机3 设备扫描3 按VNC扫描5 按SMB ...

  6. nmap中文手册

    译注该Nmap参考指南中文版由Fei Yang <fyang1024@gmail.com>和Lei Li<lilei_721@6611.org> 从英文版本翻译而来. 我们希望 ...

  7. Nmap参考指南中文版

    Nmap参考指南中文版 来源: http://www.nmap.com.cn/doc/manual.shtm 译注 该Nmap参考指南中文版由Fei Yang <fyang1024@gmail. ...

  8. nmap扫描端口导致线上大量Java服务FullGC甚至OOM

    nmap扫描端口导致线上大量Java服务FullGC甚至OOM 最近公司遇到了一次诡异的线上FullGC保障,多个服务几乎所有的实例集中报FullGC,个别实例甚至出现了OOM,直接被docker杀掉 ...

  9. Nmap 操作手册 - 完整版

    目录 Nmap - 基础篇 Nmap 安装 RedHat Windows Debina & Ubuntu Others Linux Nmap 参数(简单版) 目标说明 主机发现 扫描技术 端口 ...

随机推荐

  1. 解决代码报红:Cannot resolve symbol 'xxx'

    直接复制别人的代码,maven依赖到自己的IDEA中,个别代码报红,说是不能加载这个东西,检查代码没错,依赖没错,引入jar包也没错 最后网上找到了解决方法,参考文章 如上图所示,一般建议点击Inva ...

  2. 二叉搜索树(hdu3791)

    二叉搜索树 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  3. js-ES6学习笔记-module(3)

    1.如果想设置跨模块的常量(即跨多个文件),或者说一个值要被多个模块共享,可以采用下面的写法. // constants.js 模块 export const A = 1; export const ...

  4. Redis Linux版安装详解

    Redis介绍 我的Linux系统是CentOS7 1.安装Redis 官方下载地址:http://download.redis.io 使用Linux下载:wget http://download.r ...

  5. 使用Git上传代码到Github仓库

    准备工作: 首先你需要一个github账号,所有还没有的话先去注册吧! https://github.com/ 我们使用git需要先安装git工具,这里给出下载地址,下载后一路直接安装即可: http ...

  6. java持有对象【1】容器类及ArrayList

    如果一个程序只包含固定数量的且其生命周期都是已知的对象,那么这是一个非常简单的程序.  ----------java编程思想第十一章引言 java有许多方式引用对象,例如学过的数组,他是编译器支持的类 ...

  7. Python实现屏幕截图的两种方式

    Python实现屏幕截图的两种方式 使用windows API 使用PIL中的ImageGrab模块 下面对两者的特点和用法进行详细解释. 一.Python调用windows API实现屏幕截图 好处 ...

  8. Linux find查找指定文件 按照名称 然后cp拷贝到指定目录且指定文件名

    最近有一个需求,需要将指定目录下的文件(已知文件名)复制到另一个指定的目录且重命名文件. 要求: 在var目录下会定义系统的启动日志相关信息,请查找对应的boot.log文件,并把它备份一份到var/ ...

  9. Mongodb的入门(6)副本集

    Mongodb的副本集:(有两种情况,主从复制,副本集) 这次我来说一下mongodb的副本集,副本集的出现可以有效的保证mongodb的单点问题,对数据的稳健性有一定辅助作用: MongoDB复制: ...

  10. 白盒测试实践-DAY1

    时间:2017.12.11 地点:软件学院 成员:张玉.周静.张双双 会议内容:讨论题目要求,分配任务 针对第一阶段的任务进行部署,共同学习白盒测试方法,根据自己选择的系统--餐厅网站,针对其中的管理 ...