neomatic
Goto Top

Proxy Server per batch überprüfen?

Hallo liebe Community,

ich habe ein Liste voll mit freien Proxy Servern und möchte die nun auf ereichbarket und Geschwindigkeit prüfen. Doch leider bin ich im Thema Batch Scripting nicht gerade ein Profi.

Um einen Proxy auf erreicbarkeit zu prüfen habe ich dieses Script gebastelt, was jedoch so seine Macken hat.

@echo off
cls

:test
echo.
echo  Teste Proxy...
for /f "tokens=1 delims=:" %%a in ('findstr /n . proxyliste.txt') do set zeilen=%%a  
set /a rnd=%random%%%zeilen%+1
for /f "tokens=1* delims=:" %%a in ('findstr /n . proxyliste.txt^|findstr "^%rnd%:"') do set proxy=%%b  
set ip=%proxy%
set ip=%ip:~0,15%
ping -n 2 -w 5000  %ip% >> ip-temp
if errorlevel 1 goto ping-fail

echo.
echo  Proxy %ip% erreichbar...
echo %proxy% >>proxy-ok.txt
echo %proxy% >>working-proxy.txt
for /f %%k in ('type proxy-ok.txt.txt') do FIND /V "%%k" proxyliste.txt > proxyliste-new.txt  
del /q proxyliste.txt
ren proxyliste-new.txt proxyliste.txt
del /q proxy-ok.txt 
del /q ip-temp
goto test

:ping-fail
echo. 
echo  Proxy %ip% nicht erreichbar... 
echo %proxy% >> proxy-tot.txt
for /f %%k in ('type proxy-tot.txt.txt') do FIND /V "%%k" proxyliste.txt > proxyliste-new.txt  
del /q proxyliste.txt
ren proxyliste-new.txt proxyliste.txt
del /q proxy-tot.txt 
del /q ip-temp
goto test

Dieses Script verarbeitet die Proxyliste jedoch nicht zeilenweise, sondern zufällig (anderst habe ich es nicht zum laufen bekommen, wie gesagt, bin darin kein Profi). Daher läuft das Script natürlich endlos. Mir wäre es allerdings zeilenweise lieber. Wenn mir da jemand helfen könnte.

Ist es eigentlich auch möglich, per batch den Proxy auf seine Geschwindigkeit zu überprüfen? Denn viele Server in der Liste sind doch recht langsam.

Wäre nett wenn mir da jemand helfen könnte, denn so langsam steh ich echt auf dem schlauch.


Gruß

Neomatic

Content-Key: 126960

Url: https://administrator.de/contentid/126960

Printed on: April 25, 2024 at 17:04 o'clock

Member: bastla
bastla Oct 12, 2009 at 20:56:27 (UTC)
Goto Top
Hallo Neomatic und willkommen im Forum!

Eigentlich sollte Folgendes (ist allerdings ungetestet) genügen:
@echo off & setlocal enabledelayedexpansion
echo.
echo  Teste Proxy...
for /f "delims=" %%a in (proxyliste.txt) do (  
    set proxy=%%a
    set ip=!proxy!
    set ip=!ip:~0,15!
    ping -n 2 -w 5000  !ip!
    if errorlevel 1 (
        echo. 
        echo  Proxy !ip! nicht erreichbar... 
        echo !proxy! >>proxy-tot.txt
    ) else (
        echo.
        echo  Proxy !ip! erreichbar...
        echo !proxy! >>proxy-ok.txt
        echo !proxy! >>working-proxy.txt
    )
)
Grüße
bastla
Member: Neomatic
Neomatic Oct 13, 2009 at 14:33:24 (UTC)
Goto Top
Hallo,

vielen Dank, das script funktioniert perfekt.

Verstehe ich das richtig, das alle Befehle die nach der for schleife kommen in eine Subroutine gepackt werden und diese dann für jede zeile in der Proxy.txt angewandt werden?

Dann könnte man ja hingehen und eine weite for schleife einfügen, wo der Proxy eingetragen wird, eine URL angesurft wird und in der Webseite nach einem bestimmten Text gesucht wird. Wenn der Text dann gefunden wird, wird der Proxy ein eine weitere Liste eingetragen.

Ist soetwas zu realisieren?

Aber zumindest schonmal vielen Dank für das script.

Gruß

