中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
作者:
标题: 【LAN】网络故障诊断 上一主题 | 下一主题
rs369007
初级用户





积分 147
发帖 131
注册 2008-9-22
状态 离线
『楼 主』:  【LAN】网络故障诊断 使用 LLM 解释/回答一下

code by rs 2010.5.3 M

脚本编写的主要参考资料
:http://www.microsoft.com/china/technet/itsolutions/network/evaluate/technol/tcpipfund/tcpipfund_ch16.mspx







判断物理连接是否正常.
ipconfig/all 2>nul | find /i "Media disconnected">nul 2>nul &&(echo.&echo 请检查物理连接.....&pause>nul)||(echo ----ok.)

::启动本地连接或重启本地连接
echo.&echo 启动本地连接中......
set num=0
for /f "tokens=2 delims=\" %%k in ('devcon listclass net ^| find /i "net"') do (
if !num! equ 0 set deviceinfo=%%k
set /a num+=1
)

set num1=0
for /L %%j in (0,1,22) do (
if !num1! LSS 2 (
set devicevar=!deviceinfo!
set str=!devicevar:~0,1!
set devicevar=!devicevar:~1!
if "!str!"=="&" (
set /a num1+=1
)
set /a total+=1
)
)

set /a total=!total!-1
set deviceinfo=!deviceinfo:~0,17!
devcon status pci\!deviceinfo!* | find /i "disabled" >nul&&(devcon enable pci\!deviceinfo!*>nul&netsh winsock reset>nul&ping -w 1000 -n 10 127.1>nul)
echo ----ok.


::判断本地连接是否受限
echo.&echo 判断本地连接是否受限.
ipconfig/all | find /i "169.254" >nul 2>nul &&(set /a localconn=0)||(set /a localconn=1)
if !localconn! equ 0 (
ipconfig/release>nul 2>nul
ipconfig/renew>nul 2>nul
ping -w 1000 -n 6 127.1>nul
ipconfig/all | find /i "169.254" >nul 2>nul &&(set /a localconn=0)||(set /a localconn=1)
)

if !localconn! equ 0 (
echo.&echo 本地连接可能受限.并请先检查交换机接口是否松动...
echo 请确认交换机接口没有松动.
echo 请重新启动交换机^!按任意键继续...
pause>nul
echo 执行一系列修复命令.....
echo 1 重新启动本地连接...
devcon restart pci\!deviceinfo!*>nul
echo 2 重置tcp/ip协议组件到干净状态...
netsh int ip reset c:\123.txt
echo 3 重置winsock...
netsh winsock reset >nul
echo 4 重新获取ip...
ipconfig /renew >nul
echo 5 清除地址缓存信息...
arp –d * >nul
echo 6 清空NetBIOS缓存内容...
nbtstat -R >nul
echo 7 清空本地计算机DNS缓存 ...
ipconfig /flushdns >nul
echo 8 WINS服务器上重新注册本地计算机...
nbtstat -RR >nul
echo 9 DNS服务器上重新注册本地计算机...
ipconfig /registerdns >nul
) else (echo ----ok.)



echo.&echo 层次化的测试.
echo.&echo 1,判断本地网卡是否工作正常.

ping -w 10 -n 1 127.1 | find /i "timed out" >nul &&(echo.&echo 网卡不能正常工作.&set /a last_flag=0&goto test)||(echo ----ok.)

::判断ip地址是否合法(如果为手动设置的话)
echo.
echo 2,判断ip地址设置是否正确.

::获取ip地址,网关地址.
for /f "tokens=2 delims=:" %%i in ('ipconfig/all ^| find /i "IP Address"') do (
set ipaddr=%%i
set ipaddr=!ipaddr:~1,-1!
)

for /f "tokens=2 delims=:" %%i in ('ipconfig/all ^| find /i "Default Gateway"') do (
set gateway=%%i
set gateway=!gateway:~1,-1!
)

set subnetID=!gateway:~0,-1!
set /a counter=0

