@echo off
title TESTE COMPLETO DE REDE
color 0B
chcp 65001 >nul
setlocal EnableDelayedExpansion

:: =========================================
:: ELEVAR PARA ADMIN
:: =========================================

net session >nul 2>&1
if %errorlevel% neq 0 (
    echo Solicitando privilegios administrativos...
    powershell -Command "Start-Process '%~f0' -Verb RunAs"
    exit
)

:: =========================================
:: MENU PRINCIPAL
:: =========================================

:MENU

cls
echo ======================================================
echo              TESTE COMPLETO DE REDE
echo ======================================================
echo.
echo  1  - Teste de Qualidade da Rede
echo  2  - Descobrir IP Publico
echo  3  - Teste de Portas de Saida
echo  4  - Teste de Portas de Entrada
echo  5  - Teste de Velocidade
echo  6  - IPConfig /All
echo  7  - Velocidade da Placa de Rede
echo  8  - Teste de Email
echo  9  - Verificacao de Blacklist
echo 10  - Teste Redes Sociais
echo 11  - Teste Jogos Online
echo.
echo 99  - EXECUTAR TODOS OS TESTES
echo.
echo  0  - SAIR
echo.
echo ======================================================

set /p opcao=Escolha uma opcao: 

if "%opcao%"=="1" goto TESTE1
if "%opcao%"=="2" goto TESTE2
if "%opcao%"=="3" goto TESTE3
if "%opcao%"=="4" goto TESTE4
if "%opcao%"=="5" goto TESTE5
if "%opcao%"=="6" goto TESTE6
if "%opcao%"=="7" goto TESTE7
if "%opcao%"=="8" goto TESTE8
if "%opcao%"=="9" goto TESTE9
if "%opcao%"=="10" goto TESTE10
if "%opcao%"=="11" goto TESTE11
if "%opcao%"=="99" goto TODOS
if "%opcao%"=="0" exit

goto MENU

:: =========================================
:: EXECUTAR TODOS
:: =========================================

:TODOS
call :TESTE1
call :TESTE2
call :TESTE3
call :TESTE4
call :TESTE5
call :TESTE6
call :TESTE7
call :TESTE8
call :TESTE9
call :TESTE10
call :TESTE11

cls
echo ======================================================
echo TODOS OS TESTES FORAM FINALIZADOS
echo ======================================================
echo.
pause
goto MENU

:: =========================================
:: TESTE 1 - QUALIDADE DA REDE
:: =========================================

:TESTE1

cls
echo ======================================================
echo 1 - TESTE DE QUALIDADE DA REDE
echo ======================================================
echo.

call :PINGTEST 1.1.1.1 CLOUDFLARE
echo.
call :PINGTEST 8.8.8.8 GOOGLE
pause
goto MENU

:PINGTEST

echo ======================================================
echo TESTANDO: %2
echo HOST: %1
echo ======================================================
echo.

powershell -NoProfile -ExecutionPolicy Bypass -Command "$p=Test-Connection '%1' -Count 20 -ErrorAction SilentlyContinue; if($null -eq $p){Write-Host 'SEM RESPOSTA' -ForegroundColor Red; exit}; $t=$p.ResponseTime; $m=[math]::Round(($t | Measure-Object -Average).Average,2); $mx=($t | Measure-Object -Maximum).Maximum; $mn=($t | Measure-Object -Minimum).Minimum; $j=$mx-$mn; Write-Host ('LATENCIA MEDIA : '+$m+' ms') -ForegroundColor Green; Write-Host ('MENOR LATENCIA : '+$mn+' ms'); Write-Host ('MAIOR LATENCIA : '+$mx+' ms'); Write-Host ('JITTER         : '+$j+' ms') -ForegroundColor Yellow; if($j -gt 30){Write-Host 'ALERTA: OSCILACAO ALTA' -ForegroundColor Red}else{Write-Host 'REDE ESTAVEL' -ForegroundColor Green}"

echo.
goto :EOF

:: =========================================
:: TESTE 2 - IP PUBLICO
:: =========================================