Neomatic
Member: bastla
bastla Oct 13, 2009 at 14:49:57 (UTC)
Goto Top
Hallo Neomatic!
Verstehe ich das richtig, das alle Befehle die nach der for schleife kommen in eine Subroutine gepackt werden und diese dann für jede zeile in der Proxy.txt angewandt werden?
Jein - es wird für jede Zeile der "proxyliste.txt" der Teil nach dem "do" ausgeführt - dieser Teil besteht aber nur "optisch" aus mehreren Zeilen - tatsächlich ist es (wegen der Klammern) eigentlich nur eine einzige (lange face-wink) Zeile (weshalb auch "delayedExpansion" verwendet werden muss).

Eine "echte" Subroutine-Version würde so aussehen:
@echo off & setlocal
echo.
echo  Teste Proxy...
for /f "delims=" %%a in (proxyliste.txt) do call :ProcessProxy "%%a"  
goto :eof

:ProcessProxy
set "proxy=%~1"  
set ip=%proxy%
set ip=%ip:~0,15%
ping -n 2 -w 5000  %ip%
if errorlevel 1 (
    echo. 
    echo  Proxy %ip% nicht erreichbar... 
    echo %proxy% >>proxy-tot.txt
) else (
    echo.
    echo  Proxy %ip% erreichbar...
    echo %proxy% >>proxy-ok.txt
    echo %proxy% >>working-proxy.txt
)
goto :eof
Hier wird tatsächlich bei jedem Schleifendurchlauf das Unterprogramm ":ProcessProxy" aufgerufen, wobei sich dieses wie ein neuer Batch verhält (und daher zB die als Parameter übergebene Zeile der "proxyliste.txt" als %1 übernimmt).

In diesem Unterprogramm könntest Du zB auch if errorlevel 1 wieder mit goto :ping-fail verwenden - Du musst nur dafür sorgen, dass jeder Zweig mit einem goto :eof (für den Rücksprung) endet und auch das "Hauptprogramm" mit einem goto :eof abschließen, damit nicht nach der Schleife nochmals das Unterprogramm durchlaufen wird.

Grüße
bastla
Member: Neomatic
Neomatic Oct 14, 2009 at 12:14:38 (UTC)
Goto Top
Hallo bastla,

OK dann kann ich damit mal versuchen, den URL Check über den Proxy zu realisieren.


Aber noch eine Sache......


Ich muss bis jetzt die IP Adressen in der Proxy.txt immer in einem bestimmten Format speichern:

211.138.124.229:0080
212.53.5.43    :80      
200.7.196.141  :80      
58.240.237.32  :80      
120.143.250.8  :80      
....

Sprich, ich muss darauf achten, dass vor dem doppelpunkt 15 Zeichen sind (falls weniger mit leerzeichen auffüllen). Da ich hier aber eine Liste mit knapp 2000 IP Adressen habe, würde das sehr lange dauern bis ich alle formatiert habe. Ginge das auch irgendwie zu automatisieren (mit VBS sollte es gehen, aber da kenn ich mich überhaupt nicht aus) ?


Vielen Dank für eure Hilfe.......


Gruß

Neomatic
Member: bastla
bastla Oct 14, 2009 at 13:05:30 (UTC)
Goto Top
Hallo Neomatic!

Da Du ja den Doppelpunkt als Trennzeichen zur Verfügung hast, kannst Du einfach mit
for /f "tokens=1,2 delims=:" %%a in (proxyliste.txt) do call :ProcessProxy %%a %%b
auslesen und dann Adresse und Port als %1 und %2 im Unterprogramm übernehmen.

Die Anführungszeichen um "%%a" und "%%b" habe ich hier weggelassen, da Adresse bzw Port ja ohnehin keine Leerzeichen beinhalten.

Grüße
bastla
Member: Neomatic
Neomatic Oct 14, 2009 at 18:30:19 (UTC)
Goto Top
Hallo,


so nun habe ich das Script fertig und es funktioniert bestens.

Hier das Script:

@echo off & setlocal enabledelayedexpansion 
cls
set Countall=0
set countping=0
set countok=0
echo.
echo    *******************                                                           
echo    *  ProxyCheck v2  *                                       
echo    *******************                                       
echo.                                                                                                              
echo  Dieses Script ueberprueft alle Proxy Server in der Datei
echo  "Proxy.txt" und schreibt diese bei Tauglichkeit in die   
echo  Datei "working-proxy.txt".  
echo.
if exist Proxy.txt goto start
echo.
echo  Datei "Proxy.txt" nicht gefunden. Programm wird beendet!  
echo.
wait 5
exit

