Proxy Schleife mit HttpSetProxy

  • Hallo zusammen,

    Ich komme mit meinem Ping Proxy Script nicht weiter.
    Eigentlich sollte es ja nicht so schwierig sein...doch ich komme nicht weiter.

    Ich habe in einem Array 3 Proxy´s wovon der letzte funktioniert.
    Ich möchte das die Proxy´s angepingt werden und bei erfolg diesen Proxy mit HttpSetProxy nutzen.
    Nur das funktioniert nicht. Kaum aus der Schleife ist der Wert wohl noch vorhanden aber trotzdem erhalte ich eine Fehlermeldung wegen dem Array ... oder kein Array. :S

    Was mache ich den da Falsch? ?(

    [autoit]


    Local $aRecords[3]
    $aRecords[0] = "213.1.222.253:80"
    $aRecords[1] = "94.211.174.60:80"
    $aRecords[2] = "178.32.223.88:3128"

    [/autoit][autoit][/autoit][autoit]

    $y = 0

    [/autoit][autoit][/autoit][autoit]

    While 1
    $split = StringSplit($aRecords[$y],":")
    $ping = Ping($split[1],1500)

    [/autoit][autoit][/autoit][autoit]

    If $ping > 0 Then
    HttpSetProxy(2, $aRecords[$y])
    ConsoleWrite("Proxy = " & $aRecords[$y] &@CRLF&@CRLF)
    Exitloop
    Else
    ConsoleWrite("Lösche: " &$aRecords[$y] &" von Pos." &$y &@CRLF)
    _ArrayDelete($aRecords,$y)
    _ArrayDisplay($aRecords)
    ContinueLoop
    EndIf
    Wend

    [/autoit][autoit][/autoit][autoit]

    $url = "http://www.wieistmeineip.de"
    $get_source = BinaryToString(InetRead($url,16),4)
    $aArray = StringRegExp($get_source, '<h1 class="ip">(.*?)</h1>', 3)

    [/autoit]

    Gruß
    Norman

  • Du hast #include <Array.au3> vergessen.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Zum einen das, zum anderen ist ein Logikfehler drin. Wenn keiner der Proxys erreichbar ist sprichst du im vierten Durchlauf einen Arrayindex an, welcher nicht existiert, da du bei jedem nicht erfolgreichen Durchlauf den betreffenden Eintrag entfernst.

  • Zum einen das, zum anderen ist ein Logikfehler drin. Wenn keiner der Proxys erreichbar ist sprichst du im vierten Durchlauf einen Arrayindex an, welcher nicht existiert, da du bei jedem nicht erfolgreichen Durchlauf den betreffenden Eintrag entfernst.


    OK davon mal abgesehen. Wieso funktioniert HttpSetProxy nicht wenn er einen funktionierenden Proxy gefunden hat?

  • Wie stellst du fest ob der Proxy funktioniert / gesetzt wird? Da du etwas von einem Array Fehler erzählt hast ist davon auszugehen, dass das Script bereits in der Schleife abstürzt, weil eben keiner der Proxys erreichbar war.


    EDIT:

    Ahja, Proxy ist nicht gleich Proxy...

    Zitat von wieistmeineip.de


    Mit wieistmeineip.de finden Sie schnell und einfach heraus, mit welcher IP-Adresse Sie gerade online sind.
    (Funktioniert auch bei eingeschaltetem Proxy*)

    *Manche Proxy-Server unterdrücken die Weitergabe der eigentlichen Client-IP (HTTP_X_FORWARDED_FOR), in diesem Fall wird die IP-Adresse des Proxy-Servers angezeigt.

    2 Mal editiert, zuletzt von misterspeed (20. Mai 2013 um 10:59)

  • Wie stellst du fest ob der Proxy funktioniert / gesetzt wird? Da du etwas von einem Array Fehler erzählt hast ist davon auszugehen, dass das Script bereits in der Schleife abstürzt, weil eben keiner der Proxys erreichbar war.


    Mit der If Abfrage stell ich fest ob der Proxy funktioniert. Wenn dem so ist wird die Schleife beendet und HttpSetProxy sollte eigentlich den Proxy haben was aber nicht der Fall, weil wenn dem so wäre müsste er ja das script fortführen und mir die von "wieistmeineip.de" IP Adresse ausgeben die ich eigentlich durch den Proxy haben müsste.

  • Das Funktioniert:

    [autoit]

    #include <String.au3>
    #include <Array.au3>
    #include <Inet.au3>

    [/autoit][autoit][/autoit][autoit]

    ;#############################################################################
    ; P R O X Y - C H E C K

    [/autoit][autoit][/autoit][autoit]

    $proxy = "77.94.48.4:80"
    HttpSetProxy(2, $proxy)

    [/autoit][autoit][/autoit][autoit]

    $downlod = BinaryToString(InetRead("http://www.wieistmeineip.de/",16),4)

    [/autoit][autoit][/autoit][autoit]

    Local $aArray1 = _StringBetween($downlod,'<h1 class="ip">','</h1>')
    _ArrayDisplay($aArray1)

    [/autoit][autoit][/autoit][autoit]

    ;#############################################################################

    [/autoit]

    Ich versteh nicht warum nicht so wie es eigentlich vohabe

    EDIT:

    Habe gerade festgestellt das z.b. der Proxy 178.32.223.88:3128 zwar angepingt werden kann aber nicht als Proxy funktioniert.
    Trage ich aber den 147.31.182.137:3128 ein funktioniert es. Also kann ich mich auf ping nicht wirklich verlassen.

    Gibt es den eine möglichkeit HttpSetProxy zu überprüfen?

    Einmal editiert, zuletzt von Norman Bates (20. Mai 2013 um 11:17)

  • Hi,

    Zitat

    Ich versteh nicht warum nicht so wie es eigentlich vohabe
    EDIT:
    Habe gerade festgestellt das z.b. der Proxy 178.32.223.88:3128 zwar angepingt werden kann aber nicht als Proxy funktioniert.

    Das funktioniert deswegen nicht, weil du nicht weisst, wie es funktioniert...
    Der Proxy ist ein Rechner, der zwischen den anderen Beiden (Start und Ziel) "vermittelt". WAS der dort macht, darauf hast du keinen Einfluß!!!
    Mit PING() stellt du lediglich fest, dass der Rechner auf PING() antwortet (oder auch nicht). Welche Dienste er anbietet, davon weiss PING() nichts!
    Die einzige Möglichkeit herauszufinden, welche Dienste der Proxy anbietet, ist einfach, diese Dienste auszuprobieren....wenns funktioniert, dann gut, wenn nicht, dann eben nicht.
    Wenn der Proxy heute auf die wieistmeineip-Anfrage antwortet heisst das nicht, dass er das morgen auch macht. Also passe dein Script darauf an und frage die Rückgaben des Proxys ab...

  • Die einzige Möglichkeit herauszufinden, welche Dienste der Proxy anbietet, ist einfach, diese Dienste auszuprobieren....wenns funktioniert, dann gut, wenn nicht, dann eben nicht.
    Wenn der Proxy heute auf die wieistmeineip-Anfrage antwortet heisst das nicht, dass er das morgen auch macht. Also passe dein Script darauf an und frage die Rückgaben des Proxys ab...

    ?( ?( ?( Keine Ahnung wie ich das angehen soll.
    Ich könnte einen kleinen Denkanstoß gebrauchen :D

  • Spoiler anzeigen
    [autoit]

    #include <String.au3>
    #include <Array.au3>
    #include <Inet.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ;#############################################################################
    ; P R O X Y - C H E C K

    [/autoit] [autoit][/autoit] [autoit]

    $proxyliste = "77.94.48.4:80;147.31.182.137:3128;8.8.8.8:80;http://www.autoit.de"

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $proxy = StringSplit($proxyliste, ";", 3) ;alle proxys...
    $alle = ""
    For $i = 0 To UBound($proxy) - 1 ;...nacheinander durchlaufen

    [/autoit] [autoit][/autoit] [autoit]

    $pingproxy = StringSplit($proxy[$i], ":", 3) ;port entfernen
    $ping = Ping($pingproxy[0]) ;pingen, ob erreichbar

    [/autoit] [autoit][/autoit] [autoit]

    If $ping Then ;wenn rechner erreichbar
    HttpSetProxy(2, $proxy[$i]) ;proxy setzen
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $proxy[$i] = ' & $proxy[$i] & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    ToolTip("Bitte warten, es wird versucht, über " & $proxy[$i] & " zu lesen!") ;Info
    $read = InetRead("http://www.wieistmeineip.de/", 16);source lesen
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $read = ' & StringLeft($read, 200) & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    Else ;wenn Rechner nicht erreichbar
    $read = "" ;dann gibts auch nix zu lesen^^
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $read = "" Then ;wenn es nix zu lesen gibt
    $IP = " keine IP" & @CRLF ;gibts auch keine IP!!!
    Else ;ansonsten
    Local $aArray = _StringBetween(BinaryToString($read, 4), '<h1 class="ip">', '</h1>');IP ermitteln
    If IsArray($aArray) Then ;und wenn diese IP existiert,
    $IP = " die IP " & $aArray[0] & @CRLF ;anzeigen
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $aArray[0] = ' & $aArray[0] & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    Else ;ansonsten
    $IP = " keine IP" & @CRLF ;gibts nix anzuzeigen
    EndIf
    EndIf
    $alle &= "www.wieistmeineip.de meldet über den Proxy " & $proxy[$i] & $IP;Meldung
    Next
    Tooltip("")
    MsgBox(0, "Proxy abfrage beendet mit Ergebnis:", $alle)

    [/autoit] [autoit][/autoit] [autoit]

    ;#############################################################################

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    //EDIT mit Kommentaren

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    2 Mal editiert, zuletzt von Andy (20. Mai 2013 um 13:27)

  • Danke für die Hilfe.

    Habe was gefunden was ich für meine Zwecke abgeändert habe.

    Spoiler anzeigen
    [autoit]


    #include<String.au3>
    #include<Array.au3>
    #include<File.au3>
    #include<Inet.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $aRecords, $downlod
    If Not _FileReadToArray("c:\temp\proxy.txt", $aRecords) Then
    MsgBox(4096, "Fehler", "Fehler beim Einlesen der Datei in das Array!" & @CRLF & "Fehlercode: " & @error)
    Exit
    EndIf
    ;_ArrayDisplay($aRecords)
    $i = 1
    _Ping()

    [/autoit] [autoit][/autoit] [autoit]

    Local $aArray1 = _StringBetween(BinaryToString($downlod,4),'<h1 class="ip">','</h1>')
    _ArrayDisplay($aArray1)

    [/autoit] [autoit][/autoit] [autoit]

    Func _Ping()
    While 1
    $split = StringSplit($aRecords[$i],":")
    $ip = $split[1]
    $port = $split[2]
    TCPStartup()
    $consocket = TCPConnect($ip, $port)

    [/autoit] [autoit][/autoit] [autoit]

    If @error Then
    MsgBox(16, "ERROR", "Fehler beim Verbinden",1)
    ConsoleWrite("Lösche: " &$aRecords[$i] &" von Pos." &$i &@CRLF)
    _ArrayDelete($aRecords,$i)
    ContinueLoop
    Else
    Msgbox(0, "Erfolg", "Sie wurden erfolgreich verbunden.",1)
    HttpSetProxy(2, $aRecords[$i])
    ConsoleWrite("Proxy = " & $aRecords[$i] &@CRLF&@CRLF)
    $downlod = InetRead("http://www.wieistmeineip.de/",16)

    [/autoit] [autoit][/autoit] [autoit]

    If $downlod = "" Then
    _ArrayDelete($aRecords,$i)
    ContinueLoop
    Else
    ExitLoop
    EndIf
    EndIf
    WEnd
    TCPCloseSocket($consocket)
    TCPShutdown()
    EndFunc

    [/autoit]

    Für mich funktioniert das Script, nichtsdestotrotz wäre ich für Optimierungsvorschläge dankbar. :D

    Danke und Gruß
    Norman