ipconfig/all 2>nul | find /I "yes">nul &&(set /a flag=1)||(set /a flag=0)

if !flag! equ 0 (
::判断ip地址是否合法,通过ping测试.
echo !ipaddr! | find /i "!subnetID!">nul &&(set /a flag=1) || (set /a flag=0)
if !flag! equ 0 (
echo 本地ip地址与网关地址不匹配.改变设置中......
netsh interface ip set address "本地连接" dhcp>nul
netsh interface ip set dns "本地连接" dhcp>nul
) else (
for /f "tokens=2 delims=:" %%a in ('ipconfig/all ^|find "Subnet Mask"') do (
set mask=%%a
set mask=!mask:~1,-1!
if NOT "!mask!"=="255.255.255.0" (set /a flag=0) else (echo +掩码检查----ok.)
)
set subnetid=!gateway:~0,-2!
for /L %%j in (1,5,254) do (
ping -w 10 -n 1 !subnetid!.%%j>nul 2>nul
if !ERRORLEVEL! EQU 0 (
set /a counter+=1
)
)
ping -w 10 -n 1 !ipaddr! >nul 2>nul
if !ERRORLEVEL! EQU 0 (
set /a counter+=1
)
if !counter! GEQ 2 (
if !flag! equ 0 (echo +子网掩码不是24位,可能不正确.但本地网络正常.) else (echo +手动配置ip地址有效----ok.)
) else (echo +请检查ip地址是否有误.&set /a last_flag=0&set /a flagip=0)
)
) else ( echo ----ok.&set /a flag=1&set /a flagip=1)


::进行网关测试
echo.&echo 3,进行网关测试.
if !flagip! equ 1 (
ping -w 30 -n 3 !gateway!>nul 2>nul && (echo ----ok.) || (echo +网关: !gateway! 没有回应.&set /a last_flag=0)
) else (echo +e 跳过此步.)

echo.&echo 4,判断DNS是否正常工作(用www.baidu.com测试).
if !flagip! equ 1 (
nslookup www.baidu.com 2>nul | find /i "timed out">nul 2>nul &&(
echo.&echo DNS服务器不能正确解析域名.&set flag=0 &set /a last_flag=0
) || (echo ----ok.&set /a flag=1)
) else (echo +e 跳过此步.)

echo.&echo 5,检查DNS服务器地址.
ipconfig/all |find /i "DNS Servers" >nul &&(set /a flag=1)||(set /a flag=0 & set /a last_flag=0)
if !flag! equ 0 (
echo DNS地址没有正确获取.改变设置中.....
netsh interface ip set address "本地连接" dhcp>nul
netsh interface ip set dns "本地连接" dhcp>nul
echo 设置完成.
) else (echo ----ok.)

echo.&echo 6,判断是否能够访问Internet.
ping -n 3 www.baidu.com >nul
if !errorlevel! NEQ 0 (
echo +不能连接到Internet.
if !flagip! equ 1 (
echo 路由测试中,请耐心等待...&echo.
set /a last_flag=0
for /f "skip=4 tokens=*" %%a in ('tracert -d -h 5 www.baidu.com') do (
set /a counter+=1
if !counter! LEQ 5 (echo %%a) else goto test
)
)
) else (echo ----ok.)

:test
echo.
if !last_flag! EQU 1 (
echo 没有发现任何异常,本地连接正常,各种设备工作正常.
) else (
echo 测试完成,发现异常.
)
pause>nul



Last edited by rs369007 on 2010-6-9 at 11:10 ]


附件 1: devcon.rar (2010-5-2 21:16, 14.71 KiB,下载次数: 42)
附件 2: 网络故障诊断.rar (2010-6-9 11:10, 2.21 KiB,下载次数: 10)


freedom!
2010-5-2 15:29
查看资料  发短消息  网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 2 楼』:   使用 LLM 解释/回答一下

在顶楼提供一个devcon的链接吧,方便大家下载。