:start
echo.
wait 2
echo. 
echo  Teste Proxy-Server... 

for /f "tokens=1,2 delims=:" %%a in (Proxy.txt) do call :ProcessPing %%a %%b  
if exist proxy-online.txt type proxy-online.txt >>proxy-ping-ok-%date%.txt
echo.
echo. Proxy-Server auf erreichbarkeit geprueft...
echo.
echo  Pruefe Proxy-Server auf tauglichkeit...
for /f "tokens=1,2 delims=:" %%a in (proxy-online.txt) do call :ProcessReq %%a %%b  


echo.
echo  Durchlauf beendet. 
echo.                                                           >>Logs/Log-%date%.txt
echo      ProxyCheck v2                                         >>Logs/Log-%date%.txt
echo    -----------------                                       >>Logs/Log-%date%.txt
echo.                                                           >>Logs/Log-%date%.txt
echo %date% %time:~0,8%                                         >>Logs/Log-%date%.txt
echo.                                                                 >>Logs/Log-%date%.txt
echo  Es wurden !countall! Proxies geprueft:                          >>Logs/Log-%date%.txt 
echo.                                                                 >>Logs/Log-%date%.txt
echo  !countping! haben geantwortet....                               >>Logs/Log-%date%.txt
echo.                                                                 >>Logs/Log-%date%.txt
echo  !countok! funktionieren...                                      >>Logs/Log-%date%.txt
echo.                                                                 >>Logs/Log-%date%.txt
echo.                                                         >>Logs/Log-%date%.txt
echo  Funktionierende Proxies:                                >>Logs/Log-%date%.txt
echo --------------------------                               >>Logs/Log-%date%.txt
echo.                                                         >>Logs/Log-%date%.txt
type working-proxy-%date%.txt                                 >>Logs/Log-%date%.txt
echo.                                                         >>Logs/Log-%date%.txt
echo.                                                         >>Logs/Log-%date%.txt  
echo  Erreichbare Proxies:                                    >>Logs/Log-%date%.txt
echo ----------------------                                   >>Logs/Log-%date%.txt
echo.                                                         >>Logs/Log-%date%.txt
type  proxy-ping-ok-%date%.txt                                >>Logs/Log-%date%.txt
echo.                                                         >>Logs/Log-%date%.txt
echo. 
echo  Es wurden !countall! Proxies geprueft:                         
echo.                                                                 
echo  !countping! haben geantwortet....                           
echo.                                                                 
echo  !countok! funktionieren...                               
echo.                                                              
echo.
echo. 
set /p exit=Mit beliebiger Taste Programm beenden!
echo.
del /q Proxy.txt
echo. >>Proxy.txt
if exist proxy-online.txt del /q proxy-online.txt
goto :eof

:ProcessPing
set proxy=%1:%2
set ip=%1
set /a countall=!countall! + 1
ping -n 2 -w 5000  !ip! >>ip-temp
if errorlevel 1 ( 
    echo.  
    echo  Proxy !ip! nicht erreichbar...  
    del /q ip-temp
 ) else ( 
    echo. 
    echo  Proxy !ip! erreichbar... 
    del /q ip-temp
    echo !proxy! >>proxy-online.txt
    set /a countping=!countping! + 1
    ) 
goto :eof


:ProcessReq
set proxy=%1:%2
set ip=%1
set port=%2
set http_proxy=http://!proxy!
set https_proxy=https://proxy!
set ftp_proxy=ftp://proxy!
wget -q --proxy=on -t 1 --timeout=15 http://www.showmemyip.com/
if not exist index.html echo  >>index.html
findstr /c:"GetIPAddress" index.html >>temp  
if errorlevel 1 (
    echo.  
    echo  Proxy !ip! wird verworfen... 
    if exist index.html del /q index.html
    if exist temp del /q temp
  ) else (
      echo.
      echo  Proxy !ip! funktioniert :D ...
      if exist temp del /q temp
      if exist index.html del /q index.html
      echo !proxy! >>working-proxy-%date%.txt
      set /a countok=!countok! + 1 
      )      
goto :eof


95% der Server die am Schluss als funktionierend eingestuft wurden, sind erreichbar und funktionieren.

Vielen Dank für deine Hilfe.


Gruß

Neomatic