Board logo

标题: 查看局域网内在线的电脑的IP地址(批处理) [打印本页]

作者: bagpipe     时间: 2006-2-17 14:36    标题: 查看局域网内在线的电脑的IP地址(批处理)

呵呵,大家好,偶又回来玩儿喽,这次弄个实用的,不好用可别怪我哈,请看下面代码:

@echo off
arp -d
for /l %%i in (0,1,128) do ping 192.168.1.%%i -n 1 >nul
arp -a >11.txt
arp -d
for /l %%i in (128,1,255) do ping 192.168.1.%%i -n 1 >nul
arp -a >>11.txt
arp -d

完了,就这么点,PING虽然也可以判断对方机器是否在线,不过成功率实在不敢恭维,效率也差的要命,还是用ARP好些,不过使用他的人一定要注意他的网段是192.168.1.0-192.168.1.255这个大家根据自己的情况改好了,不过运行速度不是太快,可能是PING给延误的,不过确实很实用的,大概解释一下,有人会问了,为什么你不直接把整段IP给FOR运行呢,我昨天试验了下,那样有些不准,所以分两段运行了,具体为什么不准这个我也不是很清楚,对于有防火墙的情况也是适用的,对屏蔽了ICMP包的机器也是适用的,因为他一定还给一个MAC地址给源计算机的,所以请大家放心使用就是了.
作者: dosz     时间: 2006-2-17 22:49
@echo off
@echo Searching share in LAN now...
@for /L %%i IN (1,1,255) do @echo 192.168.0.%%i && @echo 192.168.0.%%i >> share.txt && net view 192.168.0.%%i >> share.txt || @echo 该主机无响应 >> share.txt
@echo finished
@pause
exit
作者: 220110     时间: 2006-2-18 00:25
to dosz:
我觉得用 net view 不行。因为没安装NetBIOS协议的计算机不会响应 net 的相关命令。
如果可以的话,我想bagpipe 应该会想到。

to bagpipe:
我请问个问题,arp要不要什么协议做基础?源计算机要启动什么服务吗?我曾调试一台网络摄像机,按说明书,先在服务器用arp 命令把一个IP关联绑定网络摄像机的MAC地址,再用IE登录它。然而,反复尝试均不成功。
作者: 3742668     时间: 2006-2-18 07:11
@echo off
set /a ip0 = "192"
set /a ip1 = "168"
set /a ip2 = "1"
set /a ip3 = "1"

:ping
ping %ip0%.%ip1%.%ip2%.%ip3% -n 1 -w 10 | find "TTL" >>ip.txt
set /a ip3 = %ip3% + "1"
if %ip3% == 255 (set /a ip2 = "%ip2%" + "1") & (set /a ip3 = "1")
if not %ip2% == 255 goto ping

ping 命令后面加上-vw和-n参数会使效率提高不止一点点。。。。
另外用set命令的话扩展性就好得多,不光可以用来扫描局域网,甚至。。。。
ps:上面的find "TTL"完全是多余的,可以用&&来判断是否ping通。

[ Last edited by 3742668 on 2006-2-18 at 07:16 ]
作者: 3742668     时间: 2006-2-18 07:12
上面那个是我以前用来扫描IP的东东,不过后来又改了,专门用来扫描宽带猫的。
ping命令实战演习

1.检测网络状态
有时候局域网中主机故障,导致下面的电脑不能上网。而故障又是暂时性的,说不定什么时候网络就恢复了,在掉线的这段时间去玩单机游戏吧又怕网络通了而不知道,老是从游戏中切换出来检查网络又觉得麻烦。这时候ping命令就可以派上用场了,打开记事本输入:

@echo off
:check
ping sz6.tencent.com -n 1 >nul
if errorlevel 1 goto check
echo wscript.echo "网络已连接!" > tmp.vbs
start tmp.vbs
echo            
rem 上面一句echo后面有十个特殊字符
echo y | del tmp.vbs

完毕后保存为 网络检测.bat 并双击运行,然后就可以放心地去玩游戏了,如果网络连接上后响十声警报并有消息提示网络已通。第七行echo后面的"           "字符可以通过以下方法得到:在命令行窗口输入echo ALT+7 > 字符.txt,注意ALT+7表示按下ALT再按下小键盘上的数字7,然后打开“字符.txt”复制粘贴。如果系统为XP的话可简化为:
@echo off
ping sz6.tencent.com -n 1 && echo            && msg %username% /time:10 "网络已通!"  && exit
%0