:TESTE2

cls
echo ======================================================
echo 2 - IP PUBLICO
echo ======================================================
echo.

for /f %%i in ('curl -4 -s icanhazip.com') do set IPPUBLICO=%%i

echo IP PUBLICO:
echo !IPPUBLICO!

echo.
pause
goto MENU

:: =========================================
:: TESTE 3 - PORTAS DE SAIDA
:: =========================================

:TESTE3

cls
echo ======================================================
echo 3 - TESTE DE PORTAS DE SAIDA
echo ======================================================
echo.

powershell -NoProfile -ExecutionPolicy Bypass -Command ^
"$tests=@( ^
@{Host='google.com';Port=443;Nome='HTTPS INTERNET'}, ^
@{Host='1.1.1.1';Port=53;Nome='DNS INTERNET'}, ^
@{Host='smtp.gmail.com';Port=25;Nome='SMTP 25'}, ^
@{Host='smtp.gmail.com';Port=465;Nome='SMTP SSL'}, ^
@{Host='smtp.gmail.com';Port=587;Nome='SMTP TLS'} ^
); ^
foreach($t in $tests){ ^
$r=Test-NetConnection -ComputerName $t.Host -Port $t.Port -WarningAction SilentlyContinue; ^
Write-Host ''; ^
Write-Host '=========================================' -ForegroundColor DarkGray; ^
Write-Host ('SERVICO: ' + $t.Nome) -ForegroundColor Cyan; ^
Write-Host ('HOST: ' + $t.Host); ^
Write-Host ('PORTA: ' + $t.Port); ^
if($r.TcpTestSucceeded){ ^
Write-Host 'STATUS: PORTA LIBERADA' -ForegroundColor Green ^
}else{ ^
Write-Host 'STATUS: POSSIVEL BLOQUEIO' -ForegroundColor Red ^
} ^
}"

echo.
pause
goto MENU

:: =========================================
:: TESTE 4 - PORTAS DE ENTRADA
:: =========================================

:TESTE4

cls
echo ======================================================
echo 4 - TESTE DE PORTAS DE ENTRADA
echo ======================================================
echo.

powershell -NoProfile -ExecutionPolicy Bypass -Command ^
"$ports=@(80,443,3389,22); ^
foreach($p in $ports){ ^
Write-Host ''; ^
Write-Host ('PORTA LOCAL: ' + $p) -ForegroundColor Cyan; ^
try{ ^
$l = New-Object System.Net.Sockets.TcpListener([IPAddress]::Any,$p); ^
$l.Start(); ^
Write-Host 'STATUS: PORTA LIVRE' -ForegroundColor Green; ^
$l.Stop(); ^
}catch{ ^
Write-Host 'STATUS: PORTA EM USO/BLOQUEADA' -ForegroundColor Red ^
} ^
}"

echo.
pause
goto MENU

:: =========================================
:: TESTE 5 - VELOCIDADE
:: =========================================

:TESTE5

cls
echo ======================================================
echo 5 - TESTE DE VELOCIDADE
echo ======================================================
echo.

set "SPEEDTEST=%temp%\speedtestcli\speedtest.exe"

:: =========================================
:: VERIFICA SE JA EXISTE
:: =========================================

if exist "%SPEEDTEST%" goto RUNSPEED

where speedtest.exe >nul 2>&1

if %errorlevel%==0 (
    for /f "delims=" %%i in ('where speedtest.exe') do (
        set "SPEEDTEST=%%i"
    )
    goto RUNSPEED
)

:: =========================================
:: DOWNLOAD AUTOMATICO
:: =========================================

echo Speedtest nao encontrado.
echo.
echo Baixando automaticamente...
echo.

powershell -NoProfile -ExecutionPolicy Bypass -Command ^
"$ProgressPreference='SilentlyContinue'; ^
$url='https://install.speedtest.net/app/cli/ookla-speedtest-1.2.0-win64.zip'; ^
$out='%temp%\speedtest.zip'; ^
$dest='%temp%\speedtestcli'; ^
Invoke-WebRequest -Uri $url -OutFile $out; ^
if(Test-Path $dest){Remove-Item $dest -Recurse -Force}; ^
Expand-Archive $out $dest -Force"

