中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-24 06:12
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 高手这么多,谁写一个扫描本网内IP和mac! 查看 7,342 回复 51
31 发表于 2006-12-31 00:55 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
19年会员
UID 59080
状态 离线

  根据 9527 和 qzwqzw 的思路,我是这样理解的:当ping完一个IP之后,如果这个IP所代表的主机是存活的,那么就会自动在路由表中记录这个IP和其MAC,但是我试了一下ping www.cn-dos.net,之后我用ARP -A,路由表中并没有出现www.cn-dos.net的IP以及MAC,请教这是什么原因?是不是这种方法只针对内网的主机呢?请各位不吝赐教。
32 发表于 2006-12-31 01:13 ·  中国 北京 联通
银牌会员
★★★
努力做坏人
积分 1,185
发帖 438
注册 2006-08-28 12:00
19年会员
UID 61449
来自 北京
状态 离线

PING虽然也可以判断对方机器是否在线,不过成功率实在不敢恭维,效率也差的要命,还是用ARP好些,不过使用他的人一定要注意他的网段是192.168.1.0-192.168.1.255这个大家根据自己的情况改好了,不过运行速度不是太快,可能是PING给延误的,不过确实很实用的,大概解释一下,有人会问了,为什么你不直接把整段IP给FOR运行呢,我昨天试验了下,那样有些不准,所以分两段运行了,具体为什么不准这个我也不是很清楚,对于有防火墙的情况也是适用的,对屏蔽了ICMP包的机器也是适用的,因为他一定还给一个MAC地址给源计算机的,所以请大家放心使用就是了.


这是我原帖所写内容,你在从网上查一下,ARP好像只对内部网络操作有作用,对其外网是否存活好像基础命令是PING对方主机看TTL值,ARP就有一个好处那就是如果对方在线不管在线不在线对能够判断出来!!!
我今后在论坛的目标就是做个超级坏人!!!
33 发表于 2006-12-31 02:01 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
19年会员
UID 59080
状态 离线
Originally posted by tghksj at 2006-12-30 10:25:
re lxmxn
-----------------------
net view得到"计算机名"列表
nbtstat -a "计算机名" 得到 MAC
------------------------



@ECHO %dbg% OFF
setlocal ENAB ...


  将你的net view和nbtstat -a 得到的具体结果发来看看,我主要是看一下结果的格式,因为我这里没有内网环境。
34 发表于 2006-12-31 02:13 ·  中国 山东 济南 电信
社区乞丐
★★
此图片另存后死机
积分 -49
发帖 90
注册 2006-12-02 13:00
19年会员
UID 72412
性别 男
状态 离线

net view :
--------------
服务器名称 注释

-------------------------------------------------------------------------------
\\GS
\\SERVER
\\T06
\\T11
\\T13
\\T14
\\T16
\\T18
\\T19
\\T20
\\T22
\\T23
\\T24
\\T25
\\T27
\\T28
\\T29
\\T34
\\T46
\\T49
\\T50
\\T51
\\T52
\\T53
\\T54
\\T60
命令成功完成。

--------------------------------------------
nbtstat -a T06:
---------------------------

本地连接:
Node IpAddress: Scope Id:



NetBIOS Remote Machine Name Table



Name Type Status

---------------------------------------------

T06 <00> UNIQUE Registered

K <00> GROUP Registered

T06 <20> UNIQUE Registered

K <1E> GROUP Registered



MAC Address = 00-E0-4C-10-44-49






nbtstat -a 命令竟然大小写结果不同........
NBTSTAT -A 不行......
35 发表于 2006-12-31 02:46 ·  中国 山东 青岛 中移铁通
初级用户
积分 63
发帖 33
注册 2006-12-04 05:49
19年会员
UID 72514
性别 男
状态 离线
Originally posted by ygzxw at 2006-12-28 04:12 PM:
这儿不让传图!!!发不了


可以发的,在你发贴时在最下面有提示:

图1
上传完成后根据提示找到文件连接地址即可.



[ Last edited by trickster on 2006-12-30 at 01:54 PM ]
36 发表于 2006-12-31 02:58 ·  中国 广东 广州 天河区 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
19年会员
UID 74552
性别 男
状态 离线
有个命令很方便,也不需要server服务来支持 arp -a ipaddress
37 发表于 2006-12-31 03:04 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
19年会员
UID 59080
状态 离线

@echo %dbg% off
setlocal enabledelayedexpansion

for /f "tokens=1 delims=\" %%i in ('net view^|find "\\"') do (
call :cname %%i
)
pause
goto :eof

:cname
for /f "tokens=2 delims==" %%j in ('nbtstat -a %1^|find "MAC Address"') do (
echo %1_%%j
)
goto :eof

  再试试看?