2.给局域网中所有的计算机发送消息
打开记事本输入:
@echo off
set /a ip0 = 192
set /a ip1 = 168
set /a ip2 = 1
set /a ip3 = 1

:ping
ping %ip0%.%ip1%.%ip2%.%ip3% -n 1 -w 1 | find "TTL" >>tmp1.txt
set /a ip3 = %ip3% + 1
if not %ip3% == 255 goto ping

for /f "eol=: tokens=3" %%i in (tmp1.txt) do echo %%i >>tmp2.txt
if exist ip.txt echo y | del ip.txt
for /f "delims=:" %%i in (tmp2.txt) do echo %%i >>ip.txt
for /f %%i in (ip.txt) do net send %%i "你好!"

echo y | del tmp1.txt & echo y | del tmp2.txt

完毕后保存为 网络消息.bat 并双击运行。运行完毕后会产生一个名为ip.txt的记录文件,里面记录了所发送过消息的电脑的IP地址。

3.入侵
还是先打开记事本,输入:
@echo off
set /a ip0 = 58
set /a ip1 = 52
set /a ip2 = 110
set /a ip3 = 1
if exist ip.txt echo y | del ip.txt
if exist linux.txt echo y | del linux.txt
if exist windows.txt echo y | del windows.txt
:ping
ping %ip0%.%ip1%.%ip2%.%ip3% -n 1 -w 10 | find "TTL" >>ip.txt
set /a ip3 = %ip3% + 1
if %ip3% == 255 (set /a ip2 = %ip2% + 1) & (set /a ip3 = 1)
if not %ip2% == 255 goto ping
type ip.txt | find "TTL=6" >>linux.txt
type ip.txt | find "TTL=12" >>windows.txt

保存为 扫描.bat 后双击运行将会扫描从59.36.180.1到59.36.255.255之间的IP地址并根据系统的不同来保存为不同的IP(根据不同情况可以修改为想扫描的IP段)。我们知道,windows NT,2000,XP系统的TTL值一般为128,unix为255,win95/98为32,linux为64,另外基本上宽带猫的系统都为linux,所以linux中的IP大多数为打开了路由功能的猫的IP,如果没有更改出厂密码的话我们就可以登陆到猫上去找到他的上网帐号。对于windows.txt中的IP我们可以通过一些工具来进行入侵。
作者: dosz     时间: 2006-2-18 09:58    标题: 请教ERRORLEVEL错误返回代号

请教 3742668:

===============执行.bat===============
@echo off
copy C:\BOOT.INI>nul
if errorlevel 1 echo 执行失败
if errorlevel -1 echo 执行成功
if errorlevel -1 echo 被用户中断等
pause
exit
===============================
请教 ERRORLEVEL错误返回代号
如执行成功,执行失败,或被用户中断等

[ Last edited by dosz on 2006-2-18 at 10:02 ]
作者: dosz     时间: 2006-2-18 10:51
是否可把以上文件添加注解

以下两句有什么不同
if exist ip.txt echo y | del ip.txt
if exist ip.txt del ip.txt
作者: bagpipe     时间: 2006-2-18 17:29
4楼兄弟的方法好象没有多大起色啊?因为你用find命令来试探TTL生存值,试问如果对方有防火墙之类的软件,我想是PING不通的,所以也不能达到判断对方在线的目的,220110兄弟,好久没联系了,怪想你的,ARP也就是地址解析协议,只要安装了普通的TCP/IP协议我想问题就应该不是很大,你说到的网络摄象机我没有玩过,不过我想一定有网线接口,而且还要有一台主机装上相应的控制软件来实现的,如果是通过WEB界面来管理的,那么你看看他的访问端口之类的,如果不成,请在Q里跟我说明下情况,我们在来讨论,OK???^-^
作者: 3742668     时间: 2006-2-18 19:41
呵呵,我是探测宽带猫的,而且是可以入侵的猫
这样的猫一般都没有屏蔽ICMP协议的
如果对方有这个意识的话我相信更应该是改端口,不会简单地屏蔽这个协议而已,况且对方安全意识高的话我入侵的成功几率也不大,所以可以选择跳过,毕竟在网上一会可以扫一大片可以入侵的猫出来。。。
楼上的兄弟可能是没有理解我这个东东的用途,所以有异议,呵呵。。。。
ps:如果你认为我的说法比较牵强的话我建议用另外一个命令:pathping,它也可以指定时间间隔以及解析对方主机名等等。。。。
6楼的朋友:对于errorlevel建议自己用CMD下的echo %errorlevel%来了解,这样才会有提高。。
7楼的朋友:
if exist ip.txt echo y | del ip.txt  rem如果存在ip.txt就删除它,避免上次扫描的结果和这次的混在一起了,下同。echo y只是习惯,用于向del命令发送一个y
if exist ip.txt del ip.txt
初次来到这个论坛,没想到这里有这么多喜欢DOS的朋友饿。。。