:: =========================================
:: VALIDACAO
:: =========================================

if not exist "%SPEEDTEST%" (
    echo.
    echo ERRO AO BAIXAR O SPEEDTEST
    echo.
    pause
    goto MENU
)

:: =========================================
:: EXECUCAO
:: =========================================

:RUNSPEED

cls
echo ======================================================
echo          EXECUTANDO SPEEDTEST
echo ======================================================
echo.
echo Aguarde...
echo.

"%SPEEDTEST%" --accept-license --accept-gdpr

echo.
echo ======================================================
echo TESTE FINALIZADO
echo ======================================================
echo.

pause
goto MENU

:: =========================================
:: TESTE 6 - IPCONFIG
:: =========================================

:TESTE6

cls
echo ======================================================
echo 6 - IPCONFIG /ALL
echo ======================================================
echo.

ipconfig /all

echo.
pause
goto MENU

:: =========================================
:: TESTE 7 - VELOCIDADE DA PLACA
:: =========================================

:TESTE7

cls
echo ======================================================
echo 7 - VELOCIDADE DA PLACA DE REDE
echo ======================================================
echo.

echo Verificando adaptadores...
echo.

netsh interface show interface

echo.
echo ======================================================
echo VELOCIDADE DOS ADAPTADORES
echo ======================================================
echo.

powershell -NoProfile -ExecutionPolicy Bypass -Command ^
"try { ^
$adapters = Get-NetAdapter ^| Where-Object {$_.Status -eq 'Up'}; ^
foreach($a in $adapters){ ^
Write-Host ''; ^
Write-Host ('PLACA: ' + $a.Name) -ForegroundColor Cyan; ^
Write-Host ('STATUS: ' + $a.Status) -ForegroundColor Green; ^
Write-Host ('VELOCIDADE: ' + $a.LinkSpeed) -ForegroundColor Yellow ^
} ^
} catch { ^
Write-Host ''; ^
Write-Host 'ERRO AO IDENTIFICAR VELOCIDADE DA PLACA' -ForegroundColor Red ^
}"

echo.
echo =========================================
echo REFERENCIA
echo =========================================
echo.
echo 10 Mbps   = Rede antiga
echo 100 Mbps  = Fast Ethernet
echo 1 Gbps    = Gigabit Ethernet
echo 2.5 Gbps  = Multigig
echo.

pause
goto MENU

:: =========================================
:: TESTE 8 - EMAIL
:: =========================================

:TESTE8

cls
echo ======================================================
echo 8 - TESTE DE EMAIL
echo ======================================================
echo.

powershell -NoProfile -ExecutionPolicy Bypass -Command ^
"$ErrorActionPreference='SilentlyContinue'; ^
$targets=@( ^
@{Nome='GMAIL SMTP SSL';Host='smtp.gmail.com';Port=465}, ^
@{Nome='GMAIL SMTP TLS';Host='smtp.gmail.com';Port=587}, ^
@{Nome='OUTLOOK SMTP';Host='smtp.office365.com';Port=587}, ^
@{Nome='HOSTINGER SMTP';Host='smtp.hostinger.com';Port=465} ^
); ^
foreach($t in $targets){ ^
Write-Host ''; ^
Write-Host '=========================================' -ForegroundColor DarkGray; ^
Write-Host ('SERVICO: ' + $t.Nome) -ForegroundColor Cyan; ^
$r=Test-NetConnection -ComputerName $t.Host -Port $t.Port -WarningAction SilentlyContinue; ^
if($r.TcpTestSucceeded){ ^
Write-Host 'STATUS: ACESSO LIBERADO' -ForegroundColor Green ^
}else{ ^
Write-Host 'STATUS: SEM ACESSO / BLOQUEADO' -ForegroundColor Red ^
} ^
}"

echo.
pause
goto MENU

:: =========================================
:: TESTE 9 - BLACKLIST
:: =========================================

:TESTE9

