中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [原创]通过内网主机IP或主机名求MAC
作者:
标题: [原创]通过内网主机IP或主机名求MAC 上一主题 | 下一主题
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『楼 主』:  [原创]通过内网主机IP或主机名求MAC

无聊之际,发个东西出来玩玩,有个小软件叫远程开机,那个小软件不仅可以实现通过输入的IP来获取对应主机的MAC地址,而且还可以通过MAC来远程开机。

至于如何使用MAC来远程开机,我想使用批出来很难实现(能实现的跟贴),但是如何根据IP或主机名求出对方的MAC则可以通过下面的代码实现:
@ECHO OFF
REM 通过IP或主机名来查询局域网主机的MAC地址
REM 本程序由小不点(秋语)制作,QQ:9399100
:G
CLS
SET /P IP=请你输入要查询的主机名称或其IP:
PING %IP% -n 1|FIND /I "could not"
IF "%ERRORLEVEL%"=="0" GOTO :G
FOR /F "TOKENS=2 DELIMS=[]" %%A IN ('PING %IP% -n 1^|FIND /I "["') DO SET IP=%%A
FOR /F "TOKENS=1-10" %%I IN ('ARP -A^|FIND "%IP%"') DO SET MAC=%%J
ECHO 你要查询主机%IP%的MAC是:%MAC%
PAUSE


2007-2-2 00:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『第 2 楼』:  

再修改下代码,修正不能获取本机MAC的错误,增加获取所有或指定IP段的MAC功能,再增加了MAC-IP绑定和解除绑定的功能。

另外由于获取所有的MAC比较慢,我开始使用PING命令发现慢的出奇怪,最后改为TRACERT命令速度快了一倍,但是扫描整个还是要1分种左右,如果有更好的方法希望跟贴
@ECHO OFF
REM MAC扫描和绑定工具V1.0
REM 修正不能查本机的MAC问题(特殊处理);修正绑定或解除绑定后找不到MAC问题(首加ARP -A);
REM 修正不能获取路由器或猫的MAC问题(FIND精确查找时加如其他识别符号或使用ARP -A IP);
REM 增加IP绑定MAC功能以防止ARP欺骗;增加IP解除MAC绑定功能以临时消除ARP欺骗
REM 本程序由小布点(秋语)制作,欢迎交流 QQ:9399100

TITLE MAC扫描和绑定工具V1.0
FOR /F "TOKENS=15" %%I IN ('IPCONFIG /ALL^|FIND /I "IP Address"') DO SET LIP=%%I
:G
CLS
ARP -A >NUL
SET IP=
SET MAC=
SET /P IP=请你输入要查询的主机名称或其IP(本机直接回车,所有输入ALL):
IF NOT DEFINED IP GOTO :LIP
IF "%IP%"=="%LIP%" GOTO :LIP
IF "%IP%"=="ALL" GOTO :ALLIP
PING %IP% -n 1 >NUL
REM FOR /F "TOKENS=2" %%I IN ('ARP -A^|FIND "%IP% "') DO SET MAC=%%I
FOR /F "TOKENS=2" %%I IN ('ARP -A %IP% ^|FIND "%IP% "') DO SET MAC=%%I
IF NOT DEFINED MAC GOTO :G
GOTO :IPOK

:LIP
SET IP=%LIP%
FOR /F "TOKENS=12" %%I IN ('IPCONFIG /ALL^|FIND /I "Physical Address"') DO SET MAC=%%I
GOTO :IPOK

:ALLIP
CLS
SET STARTIP=
SET ENDIP=
ECHO 查询所有主机的MAC将花费很长时间,你可以设置一个开始段和结束段.
SET /P STARTIP=请你输入扫描的IP开始段(最小为0,最大为254,默认为0):
IF NOT DEFINED STARTIP SET STARTIP=0
SET /P ENDIP=请你输入扫描的IP结束段(最小为0,最大为254,默认为254):
IF NOT DEFINED ENDIP SET ENDIP=254
CLS
FOR /F "TOKENS=1-4 DELIMS=." %%A IN ("%LIP%") DO SET DOMAIN=%%A.%%B.%%C
ECHO 将扫描:%DOMAIN%.%STARTIP%-%DOMAIN%.%ENDIP%所有主机的MAC,请等待.....
FOR /L %%I IN (%STARTIP%,1,%ENDIP%) DO TRACERT -h 1 -w 1 %DOMAIN%.%%I >NUL
GOTO :IPOK

:IPOK
CLS
ECHO ------------------------------------------------------
ECHO 你要查询主机%IP%的MAC是:%MAC%
IF "%IP%"=="ALL" (ARP -A|FINDSTR /I "dynamic static")
ECHO ------------------------------------------------------
ECHO.
ECHO.
ECHO 操作完成,请选择其他操作:
ECHO ******************************************************
ECHO 要继续查询MAC请输入G;要退出查询MAC请输入E;
ECHO 要把该IP绑定到该MAC输入Y;要解除该绑定输入N;
ECHO 要比较完整的解决ARP病毒的攻击请输入Z;
ECHO ******************************************************
SET /P S=请选择并输入要继续的操作:
IF "%S%"=="%S%" GOTO :%S%

:Y
ECHO.
ECHO.
IF "%IP%"=="ALL" (SET /P IP=请从上面的列表中选择并输入一个需要绑定的IP,直接回车则全部绑定:)
IF "%IP%"=="ALL" SET IP=dynamic
FOR /F "TOKENS=1-2" %%I IN ('ARP -A^|FINDSTR /I "%IP%"') DO (ARP -S %%I %%J)
GOTO :G

:N
ECHO.
ECHO.
IF "%IP%"=="ALL" (SET /P IP=请从列表中选择输入需要解除的IP,直接回车则删除所有绑定:)
IF "%IP%"=="ALL" SET IP=*
ARP -D %IP%
GOTO :G

:Z
IF EXIST %WINDIR%\SYSTEM32\NPPTOOLS.DLL REN %WINDIR%\SYSTEM32\NPPTOOLS.DLL NPPTOOLS.DL_ >NUL
ARP -D
PING %IP% -n 1 >NUL
FOR /F "TOKENS=12" %%I IN ('IPCONFIG /ALL^|FIND /I "Physical Address"') DO (ARP -S %LIP% %%I)
FOR /F "TOKENS=13" %%I IN ('IPCONFIG /ALL^|FIND /I "Default Gateway"') DO (SET DG=%%I)
PING %DG% -n 1 >NUL
FOR /F "TOKENS=2" %%I IN ('ARP -A^|FIND "%DG% "') DO (ARP -S %DG% %%I)
GOTO :G

:E
@ECHO OFF
EXIT
[ Last edited by HUNRYBECKY on 2007-2-3 at 06:04 AM ]

   此帖被 +10 点积分       点击查看详情   
评分人:【 redtek 分数: +10  时间:2007-2-2 06:40


2007-2-2 06:01
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dj0733
初级用户





积分 138
发帖 55
注册 2007-2-2
状态 离线
『第 3 楼』:  

支持楼上。。

最好还能这样“

Choice 是否输出到IP-MAC到TXT ?

呵呵。建议一下!

2007-2-2 08:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bosskof
初级用户





积分 22
发帖 11
注册 2006-5-11
状态 离线
『第 4 楼』:  

getmac /s

2007-2-2 09:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
PPdos
高级用户




积分 783
发帖 268
注册 2006-12-26
状态 离线
『第 5 楼』:  再给个查询厂商的批处理…^^

Mac厂商信息查询批处理



菩提本无树,明镜亦非台,本来无一物,何处惹尘埃.
2007-2-2 12:19
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bbq123bbq
初级用户




积分 197
发帖 77
注册 2006-9-19
状态 离线
『第 6 楼』:  

支持...有待研究

2007-2-2 14:12
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『第 7 楼』:  



  Quote:
Originally posted by PPdos at 2007-2-2 12:19:
Mac厂商信息查询批处理

谢谢兄提供的查询,但是好象这个没有多大的用途,在无盘系统中应该还可以用到,用来获取厂商代码。能不能说下该程序有什么用途没有?这个好象是不能查询到完整MAC地址的,所以在我的程序上是用不上的。

2007-2-2 21:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by bosskof at 2007-2-2 09:35:
getmac /s

这个命令用于获取本地真实物理MAC比较好,但是要获取外部MAC好象比较麻烦,毕竟要提供用户名和密码。

2007-2-3 02:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 9 楼』:  



  Quote:
毕竟要提供用户名和密码。

这是因为getmac实际上是通过 WMI 操作的




C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
2007-2-3 04:50
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fbwolf
初级用户





积分 56
发帖 22
注册 2006-12-13
状态 离线
『第 10 楼』:  

支持

2007-2-4 00:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: