scapy实现tcp三次握手并发送http请求

scapy实现tcp三次握手并发送http请求,第1张

scapy实现tcp三次握手并发送http请求

事先说明:要有一定的scapy基础,我做的是tcp三次握手,然后构造数据,没有tcp四次挥手,若你有兴趣也可以搞一下,原理都是那么回事儿,主要是讲一下scapy使用时的各种坑

from scapy.all import *

dst_ip = "192.168.1.1"
dst_port = 80
src_port = 20001
data = "GET GET / HTTP/1.0/nihao rnrn"
##数据是我随意构造的,一个随便的http请求
try:
    spk1 = IP(dst=dst_ip)/TCP(dport=dst_port,sport=src_port,flags="S")
    res1 = sr1(spk1)
    ack1 = res1[TCP].ack
    ack2 = res1[TCP].seq + 1
    spk2 = IP(dst=dst_ip)/TCP(dport=dst_port,sport=src_port,seq=ack1,ack=ack2,falgs="A")
    send(spk2)
except Exception as e:
    print(e)
da1 = IP(dst=dst_ip)/TCP(dport=dst_port,sport=src_port,seq=ack1,ack=ack2,flags=24)/data
res2 = sr1(da1)


这个就是py代码的抓包分析,用wireshark抓包过滤一下,过滤条件也贴出来了,自己写上码即可;然后分析数据包就可以看到自己对数据包的修改
虚拟机,IP:192.168.1.16
http服务器:192.168.1.1:80

三次握手的本质

其实三次握手本质上就是,(你把那个确认号,和验证号看成一个一个数据包去理解)
你给他发第一个包,里面有个验证包seq=X,用于第二个包的确认
他给你回第二个包,里面包含一个确认包,它是第一个包的验证包+1,即就是ack=seq+1=X+1;里面还有一个验证包seq=Y,用于第三个包的确认;
你给他回第三个包,这里面包含一个确认包,它是第二个包的验证包+1,即就是ack=seq+1=Y+1;第三个包还包含一个验证包,这个验证包是第二个确认包,即就是seq=X+1;
握完手后,由你先给他发第一个数据包,需要照搬第三个包的确认号和验证号,同时flags设值为24,后面跟数据即可

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5720116.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存