当前位置: 移动技术网 > 科技>操作系统>Linux > Kali学习笔记10:端口扫描详解(下)

Kali学习笔记10:端口扫描详解(下)

2018年09月16日  | 移动技术网科技  | 我要评论

上一篇先是介绍了udp的端口扫描,又谈了tcp的不完全连接端口扫描

接下来我们看看tcp的全连接端口扫描:

 

syn扫描在网络环境非常复杂的情况下,无法正常工作,于是我们可以使用全连接扫描

即完整地建立三次握手

 

由于全连接,那么扫描结果相当准确,但是隐蔽性最低,容易被发现

 具体的实现和上文介绍的不完全连接类似:

这里直接放脚本:

tcp_scan1.py:

这里简化下脚本,我明确知道要扫描的ip和端口:

#!/usr/bin/python
import logging

logging.getlogger("scapy.runtime").setlevel(logging.error)
from scapy.all import *

response = sr1(ip(dst="192.168.22.129") / tcp(dport=80, flags="s"))
reply = sr1(ip(dst="192.168.22.129") / tcp(dport=80, flags="a", ack=(response[tcp].seq + 1)))

写好之后直接执行即可:

 

我们可以抓包来看:

这里前两个包正常发送接收,第三个rst包是linux内核自动发送的rst,要中断连接

第四个包:强行发送ack建立连接,最后一个包直接回rst因为要拒绝"莫名其妙"的连接

 

于是我们可以发现:这里并不是正确的一个三次握手的过程,因为操作系统内核的自动中断连

 

接下来,修改得到一个相对完善的脚本:

tcp_scan2.py:

 

#!/usr/bin/python
import logging

logging.getlogger("scapy.runtime").setlevel(logging.error)
from scapy.all import *

syn = sr1(ip(dst="192.168.22.129") / tcp(dport=80, flags="s"))

print("- -sent- -")
syn.display()

print("\n\n- -receive- -")
response = sr1(syn, timeout=1, verbose=0)
response.display()

if int(response[tcp].flags) == 18:
    print("\n\n- -sent- -")
    a = sr1(ip(dst="192.168.22.129") / tcp(dport=80, flags="a", ack=(response[tcp].seq + 1)))
    a.display()
    print("\n\n- -receive- -")
    response2 = sr1(a, timeout=1, verbose=0)
    response2.display()
else:
    print("syn-ack not returned")

 至于这里的flags==18在上文中已经说过

 

如果脚本是从windows移过来的:

vi tcp_scan2.py

:set fileformat=unix

:wq

chmod u+x tcp_scan2.py

./tcp_scan2.py

 

运行抓包发现还是存在着上边提到的问题而无法建立连接:

linux操作系统内核自动回复的rst包中断连接

 

那么有没有方法能解决呢?

有的,直接配置iptables:对于特点ip禁用出口rst

 

这时候执行发现建立了三次握手

 

我们发现拐了这么多弯才能够实现一个全连接扫描

有没有简单点的方式呢?有的,使用强大的nmap:

-st参数

直接输入ip效果是扫描1000个默认端口

指定范围端口也可以:

 

可以发现,速度是非常的快的,结果也比较完善

 

除了强大的nmap,还有一些其他的工具,比如:

 

这个工具只能实现一些功能,相比于nmap,优劣显而易见

 

还有一个小工具,也可以了解下:

 

还有一种奇妙的方式:僵尸扫描,不过很复杂,在下一篇专门介绍

端口扫描就介绍到这里,扫描完端口,接下来就是针对端口的服务扫描,将在后边介绍

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网