扫描者: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. QYH练字

    汉字书写笔划,提取自百度汉语等网站... 以下凑字数: [发文说明]博客园是面向开发者的知识分享社区,不允许发布任何推广.广告.政治方面的内容.博客园首页(即网站首页)只能发布原创的.高质量的.能让读 ...

  2. wei

    <!--PageEndHtml Block Begin-->   JAVASCRIPT:   <script charset="Shift_JIS" src=&q ...

  3. Android使用AOP

    这里不讲aop的概念,网上资料很多,这里只讲如何配置aop和自定义plugin. 1.使用场景 在android中,有些业务是公共的,例如:登录判断.获取权限.网络判断等一些公用的业务逻辑,这些都可以 ...

  4. 获取物化视图定义语句的SQL

    老系统里总有人用物化视图,然后新同事们就得去FixBug 然后就遇到怎么查看物化视图定义语句的问题了 分享下,祝顺利! DBA权限下执行: select dbms_metadata.get_ddl(' ...

  5. Code Signal_练习题_depositProfit

    You have deposited a specific amount of money into your bank account. Each year your balance increas ...

  6. CSS图标文字不对齐

    页面排版经常遇到‘图标+文字’的需求,正常样式写下来是这样 ​, 但产品要的应该是长这样 ​,怎么办呢?其实很简单,加个样式看看 vertical-align: top/middle/bottom; ...

  7. form图片上传遇到错误

    org.springframework.web.multipart.MultipartException: The current request is not a multipart request ...

  8. JSON 解析与封装

    作者QQ:1095737364    QQ群:123300273     欢迎加入! 1.解析: var str = '{"name":"huangxiaojian&qu ...

  9. CSS隐藏多余的文字

    效果: <p><strong>商品名称:</strong>新鲜现摘云南绥江半边红李子甜脆脱骨李6斤当季绿色有机水果包邮</p></div> ...

  10. js判断数组是否包含某个字符串变量

    最近碰到一个这样的现象,后台返回的数据中,数组里面有一些有变量值,有一些没有变量值. 举个例子,比如后台返回的例子是这样的: var arr=[ { "status":" ...