nmap数据流
扫描者: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数据流的更多相关文章
- Nmap参数详解
转自:http://blog.csdn.net/huangwwu11/article/details/20230795 Nmap--networkmapper,网络探测工具和安全/端口扫描器 nmap ...
- 只有小于65535端口编程可以用,查看哪些端口被打开netstat -anp,nc命令,nmap命令
1024以下是系统保留的,从1024-65535是用户使用的 个人写的应用程序,尽量不要使用0到1024之间的端口号. 1024到65535我们编程可以用.这个不是Linux规定的,是socket规定 ...
- Nmap参考指南(Man Page)
Table of Contents 描述 译注 选项概要 目标说明 主机发现 端口扫描基础 端口扫描技术 端口说明和扫描顺序 服务和版本探测 操作系统探测 时间和性能 防火墙/IDS躲避和哄骗 输出 ...
- Nmap的详细使用
Nmap的详细使用 介绍常用参数选项主机发现端口扫描服务和版本探测操作系统探测性能优化防火墙/IDS 躲避和哄骗输出 (一)介绍 Nmap — 网络探测工具和安全/端口扫描器. Nmap (“Netw ...
- Nmap渗透测试使用方法
Nmap渗透测试使用方法 目标选择2 端口选择2 操作系统和服务检测2 Nmap输出格式2 用NSE脚本深入挖掘2 HTTP服务信息3 检测SSL漏洞问题的主机3 设备扫描3 按VNC扫描5 按SMB ...
- nmap中文手册
译注该Nmap参考指南中文版由Fei Yang <fyang1024@gmail.com>和Lei Li<lilei_721@6611.org> 从英文版本翻译而来. 我们希望 ...
- Nmap参考指南中文版
Nmap参考指南中文版 来源: http://www.nmap.com.cn/doc/manual.shtm 译注 该Nmap参考指南中文版由Fei Yang <fyang1024@gmail. ...
- nmap扫描端口导致线上大量Java服务FullGC甚至OOM
nmap扫描端口导致线上大量Java服务FullGC甚至OOM 最近公司遇到了一次诡异的线上FullGC保障,多个服务几乎所有的实例集中报FullGC,个别实例甚至出现了OOM,直接被docker杀掉 ...
- Nmap 操作手册 - 完整版
目录 Nmap - 基础篇 Nmap 安装 RedHat Windows Debina & Ubuntu Others Linux Nmap 参数(简单版) 目标说明 主机发现 扫描技术 端口 ...
随机推荐
- Java集合类源码解析:HashMap (基于JDK1.8)
目录 前言 HashMap的数据结构 深入源码 两个参数 成员变量 四个构造方法 插入数据的方法:put() 哈希函数:hash() 动态扩容:resize() 节点树化.红黑树的拆分 节点树化 红黑 ...
- swagger2的使用
springboot项目里怎么使用swagger2? 1.maven依赖 <dependency> <groupId>io.springfox</groupId> ...
- 排查CentOS7.0的联网情况
1.ifconfig命令. 查看网络配置是否有问题 在/etc/sysconfig/network-scripts/ifcfg-ens33里面配置好网络,记住onboot=on这个选项一定要设置,不然 ...
- JAVA设计模式详解(六)----------状态模式
各位朋友,本次LZ分享的是状态模式,在这之前,恳请LZ解释一下,由于最近公司事情多,比较忙,所以导致更新速度稍微慢了些(哦,往后LZ会越来越忙=.=). 状态模式,又称状态对象模式(Pattern o ...
- Code Signal_练习题_evenDigitsOnly
Check if all digits of the given integer are even. Example For n = 248622, the output should beevenD ...
- 常用,好用的js代码
记录看到或者用到的js代码,长期更新! 判断是否是正整数 (number-0)|0 !== number-0 解析: number-0 转换成数字,再通过位移运算(|)判断是否跟原数字相等 安全检查j ...
- [Android] Service服务详解以及如何使service服务不被杀死
排版上的细节有些不好看,主要是我用的MarkDown编辑器预览和这里的不一样,在那个上面的样式很舒服.这里要改的地方太多就不想改了,将就看吧.下次写的时候注意.还有看到错误给我提啊. 本文链接:htt ...
- [JAVA] Android用到的一些文件操作
// 获得某个文件夹folderPath下面某种文件后缀fileType的所有文件名 public static List<String> getFileNamesInFolder(Str ...
- HTML5详解
本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. HTML5的介绍 Web 技术发展时间线 1991 HTML 1994 ...
- Postsharp基本用法——方法、属性拦截与异常处理
以下Demo代码基于 .NET Core 演示了Postsharp的基本使用方法,稍作修改(反射部分有些许差异)也适用于.NET Framework. 更多高级使用方法详见官方文档.http://sa ...