Ausgehende IP erzwingen / ForceBindIP

  • Hallo zusammen.


    Ich verfüge über einen Server, welcher 4 öffentliche IP Adressen besitzt, die an die selbe Netzwerkkarte gebunden sind. Standardmässig verwenden alle Anwendungen die Default IP, also die erste verfügbare IP des Controllers für ausgehende Verbindungen. Nun würde ich gerne selbst entscheiden welche der 4 IP's von meiner Anwendung verwendet wird. Einige Programme bieten solch eine Auswahlmöglichkeit, somit denke ich dass es auch möglich sein müsste das in Autoit zu realisieren.

    Bei meiner Suche bin ich unter anderem auf das Tool "ForceBindIP" gestossen, welches prinzipiell genau das tut was ich möchte: http://www.r1ch.net/stuff/forcebindip/

    Problem hierbei ist allerdings, dass...

    - es extern ist und mehr oder weniger das Programm manipuliert (was ggf. Probleme mit diversen Antivirenprogrammen verursacht)
    - es nicht mit 64bit Anwendungen kompatibel ist

    Somit fällt das eigentlich weg. Ich suche also eine Möglichkeit die Interface IP-Bindung direkt im Programm vorzunehmen, bevor ausgehende TCP Verbindungen initiiert werden. Jemand Ideen wie man das realisieren kann?

  • Gibt es nicht genau für diesen Fall diese vier Makros?

    [autoit]

    @IPAddress1
    @IPAddress2
    @IPAddress3
    @IPAddress4

    [/autoit]


    Nein die Makros liefern mir nur die verfügbaren IPs. Das alleine bringt mir aber nichts. Ziel ist es einen externen Server über die gewünschte ausgehende IP zu kontaktieren.

    Beispiel:

    [autoit]


    $meineIP1 = @IPAddress1
    $meineIP2 = @IPAddress2
    $serverIP = "1.2.3.4"

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

    TCPStartup()
    $socket = TCPConnect($serverIP,666) ; hier müsste prinzipiell entschieden werden welche meiner beiden IPs für die Verbindung genutzt werden soll,
    ; Standard wäre die erste IP und das kann man meines Wissens nach mit den Standardfunktionen auch nicht ändern.
    tcpsend($socket,"blah")
    TCPShutdown()

    [/autoit]


    Ich müsste also prinzipiell einen Socket auf andere Weise erstellen, welcher an die gewünschte Interface IP gebunden ist und diesen Socket dann in TCPsend nutzen.

    Einmal editiert, zuletzt von misterspeed (12. Februar 2013 um 14:47)

  • Das wäre dann ja eine systemweite Einstellungen. Ziel ist es, dass multiple Instanzen des Scripts jeweils eine andere IP nutzen und paralell auf den Server zugreifen können. Dabei soll nach Möglichkeit nicht die ganze Netzwerkkonfiguration über den Haufen geworfen oder permanent geändert werden.

  • Wow, danke. Das funktioniert bei direkter TCP Kommunikation soweit jedenfalls wie gewünscht, gerade mit meinem FTP Server getestet. ;)

    Allerdings habe ich glaube ich einen gewaltigen Denkfehler begangen als ich das TCP Beispiel oben hergenommen habe, denn das ganze sollte eigentlich mit den WinHTTP Funktionen kompatibel sein und leider musste ich gerade feststellen, dass die winhttp.au3 garkeine Autoit TCP Funktionen nutzt, sondern das ganze anscheinend alles intern von der winhttp.dll abgewickelt wird. Meine Versuche die Handles von WinHTTPOpen oder WinHTTPConnect an deine Bind Funktion zu übergeben scheitern jedenfalls. Laut WSA Fehlercode liegt es daran, dass es sich nicht um einen gültigen Socket handelt, was ich schon befürchtet hatte:

    Zitat


    WSAENOTSOCK
    10038

    Socket operation on nonsocket.

    An operation was attempted on something that is not a socket. Either the socket handle parameter did not reference a valid socket, or for select, a member of an fd_set was not valid.

    Vielleicht hast du ja lust dir die WinHTTP Doku auch noch anzusehn und findest vllt einen Weg dort ebenfalls ein Binding vorzunehmen.