栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

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

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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,后面跟数据即可

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/724569.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号