扫描者: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. 9102年了,你还在用for循环操作集合?

    本文首发于cdream的个人博客,点击获得更好的阅读体验! 欢迎转载,转载请注明出处. 前段时间公司书架多了一本<Java8 实战>,毕竟久闻lambda的大名,于是借来一阅.这一看,简直 ...

  2. 桥接模式(Bridge)

    1.概念 桥接模式将抽象部分与它的实现部分分离,使它们都可以独立地变化,属于结构性模式的一种. 2.模式结构 Abstraction(抽象类):定义抽象接口,拥有一个Implementor类型的对象引 ...

  3. Slickflow.NET 开源工作流引擎基础介绍(七) -- 并行分支多实例模式实现

    前言:并行审批是比较常见的流程模式,在工作流模式介绍中,通常是多个分支通过网关(Gateway)来控制实现.默认的分支类型是静态定义好的.本文扩展了并行网关的控制方式,实现了动态多实例的并行分支网关, ...

  4. ERP、CRM、CMS

    ERP: 全称:Enterprise Resource Planning 解释:企业资源计划. ERP 是一种主要面向制造行业进行物质资源.资金资源和信息资源集成一体化管理的企业信息管理系统.ERP ...

  5. JS中冒泡排序,选择排序,快速排序

        var arr = [1,4,2,9,7,6,5,4,7,5];     // 冒泡排序(通俗的说就是j 和 j+1打,谁赢了谁去后面)       for(var i = 1;i<ar ...

  6. Android应用程序启动过程(一)总结

    一.App启动方式 1,冷启动 冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用. 冷启动的特点:因为系统会重新创建一个新的进程分配给它,所以会创建和初始化App ...

  7. Java web 开发填坑记 2 -如何正确的创建一个Java Web 项目

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/72566261 本文出自[赵彦军的博客] Java web 开发填坑记 1-如何正确 ...

  8. 【Java入门提高篇】Day12 Java代理——Cglib动态代理

    今天来介绍另一种更为强大的代理——Cglib动态代理. 什么是Cglib动态代理? 我们先回顾一下上一篇的jdk动态代理,jdk动态代理是通过接口来在运行时动态创建委托类的代理对象,但是跟静态代理一样 ...

  9. springcloud 入门 4 (rebbon源码解读)

    Ribbon: ribbon是springcloud个服务之间调用的一种实现方式:主要提供了客户端的负载均衡.feign集成了Ribbon(下节介绍) 源码分析: 1> 源码入口 @LoadBa ...

  10. 使用redis 处理高并发场景

    1.原理: 当同一个用户获取锁之后,会让该用户一直持有锁.同样 的用户再次获取,会根据原子性 ,lock返回true. /** * 获取锁(非公平锁), 默认获取超时为2分钟 */ public bo ...