网络故障诊断代码及诊断原理
网络故障诊断代码及诊断原理一、诊断代码echo off & setlocal enabledelayedexpansiontitle %n0. code by rs + 2010.5.3set /a last_flag=1:首先判断物理连接是否正常.echo 零判断物理连接是否正常.ipconfig/all 2>nul | find /i "Media disconnected">nul 2>nul &&(echo.&echo 请检查物理连接.&pause>nul)|(echo -ok.):启动本地连接或重启本地连接echo.&echo 一启动本地连接中.set num=0for /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=0for /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!-1set 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 请确认交换机接口没有松动!按任意键继续. 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=0ipconfig/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 &&(