DOS快餐店
快餐店的“魔鬼命令测试”(上)
★★★
■掌柜的
√使用基本的网管命令
√学会排除常见网络问题
√用批处理编写共享扫描器
小伙计由于表现优异,掌柜的授予了他“店小二”称号,并美其名曰“店中排行老二,仅次于掌柜的”(小伙计:“不是一共才2个人吗,难道又想用荣誉称号来抵扣薪水……”)。于是店小二开始了业余网管的学习,掌柜的也承诺:学习完成后,如果能够通过“魔鬼命令测试”就替他加薪。
经过几个月疯狂学习,小伙计已经达到了一个业余网管的水平,向着“魔鬼命令测试”进发了。他哪里知道,这其实是掌柜的精心设计的魔鬼测试题,专用来对付员工的加薪要求。
//以下每道题均使用底纹加外框方式,将“第X题”放在外框左上
考试要求:本测试共有4题,解题时只能使用Windows XP SP2自带的命令。
第1题:确定局域网内IP为192.168.0.3的操作系统类型。
解题提示:操作系统为默认设置,未进行特殊修改
(A)Windows 98 (B)Windows 2000/XP (C)Unix
店小二解题分析:要获知局域网内某台电脑所安装的操作系统类型,最好的方法就是使用扫描器软件,如X-Scan等。但这张魔鬼测试题要求只能使用DOS自带的命令解决问题,首先来分析一下确定远程操作系统的几种方法。
①用telnet登录并分析返回信息:使用telnet命令登录远程计算机后,很多时候都会返回一串文字显示当前系统的状态。比如下面这段:
C:\\>telnet XXX.XXX.XXX.XXX
Red Hat Linux release 7.1
Kernel 2.4.2-2 on an i686
login:
可是局域网中的这台计算机并不是服务器,所以没有开放telnet服务,没法使用telnet命令连接上它,获得返回信息更是无从谈起。
②用DF位/ACK序号等方法进行识别:操作系统在对外发送数据包,或者对一个远程连接作为回应时,都会在发送的数据中包含一些特有的信息,就好比每个人的指纹一样。但现在没有相关的扫描工具,所以此方法显示不行。
③使用ping命令获取TTL值:ping是Windows中一个非常实用的命令工具,网管员经常使用此命令来检查网络连通情况。但很少有人知道,ping还有另一个用处,就是检测远程操作系统类型。使用“ping 192.168.0.3”后,返回信息中带有“TTL=XX”,其中“XX”是TTL的值,为数字(见图1)。,通过这个TTL值的比较,就得确定操作系统类型。以下是不同操作系统返回的TTL值的对照表(见附表1)。
(附表1)
操作系统类型 TTL
Windows 98 32
Linux 2.2.x/2.4.x 64
Windows NT/2000/XP 128
Unix/BSD 255
店小二测试了一下,发现返回值为128,于是选择了“(B)”。
小提示
以上TTL值均为近似值,因为在数据包传输过程中,每经过一个路由,TTL值就会自动减1,可以通过tracert命令获得与远程主机间存在的路由个数,来确定精确的TTL值。

芝麻开门:TTL值判断操作系统类型的准确性
TTL判断操作系统类型并非最可靠的,因为一个熟练的网管肯定会将系统默认的TTL返回值修改掉以避免被别有用心的入侵者猜解系统类型,Windows系统中只需修改注册表中[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters]分支下的“DefaultTTL”即可修改默认的TTL返回值(见图2 把XP的默认TTL改成了32)。第一题中注明了使用默认设置,并且在局域网环境中,所以用TTL还是比较准确的。

第2题:如果小明的局域网IP地址192.168.0.84被占用了,他应该如何找出谁占用了他的IP?
解题提示:局域网中的用户皆使用自己名字的拼音作为机器名。
店小二解题分析:这一次是简答题,就不像刚才客观题那么简单了(掌柜的窃笑中)。店小二想了想,要找出究竟是谁占用了IP,也就是目的是要知道占用IP的人的名字。此题的提示中说使用名字作为机器名,那么也就是说只能找出现在使用192.168.0.84这个IP的机器名。这可难不倒我,店小二想。接着,他在“命令提示符”中输入了一行命令“nbtstat -A 192.168.0.84”(注意:命令参数中的“-A”必须使用大写),在返回信息中顺利找到了占用IP的用户为“zhangguide”(掌柜的!?)。
小提示
使用nbtstat命令同时获得的还有使用此IP的机器网卡的MAC地址。

第3题:找出当前机器上与207.68.178.16连接的程序名。
解题提示:这道题你肯定不会。
店小二解题分析:“这也算‘解题提示’!?”店小二愤怒地骂了一句,很快又把情绪转移回了题目中。以往要检测系统中开放的端口都会使用“netstat -a”命令,但实际上,如果改换参数,netstat还有其他妙用。首先用“netstat -o”命令显示每个连接所属的程序PID情况,找出“Foreign Address”列中地址为“207.68.178.16”的行,并查看该行的PID为236(见图3)。光有PID还不行,还必须知道PID所属的程序名才行,于是输入“tasklist”命令获得了当前系统中运行的进程列表,对照刚才找出的PID寻找PID为236的进程(见图4),最后确定此进程为msnmsgr.exe,原来是MSN Messenger!

你知道吗——PID是什么
PID的全称是“Process ID”,即“进程ID”,也就是程序进程的惟一身份编号。这个编号是由系统在程序运行之初就随机赋予的,在一台机器上同时运行的程序的PID都不一样。有很多进程相关的命令需要PID参数。

第4题:获得局域网中所有机器的共享列表,并写入文本文件中。
解题提示:需要获得的机器的IP段在192.168.0.1~192.168.0.255。
店小二解题分析:现在手头也没有扫描工具,如果手工一个个检查那得弄到猴年马月啊!早料到掌柜的会出这种难题,还好事先恶补了几星期批处理。
@echo off
@echo Searching share in LAN now…
@for /L %%i IN (195,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

原来用“new view IP地址”可以探测远程机器上开放的共享,这个脚本实现的功能就是在192.168.0.1~192.168.0.255中自动扫描共享,并将结果记录到share.txt中(此脚本下载地址:http://www.newhua.com/cfan/200513/scanshare.zip)。

店小二高高兴兴地将做好的测试题交给掌柜的,却未料到,掌柜的铁青的脸突然强挤出了一丝笑容:“嗯,你上半场的题答得不错,竟然得了满分……希望你下半场的考试也能这么顺利。”店小二能否顺利通过“魔鬼命令测试”,又能否加薪成功呢?且听下回分解。

DIY你的DOS菜
上期答案:
1.显示D:\\test目录下所有TXT文件中包含“smart”字符串的个数,忽略大小写。
find /c /i “smart” d:\\test\\*.txt
2.用find命令配合tree命令统计d:\\test目录下名为“hello.exe”的文件个数。
tree d:\\test /f | find /c /i “hello.exe”
本期习题:
1.已知远程主机A的TTL值为125,最可能的操作系统是?另外,请写出数据包经过的路由数。
2.检查局域网中IP为192.168.0.5的用户的机器名。
3.列出系统中运行的所有进程,并写入到task.txt中。

 

转自cfan,感谢PK分享经验