win7网络故障判断(未完)

2016年2月19日 0 条评论 1.7k 次阅读 0 人点赞

用于常见网络故障判断并处理,由于考虑到了多网卡的情况,所以写起来比较复杂麻烦,未完

@echo off
setlocal enabledelayedexpansion
title 网络故障判断
color 0a
rem by sevenfal start 2016年1月27日,01:24:44
set "cho_n=输入数字选择:"
set inter_all_num=0
set inter_a=0
set inter_b=0
set inter_on=0
set "pn_=4" !!ping检测次数!!

rem !inter_all!				网卡条目(数字)
rem !inter_on!				已启用+已连接网卡数(数字)
rem !inter_%%a_a!			网卡是否禁用(已启用/已禁用)
rem	!inter_%%a_b!			网卡是否已连接 (已连接/已断开连接)
rem	!inter_%%a_name!	网卡名称(有空格的只取空格前部分)
rem !inter_all_num!		总网卡数(数字)
rem !inter_a!					已禁用数(数字)
rem !inter_b!					已断开连接数(数字)

rem !inter_on_%inter_on%!		在用的网卡名称
rem !gateway!										当前网关(路由表网关)
rem %inter_on%									在用网卡数
rem inter_on_%inter_on%_des			网卡描述
rem inter_on_%inter_on%_mac			网卡mac地址
rem inter_on_%inter_on%_dhcp		是否启用DHCP(1/0)
rem inter_on_%inter_on%_ip			网卡ip地址
rem inter_on_%inter_on%_mask		网卡子网掩码
rem inter_on_%inter_on%_gate		网卡网关
rem inter_on_%inter_on%_dhcp_ip	网卡DHCP服务器地址
rem ipv4_num 										手动ip中ipv4地址个数
rem inter_on_%inter_on%_ip_num1			手动ip中网卡ip地址
rem inter_on_%inter_on%_mask_num1		手动ip中网卡子网掩码

rem call echo 2.%%inter_on_!inter_on!%%



echo 正在获取网卡信息...
echo.


:::get interface:::
::
::
::!
:://///////获得网卡数目信息
for /f "tokens=1,2,3,4* skip=3 delims= " %%a in ('netsh inter show inter') do call :inter %%a %%b %%d
echo 【总网卡数(!inter_all_num!)个】	【已禁用数(!inter_a!)个】	【已断开连接数(!inter_b!)个】
echo.
:://///////网卡信息输出,获取在用网卡数目及信息
for %%a in (!inter_all!) do (
if "!inter_%%a_a!"=="已启用" (
	if "!inter_%%a_b!"=="已连接" (
		set/a "inter_on+=1"
		set "inter_on_!inter_on!=!inter_%%a_name!"
		echo 网卡名称: 	√!inter_%%a_name!
	) else (
			echo 网卡名称: 	×!inter_%%a_name!
		)
) else (
		echo 网卡名称: 	×!inter_%%a_name!
	)
echo 		  !inter_%%a_a!
echo 		  !inter_%%a_b!
echo.
)

