记录在B站学习到的知识:
利用ARP原理,通过编写python脚本,来发现局域网内存活的主机的IP和对应的MAC地址
实验环境
- ubuntu 虚拟机
- pycharm
准备工作
- 了解ARP原理
ARP(Address Resolution Protocol),地址解析协议,是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回信息,以此确定目标的物理地址,收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。(百度百科) - 安装scapy模块
scapy是python写的一个功能强大的交互式数据包处理程序,可以在自己的程序中使用这个模块来实现对网络数据包的发送、监听和解析。
在终端用 pip/pip3 install scapy 进行安装
代码展示
import os
import re
from scapy.layers.l2 import Ether,ARP
from scapy.sendrecv import srp
pattern='\w\w:\w\w:\w\w:\w\w:\w\w:\w\w' # \w匹配字母或数字或下划线或汉字 等价于 '[^A-Za-z0-9_]'。
UNKNOWN_MAC='ff:ff:ff:ff:ff:ff'
def get_mac_address(network):
temp = os.popen('ifconfig '+network) #ifconfig后面要有空格,其实相当于在执行命令 ifconfig ens33
result=temp.readlines()
for item in result:
condition=re.search<