一个自动测试MTU的批处理。本地测试结果:
ipaddress:192.168.1.1
try : 1000 [0 , 2000]
try : 1500 [1000 , 2000]
try : 1250 [1000 , 1500]
try : 1375 [1250 , 1500]
try : 1437 [1375 , 1500]
try : 1468 [1437 , 1500]
try : 1484 [1468 , 1500]
try : 1476 [1468 , 1484]
try : 1472 [1468 , 1476]
try : 1474 [1472 , 1476]
try : 1473 [1472 , 1474]
try : 1472 [1472 , 1473]
package: 1472
MTU : 1500
Press any key to continue . . .
脚本:
@echo
off
chcp 437 > nul
set / p ip = ipaddress:
if %ip% .==. goto :eof
echo .
set con =
for / f " tokens=1 delims= " %%a in ( 'ping %ip% -n 1 ^| find " Reply " ' ) do set con = %%a
if %con% .==. goto :discon
set min = 0
set max = 2000
:test
call :try %min% %max%
if %df% .==. (
if %min% == %package% goto :result
set min = %package%
) else (
set max = %package%
)
goto :test
goto :eof
:result
echo .
echo package: %package%
set / a mtu = %package% + 28
echo MTU : %mtu%
echo .
pause
goto :eof
:try
set / a package =( %1 + %2 )/ 2
echo try : %package% [ %1 , %2 ]
call :ping %package%
goto :eof
goto :eof
:ping
set df =
for / f " tokens=1 delims= " %%a in ( 'ping %ip% -f -l %1 -n 1 ^| find " DF " ' ) do set df = %%a
goto :eof
:discon
echo Error: can not connect to %ip%
echo .
pause
chcp 437 > nul
set / p ip = ipaddress:
if %ip% .==. goto :eof
echo .
set con =
for / f " tokens=1 delims= " %%a in ( 'ping %ip% -n 1 ^| find " Reply " ' ) do set con = %%a
if %con% .==. goto :discon
set min = 0
set max = 2000
:test
call :try %min% %max%
if %df% .==. (
if %min% == %package% goto :result
set min = %package%
) else (
set max = %package%
)
goto :test
goto :eof
:result
echo .
echo package: %package%
set / a mtu = %package% + 28
echo MTU : %mtu%
echo .
pause
goto :eof
:try
set / a package =( %1 + %2 )/ 2
echo try : %package% [ %1 , %2 ]
call :ping %package%
goto :eof
goto :eof
:ping
set df =
for / f " tokens=1 delims= " %%a in ( 'ping %ip% -f -l %1 -n 1 ^| find " DF " ' ) do set df = %%a
goto :eof
:discon
echo Error: can not connect to %ip%
echo .
pause