怎么获取局域网内所有电脑的MAC地址
相关话题
为方便局域网管理,以及预防病毒攻击,我们经常会需要制作局域网设备MAC地址表来比对、核查。今天,小编就给大家介绍一下利用DOS命令来实现局域网所有电脑MAC地址获取的方法。
获取局域网内所有电脑的MAC地址的方法
一、所涉及DOS命令讲解
1set ip=192.168.1
set为设置环境变量命令。
该命令将IP设置为值为“192.168.1"的参数,其中“192.168.1"为局域网网段,请根据局域网实际值修改。

2for /l %j in (1,1,10) do echo %i
for命令是DOS命令中一个功能十分强大的命令,在这里用到/L参数,功能是以一个增量数字集进行循环(start,step,end),即变量j初值start为1,每循环一次加增量step1,直到大于end10停止循环,每次循环执行do后面的命令。
该命令功能对变量进行每次加1,并用echo命令显示在屏幕上。

3ping 192.168.1.1 -n 1 -w 1000
ping命令主要用于测试IP的连通性,-n 表示每一次ping过程发送的数据包数,-w表示每个数据包发出后等待回执的时间阀值。该命令表示对192.168.1.1的电脑进行ping测试,发1个包,回执时间超过1秒视为超时不通。如果IP地址能ping通,程序能够从应答数据包中获取该IP设备的mac地址,并存放到内存arp地址表中。

4arp -a 192.168.1.18
arp命令主要用于显示或修改arp地址表。-a表示显示某个或全部arp地址表。该命令表示显示IP为192.168.1.18设备的mac。

5echo ssss|findstr dynamic
findstr查找字符串命令,一般用于从文件中查找含个某个字符的行,这里用到“|”(管道符),即把上一个命令的输出作为下一个命令的输入。该命令表示在命令“echo ssss”输出结果中查找含有“dynamic”字符串的行。

二、具体方法
方法1:
set ip=192.168.1 && for /l %j in (1,1,254) do (ping %ip%.%j -n 1 -w 1000 ) && arp -a>1.txt


该方法适合在小IP地址范围内获取mac地址,因为如果范围过大,ping命令执行的时间会比较长,会造成早前arp地址表中获取的mac超时失效,从而无法获取局域网内完整的mac地址表。如下图,分别是上属命令运行过程中的arp表内容,前、后表对比,很容易看出,部分mac地址已经丢失,而且还存在为全0的非真MAC地址。

方法2:
set ip=192.168.1 && for /l %j in (1,1,254) do ( ping %ip%.%j -n 1 -w 1000 |arp -a %ip%.%j |findstr dynamic >>2.txt )


相对方法1,该方法应该是比较完美的。在ping执行后,即时将获取的真实mac地址保存了下来。

END