if !inter_all_num!==!inter_a! echo 所有网卡都已禁用!按任意键打开网络连接并启用&pause>nul&ncpa.cpl&goto :eof
if !inter_all_num!==!inter_b! echo 所有网卡都已断开连接!无线网卡请检查是否已连接wifi,有线网卡请检查网线是否插好。&pause>nul&goto :eof
echo 当前使用!inter_on!个网卡 
echo (PS:计算机可以拥有多个网卡,多个IP,但是真正在使用上外网的只有一个)
echo.
echo 正在获取详细信息...
echo.
:://///////获取ipconfig/all中的详细信息
for /l %%i in (1 1 %inter_on%) do (
set "on_=0"
set "dhcp_=0"
call :ipconfig_
	
)
:://///////获取路由表中的网关
call :get_gateway
echo 基本获取已完毕,分析处理故障...
echo.
call :ping_ 2
if "!inter_on_%inter_on%_dhcp!"=="1" (
	echo 当前使用【DHCP】模式
	echo 即 Dynamic Host Configuration Protocol 动态主机配置协议
	echo 由dhcp服务器^(通常路由器有此功能^)给电脑分配IP
	set/p=正在检测网关是否存在...<nul
	call :ping_ 2
	if "!inter_on_%inter_on%_ip!"=="" echo.&echo 没有网关地址!请检查路由器dhcp服务设置!&start iexplore !inter_on_%inter_on%_dhcp_ip!&pause&goto :eof
	echo 【通过!】
	set/p=正在检测DHCP获取是否正常...<nul
	call :ping_ 2
	if "!inter_on_%inter_on%_ip:~,7!"=="169.254" echo.&echo dhcp获取错误,请检查路由器的DHCP功能是否正常&echo 家用路由器请直接重启路由器,然后检查是否电脑网线直接连接到路由器&echo 如果其中经过了交换机,请检查交换机到路由器网线是否正常&pause&goto :eof
	echo 【通过!】
	set/p=正在检测DHCP服务器是否为路由器...<nul
	call :ping_ 2
	if "!inter_on_%inter_on%_gate!" NEQ "!inter_on_%inter_on%_dhcp_ip!" echo.&echo !警告!网卡网关^(通常是路由器^)和DHCP服务器地址不一样!^(通常这2个是一样的^)&echo 请确认是否正常,如果不正常,表示网内出现了流氓DHCP服务器&echo 此流氓DHCP服务器地址为!inter_on_%inter_on%_dhcp_ip!&call :get_mac !inter_on_%inter_on%_dhcp_ip!&pause
	rem echo 【通过!】
	set/p=正在检测网关是否能通讯...<nul
	call :ip_test !inter_on_%inter_on%_gate! !pn_!
	if !ip_test_ok! EQU !pn_! echo 【网关通畅!】
	if !ip_test_ok! LSS !pn_! (if !ip_test_ok! GTR 0 echo 【不是很通畅】) else (echo 【网关不通!】)
	echo 如果【网关不通!】,家用路由器请直接重启路由器,然后检查是否电脑网线直接连接到路由器&echo 如果其中经过了交换机,请检查交换机到路由器网线是否正常
	set/p=正在检测DNS是否正常...<nul
	
) else (
	echo 当前使用【静态IP】模式



)
pause
if "!gateway!" NEQ "!inter_on_%inter_on%_gate!" echo 网卡设置网关和路由表中的网关不一样!



echo --!inter_on_%inter_on%! --在用的网卡名称
echo --!gateway! --当前网关(路由表网关)
echo --%inter_on% --在用网卡数
echo --!inter_on_%inter_on%_des! --网卡描述
echo --!inter_on_%inter_on%_mac! --网卡mac地址
echo --!inter_on_%inter_on%_dhcp! --是否启用DHCP(1/0)
echo --!inter_on_%inter_on%_ip! --网卡ip地址
echo --!inter_on_%inter_on%_mask! --网卡子网掩码
echo --!inter_on_%inter_on%_gate! --网卡网关
echo --!inter_on_%inter_on%_dhcp_ip! --网卡DHCP服务器地址
echo --!inter_on_%inter_on%_dns_ip! --网卡DNS服务器地址
pause

echo 其中生效的是
rem echo 1.!inter_on_%inter_on%!
pause
for %%a in (!inter_all!) do (

echo !inter_%%a_a! !inter_%%a_b! !inter_%%a_name!
pause
call :step1 !inter_%%a_a! !inter_%%a_b! !inter_%%a_name!

)
pause
:://///////结束

:://///////IP信息获取
:ipconfig_
for /f "tokens=1,2,3,4,5,6,* delims=.:() " %%a in ('ipconfig/all') do (
	rem echo a.%%a b.%%b c.%%c d.%%d e.%%e f.%%f
	if "%%b"=="!inter_on_%inter_on%!" set "on_=1"   !!确定是不是待处理网卡!!
	
	if "!on_!"=="1" (

		if "%%a"=="描述" set "inter_on_%inter_on%_des=%%b %%c %%d %%e %%f %%g"
		if "%%a"=="物理地址" set "inter_on_%inter_on%_mac=%%b"
		if "%%a %%b"=="DHCP 已启用" (
			if "%%c"=="是" set "inter_on_%inter_on%_dhcp=1"&set "dhcp_=1"  !!确定是不是DHCP!!
		)
		if "!dhcp_!"=="1" (
			if "%%a %%b"=="IPv4 地址" set "inter_on_%inter_on%_ip=%%c.%%d.%%e.%%f"
			if "%%a"=="子网掩码" set "inter_on_%inter_on%_mask=%%b.%%c.%%d.%%e"
			if "%%a"=="默认网关" set "inter_on_%inter_on%_gate=%%b.%%c.%%d.%%e"
			if "%%a %%b"=="DHCP 服务器" set "inter_on_%inter_on%_dhcp_ip=%%c.%%d.%%e.%%f"
			
		) else (			
			if "%%a %%b"=="IPv4 地址" set "num1+=1"&set "inter_on_%inter_on%_ip_!num1!=%%c.%%d.%%e.%%f"
			if "%%a"=="子网掩码" set "inter_on_%inter_on%_mask_!num1!=%%b.%%c.%%d.%%e"
			if "%%a"=="默认网关" set "inter_on_%inter_on%_gate=%%b.%%c.%%d.%%e"
		)
		set "ipv4_num=!num1!"
		if "%%a %%b"=="DNS 服务器" set "inter_on_%inter_on%_dns_ip=%%c.%%d.%%e.%%f"
	
	) 
	if defined inter_on_%inter_on%_dns_ip goto :eof
)
goto :eof

