Kali学习笔记9:端口扫描详解(上)
UDP端口扫描:
原理:回应ICMP不可达,代表端口关闭;没有回应,端口开启
建议了解应用层的UDP包头结构,构建对应的UDP数据包用来提高准确度
另外:所有的扫描都存在误判情况
我们用Scapy写个脚本来试试:
#!/usr/bin/python
import logging logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import *
import time
import sys if len(sys.argv) != 4:
print "./udp_scan.py [target ip] [first port] [last port]"
print "example ./udp_scan.py 10.0.0.5 1 100"
print "example will UDP port scan ports 1 to 100 on 10.0.0.5" ip = sys.argv[1]
start = int(sys.argv[2])
end = int(sys.argv[3]) for port in range(start, end):
a = sr1(IP(dst=ip) / UDP(dport=port), timeout=5, verbose=0)
time.sleep(1)
if a == None:
print port
else:
pass
如果是从WINDOWS复制过去的
vi udp_scan.py
:set fileformat=unix
:wq
chmod u+x udp_scan.py
执行:./udp_scan.py 10.0.0.0 1 100
接下来看看使用最强大的Nmap:
Nmap在端口扫描方面使用-sU参数
而我们使用Nmap如果不指定任何端口的话,他会扫描定义好的1000个常用端口

当然也可以指定端口扫描:

如果你一定要扫描全部端口,也是可以的:

好的,接下来我们看TCP端口扫描:
基于连接协议扫描:
所有的扫描都是基于三次握手的变化来判断目标端口状态
首先我们先用SCAPY演示:
我开启一个Metasploitable的虚拟机,查看到它的IP:192.168.22.129
再查看下Kali虚拟机的IP:192.168.22.130
打开Scapy测试:
我们主动发一个SYN包,只要回应SYN+ACK包,就代表端口开启,
我们不能继续回应ACK包,而要回复RST断开连接防止被发现!

第一行的意思是发送一个TCP数据包将返回值赋给a
然后我们查看下这个a包:发现默认扫描80端口,并且返回SYN+ACK
我们为什么这里不主动回RST包呢?
原因:可以抓包发现,操作系统会自动回复给"莫名其妙"的TCP包RST
接下来我们换个端口扫描:22

这种情况也说明这里的22端口是开放的
那么如果我们扫描一个关闭的端口呢?

发现目标机器回复的是一个RST+ACK
代表:这台机器是活着的,但是当前扫描的端口(22222)是没有开放的
我们在scapy的基础上写一个简单的扫描脚本:syn_scan.py
#!/usr/bin/python
import logging logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import *
import time
import sys if len(sys.argv) != 4:
print "./syn_scan.py [target ip] [first port] [last port]"
print "example ./udp_scan.py 10.0.0.5 1 100"
print "example will TCP SYN scan ports 1 to 100 on 10.0.0.5" ip = sys.argv[1]
start = int(sys.argv[2])
end = int(sys.argv[3]) for port in range(start, end):
a = sr1(IP(dst=ip) / TCP(dport=port), timeout=1, verbose=0)
time.sleep(1)
if a == None:
pass
else:
if int(a[TCP].flags)==18:
print port
else:
pass
难点:这里为什么flags==18?
抓包发现SYN和ACK分别是2和2的4次方即为16,加在一起恰好为18
使用这个脚本:
老规矩,如果是windows转移过去的:
vi syn_scan.py
:set fileformat=unix
:wq
chmod u+x syn_scan.py
执行:./syn_scan.py 10.0.0.0 1 100

这里并没有扫描完全,不过效果达到了(如果扫windows端口,1-100不会有任何开放端口)
隐蔽端口扫描这种方式其实比UDP的方式稳多了
当然,强大的Nmap也可以实现:而且效率更高
不过扫描原理就是上边写的内容
无参数扫描:

使用后发现比自己搞的脚本快太多,而且完善,真不愧是强大的Nmap
这里我们扫描的机器没有防火墙,所以扫描到的端口都是open的,如果存在close或filter,我们需要一个参数才能获取open的端口

nmap还可以加上一个参数:-sS:

其实和默认方式是一样的,所以直接使用即可
如果需要全部扫描:nmap [ip] -p -65535
如果需要扫描指定端口:nmap [ip] -p 80,22,...,139
其他端口扫描方式:
Hping3:

-S表示用SYN扫描,flags的S,A当然就代表SYN和ACK了
下面来个有趣的:

