找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 27025|回复: 9

[网络连接] [已解决]批处理如何根据MAC查找局域网内网卡在线情况?

[复制链接]
发表于 2013-2-17 20:15:30 | 显示全部楼层 |阅读模式
本帖最后由 mxxcgzxxx 于 2013-2-19 18:39 编辑

使用什么命令行命令可以通过MAC地址定向查找局域网内的网卡是否在线
第三方软件如果能做到也行,

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2013-2-18 03:33:29 | 显示全部楼层
本帖最后由 group 于 2013-2-18 03:34 编辑
  1. @echo off
  2. (for /l %%a in (0 1 255) do start /b ping /n 1 192.168.0.%%a)
  3. arp -a|find /i "网卡地址"
  4. pause
复制代码
 楼主| 发表于 2013-2-18 13:52:48 | 显示全部楼层
本帖最后由 mxxcgzxxx 于 2013-2-18 13:54 编辑

这个我想过,但太耗时了,从1到255,ping完就花了很长时间了,如果要反复拼一直到拼通为止,来检测对方是否开机,那不知要多少时间。有没有办法不走IP路线,只单一侦查MAC是否在线的办法
或者可以跳过不在线的IP,也可以省不少时间
发表于 2013-2-18 23:07:11 | 显示全部楼层
回复 3# mxxcgzxxx


    2楼代码花了多长时间?
发表于 2013-2-19 03:07:53 | 显示全部楼层
回复 3# mxxcgzxxx


    网络上,我们知道的只是一个相对的门牌号(ip),要知道门里面主人的名字(mac)只能先逐户敲开问一问,所以查某个门牌号是很容易的,查某人住哪家是很麻烦的
 楼主| 发表于 2013-2-19 15:46:46 | 显示全部楼层
回复 4# BAT-VBS
在网内只有两个有效IP的情况下检索一遍要近19分钟,如果有效在线IP越多时间就越少,问题在于如果IP是自分配而在线机数量又不明的情况下时间就长短不一了。
尝试了一下,就以我的机子来说
不在线的平均时间为:4.42~4.5秒/次 255次约要18分钟
在线的时间为:0.08~0.17秒/次 255次约要30秒
所以差别还是很大的。

回复 5# group
如你所说
另一种方案就只有规定时间了,在规定时间内强行关闭命令执行下一步,在关闭前PING通的则有返回值,按我的机子也就是说在0.2秒后关闭,总时间就可以减缩到51秒左右
 楼主| 发表于 2013-2-19 18:38:38 | 显示全部楼层
本帖最后由 mxxcgzxxx 于 2013-2-19 18:41 编辑

绕了那么多弯弯才发现原来PING命令的-w参数就可以完美解决了

  1. for /l %%a in (0,1,254) do ( ping -n 1 -w 1 10.150.10.%%a ) >nul
  2. arp -a|find /i "网卡地址"
复制代码
PING完花了2分钟,如果中途判断就可以更省时了
 楼主| 发表于 2013-2-19 21:07:29 | 显示全部楼层
本帖最后由 mxxcgzxxx 于 2013-2-19 21:38 编辑

发现不可以使用arp命令,如果在线时检过了,对方关机后arp中数据依然存在,所以没有检测对方是否在线的意义
但用nbtstat加findstr在循环中太慢,权衡了一下调整如下

  1. @ECHO OFF
  2. set "ip=10.150.10."
  3. set "mac=00-E0-4C-89-A5-AF"
  4. set n=0
  5. :1
  6. ping -n 1 -w 1 %ip%%n% >nul || goto :2
  7. nbtstat -a 10.150.10.%n% | findstr " %mac% " >nul || goto :2
  8. goto :3

  9. :2
  10. set /a n+=1
  11. if %n%==255 echo 不在线 &pause &goto :eof
  12. goto :1

  13. :3
  14. ::获取信息
  15. for /f "tokens=1,2,3 delims== " %%1 in ('nbtstat -a %ip%%n% ^| findstr " <00> "') do (
  16.         if "%%3"=="UNIQUE" set "m=%%1"
  17.         if "%%3"=="GROUP" set "g=%%1"
  18.         )
  19. echo IP              计算机名          工作组
  20. echo %ip%%n%  %m%    %g%
  21. PAUSE
复制代码
实测网内只存在2个有效IP情况下
对方在101 时时间1分钟左右
对方在251时时间2分半左右
需要注意的是:
arp使用的是小写MAC
nbtstat使用的是大写MAC
发表于 2013-2-19 22:19:26 | 显示全部楼层
回复 8# mxxcgzxxx


    arp -d可以删除原有记忆,这样就不容易受干扰了
 楼主| 发表于 2013-2-20 13:34:50 | 显示全部楼层
回复 9# group
学习了多谢指导
确实nbtstat虽然返回数据多些,但实测中发现如果对方是无线接入又无用计算机名称的情况下(手机最常见)会检测不到
而arp则可以,因为它只要两个关键数据IP和MAC就行
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 01:34 , Processed in 0.019557 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表