Kleines TCP Problem

  • Hallo,
    ich schreibe gerade ein kleines Tool für den Laptop meiner Eltern, welches diesen ermöglicht, den PC meiner kleinen Geschwister herunterzufahren.
    Ich sags euch direkt.
    Es wird kein Tool, mit dem ich meine Familie ärgern möchte. ^^

    Es soll halt nützlich sein.

    Hier ist einmal der Server, der dann auf den Kinder PC's läuft.

    Spoiler anzeigen
    [autoit]

    $Benedikt = "Benne-PC"
    $Franziska = "Franziska-PC"
    $Max = "Max-PC"
    $Victoria = "Victoria-Comput"
    $Mama = "Mama-PC"
    $Port = "80"

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

    TCPStartup()
    $Mainsocket = TCPListen ("127.0.0.1", $Port)
    If $Mainsocket = -1 Then
    MsgBox (0, "Fehler", "Fehler beimn Starten des Servers")
    EndIf

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

    While 1
    $Empfang = TCPRecv ($Mainsocket, 20)
    If $Empfang = "Herunterfahren" Then
    MsgBox (0, "", "AKTION")
    EndIf
    Sleep (10)
    WEnd

    [/autoit]


    Und hier der Server, der auf dem Laptop läuft:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    #Region ### START Koda GUI section ###
    $MainForm = GUICreate("Kontrollcenter", 538, 574, 756, 185)
    $LabelBenedikt = GUICtrlCreateLabel("Benedikt", 40, 32, 129, 41)
    GUICtrlSetFont(-1, 24, 800, 0, "Bell MT")
    $LabelFranziska = GUICtrlCreateLabel("Franziska", 40, 72, 140, 41)
    GUICtrlSetFont(-1, 24, 800, 0, "Bell MT")
    $LabelMax = GUICtrlCreateLabel("Max", 40, 112, 66, 41)
    GUICtrlSetFont(-1, 24, 800, 0, "Bell MT")
    $LabelVictoria = GUICtrlCreateLabel("Victoria", 40, 152, 118, 41)
    GUICtrlSetFont(-1, 24, 800, 0, "Bell MT")
    $LabelMama = GUICtrlCreateLabel("Mama", 40, 192, 90, 41)
    GUICtrlSetFont(-1, 24, 800, 0, "Bell MT")
    $StatusBenedikt = GUICtrlCreateLabel("Offline", 216, 32, 103, 41)
    GUICtrlSetFont(-1, 24, 800, 0, "Bell MT")
    $StatusFranziska = GUICtrlCreateLabel("Offline", 216, 72, 103, 41)
    GUICtrlSetFont(-1, 24, 800, 0, "Bell MT")
    $StatusMax = GUICtrlCreateLabel("Offline", 216, 112, 103, 41)
    GUICtrlSetFont(-1, 24, 800, 0, "Bell MT")
    $StatusVictoria = GUICtrlCreateLabel("Offline", 216, 152, 103, 41)
    GUICtrlSetFont(-1, 24, 800, 0, "Bell MT")
    $StatusMama = GUICtrlCreateLabel("Offline", 216, 192, 103, 41)
    GUICtrlSetFont(-1, 24, 800, 0, "Bell MT")
    $AktionVictoria = GUICtrlCreateButton("Herunterfahren", 360, 152, 145, 33, $WS_GROUP)
    $AktionBenedikt = GUICtrlCreateButton("Herunterfahren", 360, 32, 145, 33, $WS_GROUP)
    $AktionMax = GUICtrlCreateButton("Herunterfahren", 360, 112, 145, 33, $WS_GROUP)
    $AktionFranziska = GUICtrlCreateButton("Herunterfahren", 360, 72, 145, 33, $WS_GROUP)
    $AktionMama = GUICtrlCreateButton("Herunterfahren", 360, 192, 145, 33, $WS_GROUP)
    GUISetState(@SW_HIDE)
    #EndRegion ### END Koda GUI section ###

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

    MsgBox (0, "Kontrollcenter", "Nach einem Klick auf -Ok- werden die aktiven Computer gesucht. Dies kann einen Moment dauern.")

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

    $Benedikt = "Benne-PC"
    $Franziska = "Franziska-PC"
    $Max = "Max-PC"
    $Victoria = "Victoria-Comput"
    $Mama = "Mama-PC"
    $Port = "80"

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

    GUICtrlSetData ($StatusBenedikt, "Offline")
    GUICtrlSetColor($StatusBenedikt, 0xff0000)
    GUICtrlSetData ($StatusFranziska, "Offline")
    GUICtrlSetColor ($StatusFranziska, 0xff0000)
    GUICtrlSetData ($StatusMax, "Offline")
    GUICtrlSetColor ($StatusMax, 0xff0000)
    GUICtrlSetData ($StatusVictoria, "Offline")
    GUICtrlSetColor ($StatusVictoria, 0xff0000)
    GUICtrlSetData ($StatusMama, "Offline")
    GUICtrlSetColor ($StatusMama, 0xff0000)

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

    CheckOnline ($Benedikt, $StatusBenedikt)
    CheckOnline ($Franziska, $StatusFranziska)
    CheckOnline ($Max, $StatusMax)
    CheckOnline ($Victoria, $StatusVictoria)
    CheckOnline ($Mama, $StatusMama)

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

    GUISetState (@SW_SHOW, $MainForm)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $AktionBenedikt
    TCPStartup()
    $Verbindung = TCPConnect (TCPNameToIP($Benedikt), $Port)
    If $Verbindung = -1 Then
    MsgBox (0, "Fehler", "Fehler bei Verbindung")
    EndIf
    TCPSend ($Verbindung, "Herunterfahren")
    TCPShutdown()
    $Verbindung = ""
    EndSwitch
    WEnd

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

    Func CheckOnline($Name, $StatusName)
    TCPStartup()
    If TCPNameToIP($Name) <> "" Then
    GUICtrlSetData ($StatusName, "Online")
    GUICtrlSetColor ($StatusName, 0x00ff00)
    EndIf
    TCPShutdown()
    EndFunc

    [/autoit]

    Das Problem ist, das ich immer "Fehler bei Verbindung" bekomme.
    Das Bedeutet, das bei $Verbindung -1 herausgekommen ist.
    Ich finde leider keinen Fehler !
    Kann mir jemand helfen?

    ;(

    Einmal editiert, zuletzt von PokerFace (11. Januar 2010 um 19:37)

    • Offizieller Beitrag

    Das Clientprogramm müsste eher so aussehen (ungetestet):

    Spoiler anzeigen
    [autoit]


    $Benedikt = "Benne-PC"
    $Franziska = "Franziska-PC"
    $Max = "Max-PC"
    $Victoria = "Victoria-Comput"
    $Mama = "Mama-PC"
    $Port = "80"

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

    TCPStartup()
    $Mainsocket = TCPListen(@IPAddress1, $Port)
    If $Mainsocket = -1 Then
    MsgBox (0, "Fehler", "Fehler beimn Starten des Servers")
    EndIf
    Do
    $ConnectedSocket = TCPAccept($MainSocket)
    Until $ConnectedSocket <> -1

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

    While 1
    $Empfang = TCPRecv($ConnectedSocket, 20)
    If $Empfang = "Herunterfahren" Then
    MsgBox (0, "", "AKTION")
    EndIf
    Sleep (10)
    WEnd

    [/autoit]
  • Achso.
    Das klingt schon interessanter.
    Muss ich mich denn nicht bei den anderen PC's dann irgednwie Authentifizieren?
    Dann könnte ich doch jeden X-Belibigen PC herunterfahren.
    Also im Netzwerk.

  • Egal was ich mache, ich bekomme immer den "Systemfehler 67".
    Angeblich seien die Computer nicht im Netzwerk.
    Doch es ist aber so ;(

  • Moin, ich hab das mit den Shutdown auch schon öfters Probiert, hab auch Gegoogelt udna uch das mit dem Net Use gefunden, doch es hat nie Funktioniert :(
    Mach ich das was falsch?
    Also ich habe einen PC der heißt hendrik benutzer Henny:aws (hab nur nen PW drinne damit Remotdesktop funzt) Win7 (64 Bit)
    Und noch einen pc Names hendrik2 benutzer Henny PW:aws (hab nur nen PW drinne damit Remotdesktop funzt) WinXP (32 Bit, SP2)

    SO dann mache ich vom 1 PC (hendrik) das hier:
    C:\Users\Henny>net use \\hendrik2\henny aws
    Der Befehl wurde erfolgreich ausgeführt.

    C:\Users\Henny>shutdown -m \\hendrik2 -s -f
    hendrik2: Zugriff verweigert(5)

    Nun wie ihr sehen könnt wird der Befehl immer Verweigert :(
    Was mache ich da falsch?

    mfg. Jam00

  • Bei mir funktionierts :o
    Vllt hat der PC nicht die nötigen Rechte? :?:
    Mit Adminrechten sollte es eigentlich auf jeden Fall gehen.

    MFG

    EDIT:

    Zitat

    1. net use \\Remoterechnername\ipc$ "Passwort" /user:Administrator

    Hinweis: mit Passwort und /user:Administrator ist das lokale Administratorkonto des Remoterechners bzw. ein Benutzer mit den entsprechenden Rechten gemeint, ansonsten
    bricht Shutdown mit der Fehlermeldung "Zugriff verweigert" ab...

    2. shutdown -r -m \\Remoterechnername

    Hinweis: Beide Befehle müssen im Sicherheitskontext des lokalen Administratorkontos
    ausgeführt werden, ansonsten bricht Shutdown mit der Fehlermeldung "Der Vorgang wurde erfolgreich beendet. Der Client besitzt ein erforderliches Recht nicht." ab....

    Das ist auch schon alles... evtl. in gpedit.msc unter Computerkonfiguration/Windows-Einstellungen/Sicherheitseinstellungen/Lokale-Richtlinien/Zuweisen von Benutzerrechten unter "Erzwingen des Herunterfahrens von einem Remotesystem aus" die Berechtigungen prüfen...

  • @Pinguin94

    Zitat von Pinguin94

    net use \\hendrik2\ipc$ aws/user:hendrik2


    Also da hast du einen kleinen Fehler gemacht, User ist Henny

    Also ich hab es jetzt so gemacht:

    C:\Users\Henny>net use \\hendrik2\ipc$ aws/user:henny
    Der Befehl wurde erfolgreich ausgeführt.


    C:\Users\Henny>shutdown -m \\hendrik2 -s -t 0
    hendrik2: Der eingegebene Computername ist ungültig oder ferngesteuertes Herunterfahren
    wird auf dem Zielcomputer nicht unterstützt. Überprüfen Sie den Namen und
    wiederholen Sie den Vorgang oder wenden Sie sich an den Systemadministrator.(53)

    Jetzt kommt haöbt der Fehler das es nicht unterstüzt währe :(

    mfg. Jam00

  • Zitat

    1. net use \\Remoterechnername\ipc$ "Passwort" /user:Administrator

    Hinweis: mit Passwort und /user:Administrator ist das lokale Administratorkonto des Remoterechners bzw. ein Benutzer mit den entsprechenden Rechten gemeint, ansonsten
    bricht Shutdown mit der Fehlermeldung "Zugriff verweigert" ab...

    2. shutdown -r -m \\Remoterechnername

    Hinweis: Beide Befehle müssen im Sicherheitskontext des lokalen Administratorkontos
    ausgeführt werden, ansonsten bricht Shutdown mit der Fehlermeldung "Der Vorgang wurde erfolgreich beendet. Der Client besitzt ein erforderliches Recht nicht." ab....

    Das ist auch schon alles... evtl. in gpedit.msc unter Computerkonfiguration/Windows-Einstellungen/Sicherheitseinstellungen/Lokale-Richtlinien/Zuweisen von Benutzerrechten unter "Erzwingen des Herunterfahrens von einem Remotesystem aus" die Berechtigungen prüfen...

    MfG, damit dus nicht übersiehst :D

  • Macht doch sowas:

    Eltern Laptop sendet:
    ($Empfaenger ersetzen $Empfaenger ist die ID der PC's deiner Geschwister!)

    [autoit]

    TCPSend($Empfaenger, "Ausschalten|Shutdown(1)")

    [/autoit]

    Empfänger deiner Geschwister:
    ($Sender ersetzen! $Sender ist ID des Laptops deiner Eltern)

    [autoit]


    While 1
    $Empfang = TCPRecv($Sender, 9999)
    $sEmpfang = StringSplit($Empfang, "|")
    If IsArray($sEmpfang) = 1 Then
    If $sEmpfang[1] = "Ausschalten" Then
    Execute($sEmpfang[2])
    EndIf
    Endif
    WEnd

    [/autoit]

    Habe das jetzt so aus der Hand geschrieben,
    aber so sollte es funktionieren.


    MfG
    qixx

  • Naja.. genau für sowas möchte ich ja etwas programmieren. :D
    Also ich hab den Fehler in meinem Skript leider immer noch nicht gefunden. :/

    Edit:
    qixx:
    Wie du oben sehen kannst, hab ich sowas in der Art.
    Nur das Problem ist, das diese nicht untereinandere kommunizieren :(
    Deswegen.
    Irgendwo geht was verloren.
    Auf dem PC der Geschwister kommt nichts an!