先解释下这行命令:-c 100发送一百个包,和-p ++1组合,意味对端口1-100分别发送SYN包,
有趣在--spoof参数,伪造源IP地址,我这台机器无法查看扫描结果,只有我登陆伪造的192.168.168.168机器才可以查看结果。
其实下边这十几行都没有用
这种方式有很大的优点也有很大的缺点:
优点:非常隐蔽,基本不会被发现,在目标看来是另外一个机器发送的探测数据包
缺点:麻烦,需要另外一台机器
上边的都是TCP半连接端口扫描
接下来,看看TCP全连接端口扫描:
下一篇博客我们继续:
Kali学习笔记9:端口扫描详解(上)的更多相关文章
- IP2——IP地址和子网划分学习笔记之《子网掩码详解》
2018-05-04 16:21:21 在学习掌握了前面的<进制计数><IP地址详解>这两部分知识后,要学习子网划分,首先就要必须知道子网掩码,只有掌握了子网掩码这部分内容 ...
- Kali学习笔记10:端口扫描详解(下)
上一篇先是介绍了UDP的端口扫描,又谈了TCP的不完全连接端口扫描 https://www.cnblogs.com/xuyiqing/p/9389276.html 接下来我们看看TCP的全连接端口扫描 ...
- CDN学习笔记二(技术详解)
一本好的入门书是带你进入陌生领域的明灯,<CDN技术详解>绝对是带你进入CDN行业的那盏最亮的明灯.因此,虽然只是纯粹的重点抄录,我也要把<CDN技术详解>的精华放上网.公诸同 ...
- [读书笔记]C#学习笔记三: C#类型详解..
前言 这次分享的主要内容有五个, 分别是值类型和引用类型, 装箱与拆箱,常量与变量,运算符重载,static字段和static构造函数. 后期的分享会针对于C#2.0 3.0 4.0 等新特性进行. ...
- C#学习笔记二: C#类型详解
前言 这次分享的主要内容有五个, 分别是值类型和引用类型, 装箱与拆箱,常量与变量,运算符重载,static字段和static构造函数. 后期的分享会针对于C#2.0 3.0 4.0 等新特性进行. ...
- 【Java学习笔记之三十三】详解Java中try,catch,finally的用法及分析
这一篇我们将会介绍java中try,catch,finally的用法 以下先给出try,catch用法: try { //需要被检测的异常代码 } catch(Exception e) { //异常处 ...
- jQuery学习笔记之Ajax用法详解
这篇文章主要介绍了jQuery学习笔记之Ajax用法,结合实例形式较为详细的分析总结了jQuery中ajax的相关使用技巧,包括ajax请求.载入.处理.传递等,需要的朋友可以参考下 本文实例讲述了j ...
- MyBatis学习笔记2--配置环境详解
1.MyBatis-config.xml详解 一个完整的配置文件如下所示 <configuration> <!-- <properties resource="jdb ...
- [Spring学习笔记 5 ] Spring AOP 详解1
知识点回顾:一.IOC容器---DI依赖注入:setter注入(属性注入)/构造子注入/字段注入(注解 )/接口注入 out Spring IOC容器的使用: A.完全使用XML文件来配置容器所要管理 ...
随机推荐
- 基于角色的访问控制 (RBAC)权限管理
RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用户-角色- ...
- vim 中文乱码怎么解决
一般来说只需要正确设置vim的编码识别序列就很少会遇到乱码问题: set fileencodings=ucs-bom,utf-8,utf-16,gbk,big5,gb18030,latin1 这个设置 ...
- jquery datatables+MVC+WCF
view @{ Layout = null;} <!DOCTYPE html><html><head> <title>111</title> ...
- Layui使用table展示数据
今天在Layui官网拿了一个table表格数据展示的源码,研究遇到了很多问题,最后才把数据展示出来,和大家分享下. 源码地址:https://www.layui.com/demo/table/oper ...
- windows环境下wamp安装redis拓展
环境: wamp集成环境 安装分为两部 1.安装redis客户端 https://github.com/ServiceStack/redis-windows/raw/master/download ...
- unity渲染路径
(1) deferred shading:有最佳的光照和阴影效果,在场景中存在许多的实时光照时,使用deferred shading也是最佳的方案,之所以叫做deferred(延迟),是因为 ...
- 2019.03.25 bzoj4539: [Hnoi2016]树(主席树+倍增)
传送门 题意:给一棵大树,令一棵模板树与这棵树相同,然后进行mmm次操作,每次选择模板树中的一个节点aaa和大树中一个节点bbb,把aaa这棵子树接在bbb上面,节点编号顺序跟aaa中的编号顺序相同. ...
- Win7 VS2017编译Blender2.79
去年在VS2013环境编译过一次,重装系统后换了VS2017,正好刚编译完Godot3.0.2,顺手把Blender也编译了吧. 官方Windows下编译指南 https://wiki.blender ...
- LCD调试1.0
所谓调lcd timing就是去调lcd时序,一般是6个部分:HFPD(在一行扫描以前需要多少个像素时钟),HBPD(一行扫描结束到下一行扫描开始需要多少个像素时钟),VFPD(一帧开始之前需要多少个 ...
- 华为云服务器为Tomcat配置SSL
近期由于开发小程序需要在云服务器上配置https访问协议,也遇到了一点小问题,把配置过程记录一下:SSL 证书申请下来之后会有 .jks .crt .pfx .pem为后缀的文件(如何申请SSL证书这 ...