cls
echo ======================================================
echo 9 - VERIFICACAO DE BLACKLIST
echo ======================================================
echo.

for /f %%i in ('curl -4 -s icanhazip.com') do set IPPUBLICO=%%i

echo IP PUBLICO DETECTADO:
echo !IPPUBLICO!
echo.

echo Consultando blacklists...
echo Aguarde...
echo.

powershell -NoProfile -ExecutionPolicy Bypass -Command ^
"$ip='!IPPUBLICO!'; ^
$ErrorActionPreference='SilentlyContinue'; ^
if([string]::IsNullOrWhiteSpace($ip)){ ^
Write-Host 'ERRO: NAO FOI POSSIVEL IDENTIFICAR O IP PUBLICO' -ForegroundColor Red; ^
exit ^
}; ^
$rev=($ip.Split('.')[3]+'.'+$ip.Split('.')[2]+'.'+$ip.Split('.')[1]+'.'+$ip.Split('.')[0]); ^
$dnsbls=@( ^
'zen.spamhaus.org', ^
'bl.spamcop.net', ^
'dnsbl.sorbs.net', ^
'b.barracudacentral.org', ^
'psbl.surriel.com', ^
'ubl.unsubscore.com' ^
); ^
$detectadas=@(); ^
foreach($dnsbl in $dnsbls){ ^
Write-Host ('TESTANDO: ' + $dnsbl) -ForegroundColor Cyan; ^
try{ ^
$r=Resolve-DnsName ($rev + '.' + $dnsbl) -Type A -ErrorAction Stop; ^
if($r){ ^
$detectadas += $dnsbl ^
} ^
}catch{} ^
}; ^
Write-Host ''; ^
Write-Host '=========================================' -ForegroundColor DarkGray; ^
if($detectadas.Count -gt 0){ ^
Write-Host 'STATUS FINAL: IP LISTADO EM BLACKLIST' -ForegroundColor Red; ^
Write-Host ''; ^
Write-Host 'BLACKLISTS DETECTADAS:' -ForegroundColor Yellow; ^
foreach($d in $detectadas){ ^
Write-Host (' - ' + $d) -ForegroundColor Red ^
} ^
}else{ ^
Write-Host 'STATUS FINAL: IP LIMPO / NAO LISTADO' -ForegroundColor Green ^
}"

echo.
echo =========================================
echo LEGENDA
echo =========================================
echo.
echo IP LIMPO:
echo - Menor chance de bloqueio de emails
echo - Melhor reputacao publica
echo.
echo IP LISTADO:
echo - Emails podem cair em SPAM
echo - Alguns provedores podem bloquear envio
echo - Pode ser necessario solicitar DELIST
echo.

pause
goto MENU

:: =========================================
:: TESTE 10 - REDES SOCIAIS
:: =========================================

:TESTE10

cls
echo ======================================================
echo 10 - TESTE REDES SOCIAIS
echo ======================================================
echo.

call :SOCIAL youtube.com YOUTUBE
call :SOCIAL instagram.com INSTAGRAM
call :SOCIAL facebook.com FACEBOOK
call :SOCIAL x.com TWITTER-X
call :SOCIAL tiktok.com TIKTOK
call :SOCIAL kwai.com KWAI

echo.
pause
goto MENU

:SOCIAL

echo =========================================
echo REDE SOCIAL: %2
echo HOST: %1
echo.

:: =========================================
:: TESTE DE LATENCIA
:: =========================================

ping %1 -n 4 > "%temp%\social.txt"

find "TTL=" "%temp%\social.txt" >nul

if %errorlevel%==0 (

    for /f "tokens=7 delims== " %%a in ('findstr /i "Average" "%temp%\social.txt"') do (
        set LATENCIA=%%a
    )

    echo LATENCIA MEDIA: !LATENCIA!

) else (

    echo LATENCIA: SEM RESPOSTA
)

echo.

:: =========================================
:: TESTE HTTPS
:: =========================================