[ Last edited by lxmxn on 2006-12-30 at 03:17 PM ]
38 发表于 2006-12-31 04:04 ·  中国 山东 济南 电信
社区乞丐
★★
此图片另存后死机
积分 -49
发帖 90
注册 2006-12-02 13:00
19年会员
UID 72412
性别 男
状态 离线
粗心了:)
少了个 '
应该是for /f "tokens=1 delims=\" %%i in ('net view^|find "\\"') do (
本帖最近评分记录 (共 5 条) 点击查看详情
评分人分数时间
9527 -11 2007-01-18 01:58
lxmxn -16 2007-01-18 02:00
electronixtar -19 2007-01-18 02:00
bagpipe -11 2007-01-18 02:03
ccwan -11 2007-01-18 02:03
39 发表于 2006-12-31 04:18 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
19年会员
UID 59080
状态 离线

  呵呵,谢谢楼上兄的提醒。由于没有环境,所以代码写好了就直接发上来了,没有测试。 =_=||
40 发表于 2006-12-31 06:06 ·  中国 山西 运城 联通
银牌会员
★★★
天的白色影子
积分 2,343
发帖 636
注册 2004-03-06 00:00
22年会员
UID 19350
性别 男
状态 离线
arp -a 显示的并非路有表,而是ARP缓存表

前者是网络层的数据结构

后者是通过发送arp广播消息建立的,是个典型的数据链路层数据结构

数据链路层消息是不能跨网关的,所以只能在同一网段内(或者同一VLAN)

一个局域网内可能有多个网段或VLAN
---------------------------------------------

arp 并不比 ping 更好些,因为他们不是同一层次的程序

windows 的 arp 程序只操作本地arp缓存表,没有发出任何网络连接

所以如果不连接目标IP,是不可能arp 到mac的

所以,ping或者其他连接程序是 arp 的前提

除非有个arp程序可以自己发出arp请求消息
-------------------------------------------------------------------------

是否ping通与是否获取mac没有直接关系

因为ping采用icmp协议,位于网络层

网络层失败,并不意味着更低的数据链路层失败

但数据链路层失败,则网络层一定失败

所以,能ping通,就一定可以获得mac

能获得mac却不一定可以ping通

---------------------------------------------------------------------------------

印象中arp缓存表只保留10条最新的ip-mac记录

所以可能无法一次获取128条记录

但没有条件做测试,也很难说,这与系统有关,与协议无关

--------------------------------------------------------------------------------
41 发表于 2006-12-31 06:13 ·  中国 甘肃 兰州 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
20年会员
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
应该先看看 $ipc
42 发表于 2006-12-31 06:42 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
19年会员
UID 59080
状态 离线

  多谢40楼兄的指点,明白一些了。
43 发表于 2006-12-31 06:51 ·  中国 广东 广州 天河区 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
19年会员
UID 74552
性别 男
状态 离线
Originally posted by qzwqzw at 2006-12-30 05:06 PM:
arp -a 显示的并非路有表,而是ARP缓存表

前者是网络层的数据结构

后者是通过发送arp广播消息建立的,是个典型的数据链路层数据结构

数据链蠮..


刚才没注意看,以为是要获得ping以后的MAC地址
arp本地缓存应支持超过256个条目
44 发表于 2006-12-31 06:54 ·  中国 广东 广州 天河区 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
19年会员
UID 74552
性别 男
状态 离线

@echo off
FOR /F "tokens=4-7 delims=. " %%i IN ('ipconfig^|find /i "ip address"') do set i1=%%i&set i2=%%j&set i3=%%k&set i4=%%l
FOR /F "tokens=4-7 delims=. " %%i IN ('ipconfig^|find /i "subnet"') do set m1=%%i&set m2=%%j&set m3=%%k&set m4=%%l
if "%m2%" == "0" (set b=1&set bb=254) else set b=%i2%&set bb=%i2%
if "%m3%" == "0" (set c=1&set cc=254) else set c=%i3%&set cc=%i3%
echo.>mac.dat
for /l %%b in (%b%,1,%bb%) do (
for /l %%c in (%c%,1,%cc%) do (
for /l %%d in (1,1,20) do (
ping -l 1 -w 1 -n 1 -i 1 %i1%.%%b.%%c.%%d>nul
arp -a %i1%.%%b.%%c.%%d|find "%i1%.%%b.%%c.%%d"|findstr "static dynamic">>mac.dat
set /p=%%d <nul)
)
)
echo.
type mac.dat
pause

我这也有一个,原来配置交换机时写的
45 发表于 2006-12-31 09:11 ·  中国 山西 运城 联通
银牌会员
★★★
天的白色影子
积分 2,343
发帖 636
注册 2004-03-06 00:00
22年会员
UID 19350
性别 男
状态 离线
写的不错

再完善一下就可以做标配工具了

首先是对非0的掩码的支持

其次是对(1,1,20)的问题,不知道你是如何考虑的,是抽样吗?

另外,arp的条目总数不知是否系统版本影响

如果确定不低于256,那么为什么不在ping完一个段后,再arp -a呢
论坛跳转: