AttributeError: у объекта 'NoneType' нет атрибута 'split' Ошибка - PullRequest
0 голосов
/ 20 апреля 2020

Я запускаю этот код в поиске arp-запроса и эфира. Когда я запускаю это, мне выдается сообщение

 Traceback (most recent call last):
  File "network_scanner.py", line 16, in <module>
    scan('10.0.2.1/24')
  File "network_scanner.py", line 8, in scan
    arp_request.show()
  File "/usr/local/lib/python2.7/dist-packages/scapy-2.4.3- 
   py2.7.egg/scapy/packet.py", line 1261, in show
    return self._show_or_dump(dump, indent, lvl, label_lvl)
  File "/usr/local/lib/python2.7/dist-packages/scapy-2.4.3- 
   py2.7.egg/scapy/packet.py", line 1235, in _show_or_dump
    reprval = f.i2repr(self, fvalue)
  File "/usr/local/lib/python2.7/dist-packages/scapy-2.4.3- 
   py2.7.egg/scapy/fields.py", line 376, in i2repr
    return fld.i2repr(pkt, val)
  File "/usr/local/lib/python2.7/dist-packages/scapy-2.4.3- 
   py2.7.egg/scapy/fields.py", line 502, in i2repr
    x = self.i2h(pkt, x)
  File "/usr/local/lib/python2.7/dist-packages/scapy-2.4.3- 
   py2.7.egg/scapy/layers/l2.py", line 136, in i2h
    iff = self.getif(pkt)
  File "/usr/local/lib/python2.7/dist-packages/scapy-2.4.3- 
   py2.7.egg/scapy/layers/l2.py", line 132, in <lambda>
    self.getif = (lambda pkt: pkt.route()[0]) if getif is None else getif
  File "/usr/local/lib/python2.7/dist-packages/scapy-2.4.3- 
   py2.7.egg/scapy/layers/l2.py", line 400, in route
    fld, dst = fld._find_fld_pkt_val(self, dst)
  File "/usr/local/lib/python2.7/dist-packages/scapy-2.4.3- 
   py2.7.egg/scapy/fields.py", line 313, in _find_fld_pkt_val
    if val == dflts_pkt[self.name] and self.name not in pkt.fields:
  File "/usr/local/lib/python2.7/dist-packages/scapy-2.4.3- 
   py2.7.egg/scapy/base_classes.py", line 133, in __eq__
    p2, nm2 = self._parse_net(other)
  File "/usr/local/lib/python2.7/dist-packages/scapy-2.4.3- 
   py2.7.egg/scapy/base_classes.py", line 99, in _parse_net
    tmp = net.split('/') + ["32"]
    AttributeError: 'NoneType' object has no attribute 'split'

Я что-то не так скачал или есть опечатка? Легко ли это исправить? Я очень новичок в подобных вещах и хочу расширить свои знания. Код, который я использую, ниже

#!/usr/bin/env python

import scapy.all as scapy

def scan(ip):
    arp_request = scapy.ARP(pdst=ip)
    arp_request.show()
    broadcast = scapy.Ether(dst='ff:ff:ff:ff:ff:ff')
    broadcast.show()
    arp_request_broadcast = broadcast/arp_request
    print(arp_request_broadcast.summary())
    arp_request_broadcast.show()

scan('10.0.2.1/24')

Любой, кто может дать мне простой ответ, будет признателен, так как я не язвительный волшебник. Спасибо

1 Ответ

1 голос
/ 21 апреля 2020

Вы можете использовать .show() и .summary() для отдельных пакетов, а не для группы пакетов. 10.0.2.1/24 - это su bnet из 256 адресов, поэтому, когда вы передаете его в ARP, он создает 256 пакетов ARP.

import scapy.all as scapy

def scan(ip):
    arp_requests = scapy.ARP(pdst=ip)
    for req in arp_requests:
        req.show()
    broadcast = scapy.Ether(dst='ff:ff:ff:ff:ff:ff')
    broadcast.show()
    arp_request_broadcast = broadcast/arp_requests
    arp_request_broadcast.summary() 
    for req in arp_request_broadcast:
        req.show()

scan('10.0.2.1/24')

Ваш код не выдаст ошибку, если вы выполните итерацию по всем пакеты здесь.

Вывод будет выглядеть следующим образом (показан только последний пакет каждого для -l oop):

...<truncated>
###[ ARP ]###
  hwtype= 0x1
  ptype= IPv4
  hwlen= None
  plen= None
  op= who-has
  hwsrc= 6c:96:cf:d8:7f:e7
  psrc= 192.168.1.246
  hwdst= 00:00:00:00:00:00
  pdst= 10.0.2.255

...<truncated>
###[ Ethernet ]###
  dst= ff:ff:ff:ff:ff:ff
  src= 6c:96:cf:d8:7f:e7
  type= ARP
###[ ARP ]###
     hwtype= 0x1
     ptype= IPv4
     hwlen= None
     plen= None
     op= who-has
     hwsrc= 6c:96:cf:d8:7f:e7
     psrc= 192.168.1.246
     hwdst= 00:00:00:00:00:00
     pdst= 10.0.2.255
...