powershell -NoProfile -Command ^
"$r=Test-NetConnection -ComputerName '%1' -Port 443 -WarningAction SilentlyContinue; ^
if($r.TcpTestSucceeded){ ^
Write-Host 'HTTPS: ACESSO NORMAL' -ForegroundColor Green ^
}else{ ^
Write-Host 'HTTPS: BLOQUEADO OU INSTAVEL' -ForegroundColor Red ^
}"

echo.

:: =========================================
:: TESTE DE VELOCIDADE CDN
:: =========================================

echo Testando carregamento de videos...

powershell -NoProfile -ExecutionPolicy Bypass -Command ^
"$ProgressPreference='SilentlyContinue'; ^
try{ ^
$time = Measure-Command { ^
Invoke-WebRequest 'https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png' -UseBasicParsing ^| Out-Null ^
}; ^
$ms=[math]::Round($time.TotalMilliseconds); ^
Write-Host ('TEMPO DE CARREGAMENTO: ' + $ms + ' ms'); ^
if($ms -le 500){ ^
Write-Host 'QUALIDADE VIDEO: OTIMA (1080p/4K)' -ForegroundColor Green ^
}elseif($ms -le 1200){ ^
Write-Host 'QUALIDADE VIDEO: BOA (720p/1080p)' -ForegroundColor Yellow ^
}elseif($ms -le 2500){ ^
Write-Host 'QUALIDADE VIDEO: MEDIA (480p/720p)' -ForegroundColor DarkYellow ^
}else{ ^
Write-Host 'QUALIDADE VIDEO: RUIM / BUFFERING' -ForegroundColor Red ^
} ^
}catch{ ^
Write-Host 'ERRO AO TESTAR CDN/VIDEOS' -ForegroundColor Red ^
}"

echo.
goto :EOF

:: =========================================
:: TESTE 11 - JOGOS ONLINE
:: =========================================

:TESTE11

cls
echo ======================================================
echo 11 - TESTE DE JOGOS ONLINE
echo ======================================================
echo.

call :GAME steamcommunity.com 27015 CS2
call :GAME valorant.com 443 VALORANT
call :GAME leagueoflegends.com 2099 LEAGUE-OF-LEGENDS

echo.
pause
goto MENU

:GAME

echo =========================================
echo JOGO : %3
echo HOST : %1
echo PORTA: %2
echo =========================================
echo.

ping %1 -n 15 > "%temp%\game.txt"

find "TTL=" "%temp%\game.txt" >nul

if %errorlevel% neq 0 (

    echo LATENCIA: NAO DISPONIVEL
    echo ESTE SERVIDOR BLOQUEIA ICMP/PING
    echo ISSO E NORMAL EM ALGUNS JOGOS
    goto TESTAPORTA
)

:: =========================================
:: VALORES PADRAO
:: =========================================

set LATENCIA=0
set MAXIMO=0
set MINIMO=0
set PERDA=0

:: =========================================
:: PERDA
:: =========================================

for /f "tokens=6 delims==(), " %%a in ('findstr /i "Lost Perdidos" "%temp%\game.txt"') do (
    set PERDA=%%a
)

:: =========================================
:: MEDIA
:: =========================================

for /f "tokens=2,3,4 delims== " %%a in ('findstr /i "Minimum Maximum Average Minimo Maximo Media" "%temp%\game.txt"') do (
    set MINIMO=%%a
    set MAXIMO=%%b
    set LATENCIA=%%c
)

:: =========================================
:: LIMPEZA
:: =========================================

set LATNUM=!LATENCIA:ms=!
set LATNUM=!LATNUM:<1=1!

set MAXNUM=!MAXIMO:ms=!
set MAXNUM=!MAXNUM:<1=1!

set MINNUM=!MINIMO:ms=!
set MINNUM=!MINNUM:<1=1!

if "!LATNUM!"=="" set LATNUM=0
if "!MAXNUM!"=="" set MAXNUM=0
if "!MINNUM!"=="" set MINNUM=0

echo LATENCIA MEDIA : !LATNUM! ms
echo MENOR LATENCIA : !MINNUM! ms
echo MAIOR LATENCIA : !MAXNUM! ms
echo PERDA PACOTES  : !PERDA!%%
echo.

