Quick and easy batch file to find the maximum packet sizes across a network/WAN. Download the batchfile or copy/paste the code below into your own file.


Example usage: mtu.bat 8.8.8.8




@echo off
rem This batch will find out maximum MTU between local and remote host.

SetLocal EnableDelayedExpansion
set MTU=1473
set LASTGOOD=0
set LASTBAD=65536
set PACKETSIZE=28
set SERVER=



rem Check presence of target parameter.
if "%~1" EQU "" (
  echo.
  echo Usage: mtu IPv4 ^| hostname
  echo.
  echo On success the result is assigned to %%MAXMTU%% variable
  echo and %%ErrorLevel%% is set to 0. On error the %%MAXMTU%%
  echo variable is set to -1 value and %%ErrorLevel%% is set to
  echo non-zero value.
  goto :error
) else (
  set SERVER=%~1
)

rem Check server reachability.
ping -n 1 -l 0 -f -4 !SERVER! 1>nul
if !ERRORLEVEL! NEQ 0 (
  echo Error: cannot ping !SERVER!. Run "ping -n 1 -l 0 -f -4 !SERVER!" to see details.
  goto :error
)



:seek
rem Start looking for the maximum MTU.
ping -n 1 -l !MTU! -f -4 !SERVER! 1>nul
if !ERRORLEVEL! EQU 0 (
  set /A LASTGOOD=!MTU!
  set /A "MTU=(!MTU! + !LASTBAD!) / 2"
  if !MTU! NEQ !LASTGOOD! goto :seek
) else (
  set /A LASTBAD=!MTU!  
  set /A "MTU=(!MTU! + !LASTGOOD!) / 2"
  if !MTU! NEQ !LASTBAD! goto :seek
)



rem Print the result.
set /A "MAXMTU=!LASTGOOD! + !PACKETSIZE!"
echo Maximum MTU for !SERVER!: !MAXMTU! bytes.

rem Export %MAXMTU% variable.
EndLocal & set MAXMTU=%MAXMTU%
exit /B 0



:error
rem When something unexpected occurs.
EndLocal & set MAXMTU=-1
exit /B 1