所以我使用scapy与linux,以便在我成功开始3路TCP握手后向服务器发送IPv6 HTTP请求。
如果没有扩展标头(我正在使用ipv6),http请求会成功返回,但是如果有,那么我没有得到任何响应。我怀疑服务器丢弃数据包,因为我将它发送到世界顶级服务器(前1000个支持ipv6的服务器)作为我的论文的一部分,以便看到它们的兼容性。这可能是一个配置错误。
格式为atm:
我创建了一个IPv6数据包/ IPv6ExtHdrRouting()。
长话短说我使用了所有4个可用的扩展标题,我得不到回复,如果我使用没有我得到完整的回复。为什么我的数据包丢失了?
发送的所有数据包都没有任何参数。如果这是问题,您可以向我展示每个扩展标头的示例初始化,以便获得响应吗?
修改:
我的代码非常复杂,在运行所有程序之后,我做了类似的事情:
网站[: - 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)