记录在B站学习的知识
利用TCP原理,通过编写python脚本,来检测某个主机的端口开放情况,下面介绍两种扫描,SYN扫描和FIN扫描
实验环境
- ubuntu虚拟机
- pycharm
准备工作
-
了解 SYN扫描原理
扫描器向目标主机的一个端口发送请求连接的SYN包,扫描器在收到SYN/ACK后,不是发送ACK应答,而是发送RST包请求断开连接。
端口开放:
1、Client 发送SYN
2、Server 发送SYN/ACK
3、Client 发送RST断开(只需要前两步就能判断端口是否开放)
端口关闭:
1、Client 发送SYN
2、Server 回复RST/ACK(表示端口关闭)优点:SYN扫描要比TCP Connect()扫描隐蔽一些
-
了解 FIN扫描原理
FIN为指示TCP会话结束,在FIN扫描中一个设置了FIN位的数据包被发送后,若响应RST/ACK数据包,则表示端口关闭,没有响应则表示开放。
端口开放:
1、Client 发送FIN
2、Server 没有响应
端口关闭:
1、Client 发送FIN
2、Server 回复RST/ACK这个扫描可以判断被扫描的系统是不是Windows系统
代码展示
from scapy.layers.inet import IP,TCP
from scapy.sendrecv import sr
# SYN扫描
def syn_scan(target_ip,start_port,end_port):
temp = sr(IP(dst=target_ip)/TCP(dport=(int(start_port),int(end_port)),flags='S'),timeout=3,verbose=False)
result = temp[