type
status
date
slug
summary
tags
category
icon
password
socket,scapy各种扫描
本机配置
用于之后扫描开启和未开启的端口测试
本机ip:127.0.0.1 172.16.110.155 内网其他ip:172.16.110.48 仅开80

socket TCP全连接扫描
常规流程,
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)建立套接字,使用IPV4地址组,TCP协议,sock.connect((target, port))绑定ip和端口建立连接,进行遍历
scapy TCP全连接扫描
扫48远程ip的时候,open的端口可以扫描出来,但是close的端口命令行会卡住一直不出结果。原因未知。
解释代码(GPT):
如果
send[TCP].flags 的值为 "SA",那么端口状态被视为 "SYN-ACK",这意味着目标端口对SYN请求做出了响应,表示端口开放。而如果 send[TCP].flags 的值为 "RA",则端口状态被视为 "RST-ACK",这表示目标端口对SYN请求做出了RST响应,通常表示端口关闭。"SA" 表示的是建立连接的标志,而 "RA" 表示的是重置连接的标志。当你向一个开放的端口发送SYN请求时,目标主机会响应SYN-ACK,表示愿意建立连接。而当你向一个关闭的端口发送SYN请求时,目标主机会响应RST-ACK,表示拒绝连接请求。
send = sr1(IP(dst=target) / TCP(dport=port, flags="S", ), timeout=1, verbose=0)这一句代码是用于发送一个SYN包(SYN标志位被设置为1,表示建立连接请求)到指定的目标主机和端口,以尝试建立一个TCP连接。各个部分的解释:
send = sr1(...): 这行代码使用Scapy的sr1函数来发送一个网络包并等待响应。send变量用于存储响应包,如果没有响应则为None。
IP(dst=target): 构建了一个IP数据包,其中dst=target指定了目标IP地址。
TCP(dport=port, flags="S"): 构建了一个TCP数据包,其中dport=port指定了目标端口,而flags="S"表示设置TCP包的SYN标志位为1,以表示建立连接请求。
timeout=1: 指定等待响应的最长时间,表示等待1秒钟来获取响应。
verbose=0: 用于控制输出的详细程度。在这里,设置为0表示禁用详细输出。
所以,这一行代码的作用是向目标主机的特定端口发送一个SYN包,然后等待1秒钟以获取响应。如果目标主机响应了这个SYN包,
send变量将存储响应,你可以通过检查响应中的TCP标志位来确定端口状态。如果没有响应,send变量将为None。目标主机不可达,防火墙或者网络过滤或者超时(timeout)时
send变量将为None。
三次握手:
①客户端发起请求,包含标头S(SYN)
②若开启则服务端返回SA(syn+ack),此时客户端需要主动终止连接发送R标头(RST)
③若端口关闭必然回复R(rst)
scapy SYN扫描
俩个脚本:
其余扫描
直接提供俩个脚本化的脚本,再配合nmap一起看吧。
针对同一组端口扫描,某些扫描方式可能三个都没有一个扫完能判断正确的。稳一点的就是tcp和syn,正确率比较高,其他的一言难尽。魔幻,针对一组端口,俩个脚本+nmap用同一种扫描,扫描完三个结果。