:: =========================================
:: JITTER
:: =========================================

set /a JITTER=MAXNUM-MINNUM

echo OSCILACAO/JITTER: !JITTER! ms
echo.

if !JITTER! LEQ 10 (
    echo ESTABILIDADE: OTIMA
) else if !JITTER! LEQ 30 (
    echo ESTABILIDADE: BOA
) else (
    echo ESTABILIDADE: INSTAVEL
)

echo.

:: =========================================
:: SCORE
:: =========================================

if !LATNUM! LEQ 30 if !PERDA! EQU 0 if !JITTER! LEQ 10 (
    echo SCORE FINAL: A+ ^(COMPETITIVO^)
) else if !LATNUM! LEQ 60 if !PERDA! LEQ 1 (
    echo SCORE FINAL: A ^(OTIMO^)
) else if !LATNUM! LEQ 100 if !PERDA! LEQ 3 (
    echo SCORE FINAL: B ^(JOGAVEL^)
) else if !LATNUM! LEQ 150 (
    echo SCORE FINAL: C ^(INSTAVEL^)
) else (
    echo SCORE FINAL: D ^(RUIM PARA JOGOS^)
)

echo.

:TESTAPORTA

:: =========================================
:: TESTE TCP
:: =========================================

powershell -NoProfile -ExecutionPolicy Bypass -Command ^
"try{ ^
$r=Test-NetConnection -ComputerName '%1' -Port %2 -WarningAction SilentlyContinue; ^
if($r.TcpTestSucceeded){ ^
Write-Host 'STATUS SERVIDOR: ACESSO LIBERADO' -ForegroundColor Green ^
}else{ ^
Write-Host 'STATUS SERVIDOR: SEM ACESSO OU PORTA BLOQUEADA' -ForegroundColor Red ^
} ^
}catch{ ^
Write-Host 'ERRO AO TESTAR PORTA' -ForegroundColor Red ^
}"

echo.

:: =========================================
:: TRACERT
:: =========================================

echo ANALISANDO ROTA...
echo.

tracert -d -h 8 %1

echo.
goto :EOF
echo.

:: =========================================
:: TESTE DE ROTA
:: =========================================

echo ANALISANDO ROTA...
echo.

tracert -d -h 8 %1

echo.
goto :EOF

:: =========================================
:: TESTE DE LATENCIA
:: =========================================

ping %1 -n 4 > "%temp%\game.txt"

find "TTL=" "%temp%\game.txt" >nul

if %errorlevel%==0 (

    for /f "tokens=7 delims== " %%a in ('findstr /i "Average" "%temp%\game.txt"') do (
        set "LATENCIA=%%a"
    )

    echo LATENCIA MEDIA: !LATENCIA!

    set "LATNUM=!LATENCIA:ms=!"

    if !LATNUM! LEQ 30 (
        echo QUALIDADE: OTIMA PARA JOGOS
    ) else if !LATNUM! LEQ 70 (
        echo QUALIDADE: BOA PARA JOGOS
    ) else if !LATNUM! LEQ 120 (
        echo QUALIDADE: JOGAVEL
    ) else (
        echo QUALIDADE: LATENCIA ALTA
    )

) else (

    echo LATENCIA: SEM RESPOSTA
)

echo.

:: =========================================
:: TESTE DE PORTA
:: =========================================

powershell -NoProfile -ExecutionPolicy Bypass -Command ^
"try{ ^
$r=Test-NetConnection -ComputerName '%1' -Port %2 -WarningAction SilentlyContinue; ^
if($r.TcpTestSucceeded){ ^
Write-Host 'STATUS PORTA: ACESSO LIBERADO' -ForegroundColor Green ^
}else{ ^
Write-Host 'STATUS PORTA: BLOQUEADA OU SEM ACESSO' -ForegroundColor Red ^
} ^
}catch{ ^
Write-Host 'ERRO AO TESTAR PORTA' -ForegroundColor Red ^
}"

echo.
goto :EOF