TCPConnect über Internet

  • Hi,

    habe folgende zwei Scripte mal erstellt. Das Clientscript:

    Spoiler anzeigen
    [autoit]


    #include <Inet.au3>
    #include <EditConstants.au3>
    #include <WindowsConstants.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    OnAutoItExitRegister("killfunc")

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

    $ip = @IPAddress1

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

    #Region ### START Koda GUI section ### Form=
    $Chatforum = GUICreate("Messenger", 500, 500)
    $Chatedit = GUICtrlCreateEdit("", 0, 0, 500, 480, BitOR($ES_READONLY, $ES_WANTRETURN, $WS_VSCROLL, $ES_AUTOVSCROLL))
    $Chatinput = GUICtrlCreateInput("", 0, 480, 470, 20)
    $Chatsend = GUICtrlCreateButton("Send", 470, 480, 30, 20, $BS_DEFPUSHBUTTON)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    TCPStartup()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Chatsend
    $buffer = GUICtrlRead($Chatinput)
    If $buffer <> "" Then
    GUICtrlSetData($Chatinput, "")
    SendMsg($buffer)
    EndIf
    EndSwitch
    WEnd

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

    Func SendMsg($txtMsg)
    $ConnectedSocket = TCPConnect($ip, 56543)
    MsgBox(0,"",@error)
    Do
    $recv = TCPRecv($ConnectedSocket, 2048)
    Sleep(100)
    Until $recv <> ""
    TCPSend($ConnectedSocket, $txtMsg)
    EndFunc ;==>SendMsg

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

    Func killfunc()
    TCPShutdown()
    EndFunc ;==>killfunc

    [/autoit]

    Und das Serverscript:

    Spoiler anzeigen
    [autoit]

    #include <EditConstants.au3>
    #include <WindowsConstants.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiEdit.au3>
    OnAutoItExitRegister("killfunc")

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

    #Region ### START Koda GUI section ### Form=
    $Chatforum = GUICreate("server", 500, 500)
    $Chatedit = GUICtrlCreateEdit("", 0, 0, 500, 480, BitOR($ES_READONLY, $ES_WANTRETURN, $WS_VSCROLL, $ES_AUTOVSCROLL))
    $Chatinput = GUICtrlCreateInput("", 0, 480, 470, 20)
    $Chatsend = GUICtrlCreateButton("Send", 470, 480, 30, 20, $BS_DEFPUSHBUTTON)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    TCPStartup()

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

    $MainSocket = TCPListen(@IPAddress1, 56543)

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

    While 1
    $ConnectedSocket = TCPAccept($MainSocket)
    If $ConnectedSocket >= 0 Then
    TCPSend($ConnectedSocket, "1")

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

    Do
    $recv = TCPRecv($ConnectedSocket, 2048)
    Sleep(100)
    Until $recv <> ""

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

    Print($recv)
    EndIf

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

    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func Print($txtMsg)
    MsgBox(0, "", $txtMsg)
    EndFunc ;==>Print

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

    Func killfunc()
    TCPShutdown()
    EndFunc ;==>killfunc

    [/autoit]

    Sendent man nun am Clientscript eine Nachricht ab kommt beim Serverscript eine Messagebox mit diesem Text. Soweit so gut. Wenn man nun allerdings die Variable $ip im Clientscript so abändert:

    [autoit]

    $ip = _GetIP()

    [/autoit]

    und also die extenre IP zum Aufbau der Verbindung genommen wird, kommt nur der Verbindugsfehler 10061. Dieser Fehler kommt auch bei komplett deaktivierter Firewall und der Weiterleitung aller eingehenden Verbindungen an den Rechner.

    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.

    Einmal editiert, zuletzt von chip (13. August 2010 um 00:47)

  • Könnte das bitte noch jemand mit Windows 7 testen obs geht oder nicht.

    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.

  • Hi,
    kannst du keine Verbindung über DynDNS aufbauen?
    So mache ich das bei mir immer.
    Dann kannst du direkt deinen DNS-Namen eintragen und mußst auf der Fritzbox nur das Forwarding für deinen Port eintragen und es sollte losgehen.
    Achja in der Firewall den Port natürlich auch freigeben!

    autoBert bei deinem Link fehlt leider die ID zum Post ;)

    MfG
    Der_Doc

  • Das wäre der nächste Schritt gewesen, der allerdings auch nicht funktionier bei mir. Wollte daher erstmal wissen ob das Script so wie es da steht bei jemand anderem unter Windows 7 funktioniert um so festzustellen ob das Problem nun am Script liegt oder an meinem Rechner.

    p.s. ich habe keine Fritzbox sondern Netgear-Router.

    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.

    Einmal editiert, zuletzt von chip (11. August 2010 um 12:03)

  • Anleitung war wohl von AutoBert gemeint^^, aber um die Uhrzeit kann so etwas mal passieren

  • Ist schon alles so bei mir wie in der Anleitung. Hatte den Rechner sogar schon als DMZ-Server im Router eingetragen und die Firewall komplett deaktiviert. Da es bei DjBlume unter Win XP funktioniert hat wäre es halt noch interessant wie es bei einem Win 7 Rechner aussieht, da ich Win 7 habe.

    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.

    2 Mal editiert, zuletzt von chip (11. August 2010 um 14:05)

  • So habe das Problem nun gelöst. Und zwar verhindert der Netgear DG834GTB das eine Rechner aus dem lokalen Netzwerk auf die externe IP zugreift.

    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.

  • Zitat

    Netgear DG834GTB das eine Rechner aus dem lokalen Netzwerk auf die externe IP zugreift.


    Da deaktivier die Paranoia Einstellung oder schliess den Router richtig rum an :rofl:

    Für son SOHO Router eine ungewöhnlich Einstellung, raus ins Inet ist bei den Dingern doch normal immer alles offen.

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o


  • Da deaktivier die Paranoia Einstellung oder schliess den Router richtig rum an :rofl:

    Für son SOHO Router eine ungewöhnlich Einstellung, raus ins Inet ist bei den Dingern doch normal immer alles offen.

    lesen, denken, posten.

    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.

  • ok ich füge dazu man sollte das gelesene auch noch verstehen. Habe nirgendwo gesagt das es nicht möglich ist nach außen zu kommen. Der Router leitet nut Anfragen die von innerhalb des Netzes an die eigene öffentliche IP gehen zum Webinterface um.

    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.

  • Beim Netgear DG834GTB eben nicht, diese Verhalten ist fest in die Firmware drin. Da Hilft keine Portweiterleitung egal welcher Art.

    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.

  • War das erste was ich gemacht hatte als das Problem aufgetauscht ist. Ist aber halt schon altes Gerät und die letzte Version ist von 2008. Aber da es ja nun doch von extern aus geht, stört mich dies nicht weiter.

    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.

  • Zitat

    Der Router leitet nut Anfragen die von innerhalb des Netzes an die eigene öffentliche IP gehen zum Webinterface um.

    Welches Webinterface? Das vom Router?
    Oder habe ich etwas falsch verstanden?
    Wenn du im internen Netz einen Dienst, bspw einen FTP-Server laufen hast, der über das externe Netz erreichbar ist, dann werden Anfragen aus dem internen Netz an diesen Dienst an die öffentliche=externe IP natürlich nicht erst "raus" ins Internet geleitet, was sollen die auch da? Ne Ehrenrunde drehen und wieder zurückkommen?
    Genauso verhält sich das mit den AutoIt-Servern. Da kannst du externe IP´s angeben so viel du willst, solange der Dienst "direkt" vom Router erreichbar ist, leitet er dich auch sofort auf dem kürzesten Weg dorthin....

  • Ne, das hast das hast du falsch verstanden. Also nochmal langsam. Ruft man von einem Rechner der nicht in meinem Netzwerk ist die externe IP auf dann passiert einfach garnichts, wenn ich die Ports nicht weitergeleitete habe und es kommt zu einem Verbindungsfehler was ja auch so sein soll. Wenn ich allerdings von einem Rechner innerhalb meines Netzwerkes auf die externe IP zugreife, wird das Webinterface des Routers aufgerufen wie als wenn ich die lokale IP des Routers aufgerufen hätte. Scheinbar erkennt der Router, dass es eine Schleife geben wird, sprich ins Internet und dann gleich wieder zurück und verhindert das indem er aufs interne Webinterface des Routers umleitet. Und da diese Prüfung vor allen Portweiterleitungen ausgeführt wird ist meine TCP-Verbindung von Autoit ins Leere gelaufen.

    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.

    Einmal editiert, zuletzt von chip (14. August 2010 um 02:05)