所以我在 linux 上使用 scapy,以便在我成功开始 3 路 TCP 握手后向服务器发送 IPv6 HTTP 请求。
如果没有扩展标头(我正在使用 ipv6 执行此操作),则 http 请求成功返回,但如果有,则我没有得到任何响应。我怀疑服务器会丢弃数据包,因为我将它发送到世界顶级服务器(启用 ipv6 的前 1000 台服务器)作为我论文的一部分,以查看它们的兼容性。这可能是配置错误。
atm 格式为:
我创建了一个 IPv6 数据包/IPv6ExtHdrRouting()。
长话短说,我使用了所有 4 个可用的扩展标头,但我没有收到任何回复,如果我不使用,我会收到完整的回复。为什么我的数据包会被丢弃?
所有的数据包都是在没有任何参数的情况下发送的。如果这是问题所在,您能否向我展示每个扩展标头的示例初始化以便获得响应?
编辑:
我的代码非常复杂,毕竟运行了所有程序但是我做了这样的事情:
site[:-1] 是一个网站,即 www.google.com
ip 是带有扩展标头的 ipv6 地址。
如您所见,3 次握手没有扩展标头,当我执行 HTTP 请求时,我使用带有扩展标头的 IP。
带有扩展头的 ip 看起来像这样(没有较低级别的详细信息,例如 TCP 等):
IPv6(dst=...)/IPv6ExtHdrHopByHop()
or
IPv6(dst=...)/IPv6ExtHdrHopByHop()/IPv6ExtHdrFragment()
destination=getIPv6Addr(site[:-1])
ip.dst=destination
syn = IPv6(dst=getIPv6Addr(site[:-1]))/TCP(sport=12345,dport=80, flags='S', seq=1000)#flag S is syn packet
syn_ack_rcv = sr1(syn,timeout=1)
my_ack = syn_ack_rcv.seq + 1
ack=IPv6(dst=getIPv6Addr(site[:-1]))/TCP(sport=12345,dport=80, flags='A', seq=1001, ack=my_ack)#flag S is syn packet
send(ack)
httpRequest = 'GET / HTTP/1.1\r\nHost:' +site[:-1] +"\r\n\r\n"
http=ip/TCP(sport=11235,dport=80,seq=1002, ack=my_ack)/httpRequest
answers = sr1(http,timeout=1)