Как реализовать ARP-пинг с помощью Scapy? - PullRequest
0 голосов
/ 21 сентября 2019

Я пытался создать сетевой сканер, похожий на netdiscover.Я использовал Python и модуль Scapy для этого.Я запускаю свой скрипт на Kali Linux на виртуальной коробке, и когда я сканирую свою сеть NAT, созданную Virtual Box, он показывает устройства, которые подключены, но когда я использую беспроводной адаптер для сканирования своей сети Wi-Fi, сканер не можетнайти любые устройства, что странно, потому что netdiscover находит их тонны.Однако, когда я использую функцию arping, реализованную Scapy, устройства также отображаются, но когда я запускаю свой код, он не обнаруживает никаких устройств.Почему это так?

Я использовал код, предложенный в документации Scapy, и он все еще не показывает никаких устройств.Только функция Scapy arping обнаруживает любые устройства вообще

import scapy.all as scapy
import subprocess as sub
import re

def get_IP():
    output=sub.check_output("route -n",shell=True)
    ips={}
    for row in output.split("\n")[2:]:
        found=re.findall("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}",row)
        device=re.findall("[a-z]{2,10}\d$",row)

        for ip in found:
            if ("0.0.0" not in ip and "255.255.255" not in ip):
                ips[device[0]]=ip
    for device,ip in ips.items():
        print("Device: {}\tIP: {}".format(device,ip))

    device = raw_input("Choose a device > ")
    return(ips[device][:-1]+"1/24")

def scan(ip):
    #My code
    print("Scanning...")
    arp_request=scapy.ARP(pdst=ip)
    brodcast=scapy.Ether(dst="ff:ff:ff:ff:ff:ff")
    arp=brodcast/arp_request
    answered=scapy.srp(arp, timeout=1,verbose=False)[0]
    for element in answered:
        print("IP:{}".format(element[1].psrc))
        print("MAC address: {}\n".format(element[1].hwsrc))
def scan2(ip):
    #Code from scapy documentation and it's also not detecting any devices
    ans, unans = scapy.srp(scapy.Ether(dst="ff:ff:ff:ff:ff:ff")/scapy.ARP(pdst=ip),timeout=2)
    ans.summary(lambda (s,r): r.sprintf("%Ether.src% %ARP.psrc%") )
def scan3(ip):
    #This works
    scapy.arping(ip)

ip = get_IP()

scan(ip)
scan2(ip)
scan3(ip)

1 Ответ

0 голосов
/ 24 сентября 2019

Я решил это, просто отключив соединение с сетью NAT, поэтому я использовал ifconfig eth0 down.Однако в некоторых случаях это не проблема.Если ваш маршрутизатор не разрешает сканирование по сети, вам нужно изменить свой MAC-адрес, что означает, что вам нужно выполнить серию этих команд

ifconfig wlan0 down
ifconfig wlan0 hw ether 00:22:44:66:88:33 # Ofcourse you can choose any MAC address you want
ifconfig wlan0 down
ifconfig wlan0 up
service network-manager restart

После этого сетевой сканер обнаружит устройства, которые в данный момент подключены.сеть

...