我是一个初学者,但我正在尝试制作一个网络扫描实用程序,该程序可以过滤特定需求的MAC地址;我工作的公司有网络连接的设备,这些设备根据序列号分配了MAC地址。我发现MAC地址的前6位数字是我们品牌的标志。我在下面做了一个str。 MAC地址的第4个字段是一小段常量,用于指示设备的型号。我已经准备好这些,但实际上是一些数字,例如“ 14”,“ 17”等。
我正在努力寻找一种方法,以“过滤”从扫描中检索出的MAC地址,并根据地址的字段对其进行标记。甚至更好的是,仅打印与startswith(mac_key)匹配的IP和Mac地址,并根据其MAC地址的第4个字段[9:11]标记其余对象。
[通过大量的阅读和帮助,到目前为止,我已经掌握了这一点:
#!/usr/bin/env python from scapy.all import ARP, Ether, srp import socket # importing main functions from Scapy and Socket mac_key = '04:24:2f' # Target value for first three fields of MAC address hostname = socket.gethostname() IPAddr = socket.gethostbyname(hostname) target_ip = ("192.168.{}.0/24".format(IPAddr[6])) # Assigning index value for third section of IP address # To make third section of target_ip a variable determined by host # "/24" denotes IP address spectrum for the ARP packet destination arp = ARP (pdst=target_ip) # Creating ARP packet assigned to "target_ip" ether = Ether(dst="ff:ff:ff:ff:ff:ff") # Creating Ether broadcast packet # ff:ff:ff:ff:ff:ff MAC address indicates broadcasting packet = ether/arp # Stacking result = srp(packet, timeout=5, verbose=3)[0] # Defining result with timeout parameter clients= [] # Client list to be finished below for sent, received in result: clients.append({'ip': received.psrc, 'mac': received.hwsrc}) # For each response, append ip and mac address to 'clients' list print("Devices On This Network:") print("IP" + " "*18+"MAC") # Print table of accumulated data for client in clients: print("{:24} {}".format(client['ip'], client['mac'].startswith(mac_key))) # Printing IP addresses and assosciated MACs from clients list # With bool checking against mac_key
下图是终端中的结果;想法是只打印显示TRUE值的行,并根据MAC地址的字段[9:11]添加标签,例如:出现TRUE bool的“ Network Device Pro”,并完全忽略该行, FALSE bool被触发。
我是一个初学者,但我正在尝试制作一个网络扫描实用程序,该程序可以过滤特定需求的MAC地址;我工作的公司的网络连接设备分配了MAC ...
使用Scapy内置函数比重写它们更有意义。在这种情况下,请使用arping
。为了节省时间(如此处),请阅读the manual。