2010-5-2 18:35
查看资料  发短消息  网志   编辑帖子  回复  引用回复
fbboy
新手上路





积分 8
发帖 5
注册 2010-4-4
状态 离线
『第 3 楼』:   使用 LLM 解释/回答一下

学习一下,都是高手啊!


2010-5-4 12:51
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
antony521
新手上路




积分 14
发帖 14
注册 2010-3-29
状态 离线
『第 4 楼』:   使用 LLM 解释/回答一下

运行后产生一个名1的文件.
不能启动已经禁用的本地连接.
检测我的IP设置错误,这是不可能的,我检查过.
其它功能没有仔细测试,希望楼主改改,我没这个水平改.


   此帖被 +1 点积分    点击查看详情   
评分人:【 rs369007 分数: +1  时间:2010-5-21 23:44


2010-5-12 17:40
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
rs369007
初级用户





积分 147
发帖 131
注册 2008-9-22
状态 离线
『第 5 楼』:   使用 LLM 解释/回答一下

Originally posted by antony521 at 2010-5-12 17:40:
运行后产生一个名1的文件.
不能启动已经禁用的本地连接.
检测我的IP设置错误,这是不可能的,我检查过.
其它功能没有仔细测试,希望楼主改改,我没这个水平改.


1,产生名为1的文件,属于一个错误。将 ....2>nul 错误写成 ...2>1 了
2,不能启用已经禁用的本地连接,可能是读取的网卡硬件号有误;还有要将devcon.exe copy到系统目录下。
2,判断ip是否有误,这个主要针对手动设置ip地址情况,如果出现《请检查ip地址是否有误》提示,不一定说明你的ip地址设置就一定有误。因为我是通过ping你设置的网段某些主机(从1开始,步距5,进行ping测,原则上说至少有一台在线---网关主机在线,也就是主机号为1的主机),如果ping通的主机大于 2台,就认为你设置的ip地址是正确的。但是完全有可能<2,因为步距为5,可能没有包含到你的主机ip。所以进行了改正,将本机ip加了进去。




freedom!
2010-5-17 10:27
查看资料  发短消息  网志   编辑帖子  回复  引用回复
antony521
新手上路




积分 14
发帖 14
注册 2010-3-29
状态 离线
『第 6 楼』:   使用 LLM 解释/回答一下

1、启用已经禁用的本地连接无效是因为这一句:
for /f "tokens=2 delims=\" %%k in ('devcon listclass net ^| find /i "ethernet"') do (
if !num! equ 0 set deviceinfo=%%k
set /a num+=1
)
中的关键字ethernet,我的办公电脑网卡(Intel(R) PRO/100 VE Network Connection......)中没有这个词,为了更通用我改为"net"这样在家,在单位就都可以用了。
经楼主改后,不再看到《检查ip地址是否有误》提示心里舒畅多了,谢谢楼主!


   此帖被 +1 点积分    点击查看详情   
评分人:【 rs369007 分数: +1  时间:2010-5-21 23:43


2010-5-18 22:23
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
rs369007
初级用户





积分 147
发帖 131
注册 2008-9-22
状态 离线
『第 7 楼』:   使用 LLM 解释/回答一下

Originally posted by antony521 at 2010-5-18 22:23:
1、启用已经禁用的本地连接无效是因为这一句:
for /f "tokens=2 delims=\" %%k in ('devcon listclass net ^| find /i "ethernet"') do (
if !num! equ 0 set ...


非常谢谢你的建议,已经修改过来了.

for /f "tokens=2 delims=\" %%k in ('devcon listclass net ^| find /i "net"') do (
if !num! equ 0 set ...




freedom!
2010-5-21 23:38
查看资料  发短消息  网志   编辑帖子  回复  引用回复
basswood
初级用户




积分 113
发帖 8
注册 2003-12-2
状态 离线
『第 8 楼』:   使用 LLM 解释/回答一下

不知最后修改了如何,收下学习....


2010-5-25 09:48
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复

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


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



论坛跳转: