我想制作一个小脚本来监视本地网络中是否存在设备。 我正在使用
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
?
你介意告诉我如何改进这段代码或做一些不同的事情吗?
非常感谢!