:://///////获取路由表中的网关
:get_gateway
route print | findstr "\<0.0.0.0\>" >nul
if !errorlevel!==1 echo 没有找到网关,现在上不去网
for /f "tokens=3 delims= " %%a in ('route print ^| findstr "\<0.0.0.0\>"') do set "gateway=%%a"
goto :eof

:://///////获取网卡信息
:inter
for /l %%i in (1 1 9) do if not defined inter_%%i_b (
set/a "inter_all_num+=1"									!!计算总网卡数!!
if "%1"=="已禁用" set/a "inter_a+=1"			!!计算已禁用数!!
if "%2"=="已断开连接" set/a "inter_b+=1"	!!计算已断开连接数!!
set "inter_all=!inter_all! %%i"						!!取得网卡数目表!!
set "inter_%%i_a=%1"											!!取得网卡禁用状态!!
set "inter_%%i_b=%2"											!!取得网卡连接状态!!
set "inter_%%i_name=%3"										!!取得网卡名称!!
goto :eof
)
goto :eof

:://///////获取mac地址 call :get_mac ip
:get_mac
set "mac=0"
for /f "tokens=2 delims= " %%a in ('arp -a ^| find "%1"') do if "%%a" NEQ "" (echo mac地址为%%a ) else (echo 获取不到mac地址&set "mac=1")
goto :eof

:://///////ping延时 call :ping_ 时间
:ping_
ping 127.1 -n %1 >nul
goto :eof

:://///////测试ip是否能ping通 call :ip_test ip
:ip_test
set "ip_test_ok=0"
for /l %%i in (1 1 %2) do (
ping %1 -n 1 -w 1
if !errorlevel!==0 set "p_test_ok+=1"
)
goto :eof

:://///////dns解析
:nslookup_
for /f "tokens=2 delims=: " %%a in ('nslookup www.baidu.com %1 ^|find "Addresses"') do set baidu1=%%a
if "!baidu1!" NEQ "" call :ip_test 
if "!baidu1!"=="" echo 【不通过!】&set/p=DNS %i 解析存在故障,检查谷歌dns解析是否正常...
for /f "tokens=2 delims=: " %%a in ('nslookup www.baidu.com 8.8.8.8 ^|find "Addresses"') do set baidu=%%a
for /f "tokens=2 delims=: " %%a in ('nslookup www.baidu.com 8.8.8.8 ^|find "Addresses"') do set baidu=%%a
for /f "tokens=2 delims=: " %%a in ('nslookup www.baidu.com 8.8.8.8 ^|find "Addresses"') do set baidu=%%a
if "!baidu!"=="" (
	echo 【不通过!】
	
)

goto :eof

:step1
if "%1"=="已禁用" (
echo 网卡 %2 已禁用,请确认:
echo 1.此网卡已手动禁用   2.不清楚
set/p step1_c=%cho_n%

ncpa.cpl

)
goto :eof


for /f "tokens=1,2* delims=:. " %%a in ('ipconfig/all') do (
if "%%a"=="无线局域网适配器" set wlan_name="%%b" & set wlan=0
	if !wlan!==0 (
	
	)
if "%%a"=="以太网适配器" (set lan_name="%%b" & set lan=0) else (set lan=2)
	if !lan!==0 (
	
	)
)
pause

:lan2
echo 请确认:
echo 1.是否存在网卡(装了网卡没有?)
echo 2.是否启用网卡
echo 3.退回重新检测
set/p cho_lan2=输入数字进行进一步检查:、
if "!cho_lan2!"="1" echo 请在即将打开的“设备管理器”窗口中查看“网络适配器”项中是否存在网卡&pause&start hdwwiz.cpl

:wlan_

Sevenfal

这个人太懒什么东西都没留下

文章评论(0)