Über Lan auf PC zugreifen

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
Baconman
User
Beiträge: 20
Registriert: Mittwoch 24. März 2010, 22:42
Kontaktdaten:

Hi,

Ich hatte in letzter Zeit immer wieder die Idee ein Tool zu schreiben mit dem ich einen Rechner im Lan quasi fernsteuern könnte.
Natürlich nicht wie z.B TeamViewer... ich dachte eher daran vielleicht der DOS-Konsole Befehle geben zu können.

Was ich weis ist, das ich ein Server Programm und einen Client brauche. Ich habe auch irgendwas mal von einem Modul gehört was extra zum kommunizieren zweier Rechner im Lan programmiert wurde.

Weis einer dazu mehr? Oder hat generell irgendwer etwas Hilfe für mich?

Socket kann ich etwas, reicht für einen IRC-Bot.

Danke für eure Antworten. :)
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Sowas gibt es schon, nennt sich SSH und ist dazu sogar noch verschlüsselt.
Bottle: Micro Web Framework + Development Blog
Benutzeravatar
Baconman
User
Beiträge: 20
Registriert: Mittwoch 24. März 2010, 22:42
Kontaktdaten:

Aber SSH ist ja ein eigenständiges Programm. Oder kann ich das auch irgendwie in Python einbinden?

Mir geht es hier nicht um die Lösung eines Problemes sondern um den Spaß am Programmieren.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Baconman hat geschrieben: Mir geht es hier nicht um die Lösung eines Problemes sondern um den Spaß am Programmieren.
Da das Problem jedoch sehr technisch ist, steht der "Spaß am Programmieren" hier imho eher im Hintergrund. Suche Dir lieber ein Problem, welches weniger technisch orientiert ist.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
Baconman
User
Beiträge: 20
Registriert: Mittwoch 24. März 2010, 22:42
Kontaktdaten:

Ich habe mir das ja extra ausgesucht, weil ich denke das es mir Spaß machen wird.

Kann mir vielleicht einer mal kurz einen Vorgeschmack davon geben auf was ich mich hier einlasse :mrgreen: damit ich einschätzen kann in wiefern es mir zu technisch ist.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Naja, Du könntest via XML-RPC (oder JSON-RPC) die Kommunikation zwischen einen Server und einen Client implementieren.

Der Server muss auf dem Rechner laufen, den Du fernsteuerst. Letztlich könntest Du ungefiltert einfach im Server per subprocess-Modul einen beliebigen Befehl ausführen, der vorher übers Netzwerk übertragen wurde.

Auf Client Seite brauchst Du nur eine simple Input-Methode, bei der Du die Kommandos eintragen kannst, die abgesendet werden sollen.

Das ist so gesehen nicht unbedingt aufwendig.
Allerdings missachtet das natürlich komplett sämtliche Sicherheitsregeln... aber wenn 's Dir so viele Spaß bringt.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Baconman hat geschrieben:Aber SSH ist ja ein eigenständiges Programm. Oder kann ich das auch irgendwie in Python einbinden?
Ja kannst du, die passende Python-Library heißt paramiko.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Baconman
User
Beiträge: 20
Registriert: Mittwoch 24. März 2010, 22:42
Kontaktdaten:

So bin erstmal etwas vom Gas gegangen und versuche jetzt einen Netzwerk/Internet Chat zu schreiben.

Was ich habe:

Server:

Code: Alles auswählen

#Server

from threading import Thread
import socket
import sys

#########################Funktionen######################

def abfangen():
    while 1:
        data = client.recv(4096)
        print data

#########################################################

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

host = ''
port = 6022

server.bind((host, port))
server.listen(5)
(client, address) = server.accept()

t_abfangen = Thread(target = abfangen, args = ())
t_abfangen.start()

while 1:
    string = raw_input('')
    client.send(string)

Client:

Code: Alles auswählen

#client

from threading import Thread
import socket
import sys

#########################Funktionen######################

def abfangen():
    while 1:
        data = client.recv(4096)
        print data

#########################################################

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

host = 'localhost'
port = 6022

client.connect((host, port))

t_abfangen = Thread(target = abfangen, args = ())
t_abfangen.start()

while 1:
    string = raw_input('')
    client.send(string)
Das Problem ist nun das ich das was der Client los schickt auf dem Server sofort erhalte. Wenn ich aber versuche vom Server eine Nachricht an den Client zu schicken passiert nichts. Schicke ich aber daraufhin eine Nachricht vom Client an den Server erhalte ich auf dem Client auch die vorher vom Server losgeschickte Nachricht.

Ist das zufällig verständlich? :mrgreen:

Sieht einer von euch den Fehler?

Danke schon mal :)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Muss es denn für den Anfang wirklich das socket-Modul sein? Wieso so low-level?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
rads
User
Beiträge: 153
Registriert: Freitag 26. März 2010, 15:51

Muss Hyperion da nur zustimmen.

Ein Chat schreiben ist ja vielleicht ganz lustig. Letztes Semester haben wir genau das einmal über Sockets (UDP) und einmal über RMI gemacht.

Ich kann Jedem nur rmi empfehlen, nimmt dir die ganze Protokolldefinition ab und ist bei weitem nicht so fehleranfällig. Natürlich machen wir alle keine Fehler, nur ich und deswegen find ich rmi so schön.

Für Python sollte das "Vergleichsprodukt" Pyro sein. http://pyro.sourceforge.net/

Glaube meinem Vorredner und mir, damit hast du mehr Spaß und lernst zusätzlich was Neues und auch in der praxis oft verwendetes.
Antworten