一,TCP协议简介
TCP(Tranmission Control Protocal,传输控制协议)是一种面向连接的,可靠的,基于字节流的传输层控制协议。其特点是使用三次握手协议建立连接,当主动方发起SYN连接请求后,等待对方回答TCP的三次握手“SYN+ACK”,并最终对对方的SYN执行ACK进行确定。这种简历连接的方式可以防止错误的连接。
TCP三次握手过程如下:
第一步:客户机发送SYN(SEQ=x)数据包给服务器,进入SYN_SEND状态;
第二步:服务器收到SYN数据包,回应一个SYN(SEQ=y)ACK(ACK=x+1)数据包,进入SYN_RECV状态;
第三步:客户机收到服务器的SYN数据包,回应一个ACK(ACK=y+1)数据包,进入Established状态。三次握手完成,客户机和服务器成功建立连接,就可以开始传输数据。
二,程序执行流程
第一步:发送SYN数据包到达目标主机的80端口
第二步:
1,目标主机端口关闭情况下,会返回一个RST数据包,说明目标主机活跃。
2,目标主机端口开放情况下,会返回SYN+ACK数据包,说明目标主机活跃,且80端口处于开放状态。
3,目标主机关机情况下,不会收到任何回应。
三,程序编写
查看TCP数据包参数信息:
其中需要注意到的参数有sport,dport和flag。sport是源端口,dport是目的端口。而flags是标志位,可能的值包括SYN(建立连接),FIN(关闭连接),ACK(响应),PSH(有Data数据传输),RST(连接重置)。这里将flags设为“s”,表示SYN。
程序代码如下:
from scapy.all import sr,IP,TCP
targetIP = "192.168.5.2"
targetPort = 80
ans,unans = sr(IP(dst=targetIP)/TCP(dport=targetPort,flags="S"),timeout=2)
for s,r in ans:
print(r.sprintf("%IP.src% is alive"))
执行结果如下:



