如何正确接收ARP协议的响应

问题描述 投票:0回答:0

我想制作一个小脚本来监视本地网络中是否存在设备。 我正在使用

ARP protocol
request and response
,这是我的代码:

import time
import scapy.all as scapy
import argparse
import pandas as pd


def get_arguments():
    parser = argparse.ArgumentParser()
    parser.add_argument('--target', '-t', dest='target', help='Target IP / IP range.')
    option = parser.parse_args()
    return option


def scan(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=3, verbose=False)[0]

    clients_list = []
    for element in answered_list:
        clients_dict = {'ip': element[1].psrc, 'mac': element[1].hwsrc}
        clients_list.append(clients_dict)
    return clients_list


opt = get_arguments()
temp_df = pd.DataFrame(scan(opt.target))
while True:
    time.sleep(3)
    scan_result = pd.DataFrame(scan(opt.target))
    print(scan_result)

原则上一切正常,但我认为有一个大问题。不知何故,我得到的答案是网络上连接的设备比现实中少。看图片。

如您所见,第一个

two answers
向我展示了正在发生的事情的真实情况,即我看到了所有
six devices
(在
red
中突出显示),但是由于某种原因,我发生了一个完全未知的情况是
more or less devices
,某种随机答案。

请问,这个问题是

ARP protocol
的特性引起的吗?或者有一些
error in the code

你介意告诉我如何改进这段代码或做一些不同的事情吗?

非常感谢!

python python-3.x scapy arp
© www.soinside.com 2019 - 2024. All rights reserved.