BAT ile bir DNS adresine örneğin: 1.1.1.1 adresine ping atmak ve bu değerden sadece Ms'yi almak istiyorum.
Normalde ping atınca böyle oluyor:
Ben burada ping atma sonrası gelen time='dan sonraki değeri ya da Ping'den tamamen sonra ki average değerini almasını istiyorum bunu Python'ya da normal batch ile yapabilir miyim? (Python'dan kastettiğim Python'da OS modülü)
Python OS modülü ile yapma bunu. Linux ve Windows sistemlerde farklı çıktı olması bir yana önerilen bir yöntem hiçbir zaman olmadı ve olmayacak.
OS modülü yerine ping3 modülünü kullanabilirsin. Harici olarak kurmak gerekir. Eğer modül kurmak istemiyorsan socket modülü ile ICMP paketi göndermen, takip etmen, süresini ölçmen ve gerektiği yerde hata verdirtmen gerekiyor.
SET ms= Hata.
FOR /F "tokens=4 delims==" %%i IN ('ping.exe -n 1 %1 ^| FIND "ms"') DO SET ms=%%i
GOTO:EOF
:setESC
for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (
set ESC=%%b
exit /B 0
)
exit /B 0
Fakat diyelim DNS adreslerinden birisi 14ms diğeri 15ms sonuncusu da 25ms. Bunlardan en küçük ms değerine (14ms) sahip olanı nasıl bulabilirim? Yani değerleri ölçmek istiyorum daha anlaşılır olması için:
Bunlardan en düşük ms değerine sahip olan 1.1.1.1 şimdi ben kodun bunu otomatik ölçmesini ve sonuçta 1.1.1.1 en hızlı DNS adresi yazısını vermesini istiyorum ne kadar aradım ama bulamadım
SET ms= Hata.
FOR /F "tokens=4 delims==" %%i IN ('ping.exe -n 1 %1 ^| FIND "ms"') DO SET ms=%%i
GOTO:EOF
:setESC
for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (
set ESC=%%b
exit /B 0
)
exit /B 0
Fakat diyelim DNS adreslerinden birisi 14ms diğeri 15ms sonuncusu da 25ms. Bunlardan en küçük ms değerine (14ms) sahip olanı nasıl bulabilirim? Yani değerleri ölçmek istiyorum daha anlaşılır olması için:
Bunlardan en düşük ms değerine sahip olan 1.1.1.1 şimdi ben kodun bunu otomatik ölçmesini ve sonuçta 1.1.1.1 en hızlı DNS adresi yazısını vermesini istiyorum ne kadar aradım ama bulamadım
@echo off
setlocal enabledelayedexpansion
set ip1=google.com
set ip2=facebook.com
set ip3=192.168.1.1
set min_ms=999999
set min_ip=
for %%i in (%ip1% %ip2% %ip3%) do (
echo Ping atılıyor: %%i
for /F "tokens=5 delims==< " %%j in ('ping -n 1 %%i ^| find "TTL="') do (
set "ms=%%j"
set "ms=!ms:~0,-2!"
if !ms! lss !min_ms! (
set min_ms=!ms!
set min_ip=%%i
)
)
)
echo Aralarında en az değere sahip sunucu: %min_ip%
pause >nul
@echo off
setlocal enabledelayedexpansion
set ip1=google.com
set ip2=facebook.com
set ip3=192.168.1.1
set min_ms=999999
set min_ip=
for %%i in (%ip1% %ip2% %ip3%) do (
echo Ping atılıyor: %%i
for /F "tokens=5 delims==< " %%j in ('ping -n 1 %%i ^| find "TTL="') do (
set "ms=%%j"
set "ms=!ms:~0,-2!"
if !ms! lss !min_ms! (
set min_ms=!ms!
set min_ip=%%i
)
)
)
echo Aralarında en az değere sahip sunucu: %min_ip%
pause >nul
Bunun yerine ip adreslerinin tek değişkende saklanması daha uygun olur.
Kod:
@echo off
setlocal enabledelayedexpansion
set ip ="1.1.1.1 1.0.0.1 8.8.8.8"
set min_ms=999999
set min_ip=
for %%i in (%ip%) do (
for /F "tokens=5 delims==< " %%j in ('ping -n 1 %%i ^| find "TTL="') do (
set "ms=%%j"
set "ms=!ms:~0,-2!"
if !ms! lss !min_ms! (
set min_ms=!ms!
set min_ip=%%i
)
)
)
echo Aralarında en az pingli sunucu %min_ms% ping ile %min_ip%
pause >nul