[ Last edited by 3742668 on 2006-2-18 at 19:48 ]
作者: electronixtar     时间: 2006-3-1 14:29
巨强
作者: #four#     时间: 2006-3-1 14:33
for 命令的/F参数是什么意思???????
能不能详细说一说.
非常感谢!!!
作者: yayun     时间: 2006-3-12 10:39
学到东西了
作者: doscc     时间: 2006-3-27 13:33
顶顶
作者: Kinglion     时间: 2006-3-27 16:33
如果为了方便,可以使用  LanSee ,很实用。
作者: kkworms     时间: 2006-4-1 03:11
都是强人呀,受用了
作者: xiongwei2624     时间: 2006-6-27 14:49
支持
作者: xiongwei2624     时间: 2006-6-28 10:42
非常感谢!!!
作者: xiongwei2624     时间: 2006-6-28 13:40
for /f "delims=:" %%i in (tmp2.txt) do echo %%i >>ip.txt

4楼能不能给我解释一下这句话的意思!谢谢
作者: asbai     时间: 2006-6-28 13:53
arp协议工作在IP层下面是IP工作的基础,用来解析本地局域网上给定IP地址的MAC地址。所以不可能像ICMP8(PING)那样被屏蔽掉(虽然可以欺骗)。用arp扫的好处就是对方无法屏蔽,但致命的缺点就是只能扫本地网络(但可以穿透二层设备,如bridge和switch)。

PING可以被屏蔽但是不管咋样人家能扫外网地址(光在自己家扫貌似没啥意义^_^)。

比较专业的IP扫描工具扫起IP段是很快的,而且可以扫指定范围的udp和tcp端口,这样可以跳过ping,只要它开了我们感兴趣的端口就可以被找到。
作者: 3742668     时间: 2006-6-28 14:06


  Quote:
for /f "delims=:" %%i in (tmp2.txt) do echo %%i >>ip.txt

4楼能不能给我解释一下这句话的意思!谢谢

多看看帮助与支持没有坏处。
for /?

  Quote:
       eol=c           - 指一个行注释字符的结尾(就一个)
       skip=n          - 指在文件开始时忽略的行数。
       delims=xxx      - 指分隔符集。这个替换了空格和跳格键的
                         默认分隔符集。
       tokens=x,y,m-n  - 指每行的哪一个符号被传递到每个迭代
                         的 for 本身。这会导致额外变量名称的分配。m-n
                         格式为一个范围。通过 nth 符号指定 mth。如果
                         符号字符串中的最后一个字符星号,
                         那么额外的变量将在最后一个符号解析之后
                         分配并接受行的保留文本。
       usebackq        - 指定新语法已在下类情况中使用:
                         在作为命令执行一个后引号的字符串并且一个单
                         引号字符为文字字符串命令并允许在 filenameset
                         中使用双引号扩起文件名称。

for /f "delims=:" %%i in (tmp2.txt) do echo %%i >>ip.txt这句表示指定由冒号":"来分隔,比如文件内容为:
abc:def ghijk
那么,%%i的值就是 abc,如果没有指定delims的话,那么%%i的值应该是abc:def
作者: xiongwei2624     时间: 2006-6-29 09:44
明白了,谢谢!同时问下!
for /f "eol=: tokens=3" %%i in (tmp1.txt) do echo %%i >>tmp2.txt
这句话“eol=:”我试了有冒号和没有冒号都一样
版主能够解释一下吗!
作者: flysp     时间: 2006-6-29 18:06
学到。