staging.inyokaproject.org

Tastatureingaben an Webserver senden

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

basstarono

Anmeldungsdatum:
13. August 2010

Beiträge: Zähle...

Hallo zusammen,

ich bin embedded Programmierer und möchte mich an etwas neuem ausprobieren. Ich möchte gern Tastatureingaben einlesen, diese per Programm an einen anderen Computer senden und dort dann Speichern. Der Computer meldet zurück, wenn die Daten erfolgreich angekommen sind.

Dazu habe ich ein paar grundlegende Fragen: 1. Benötige ich dazu einen Webserver? (2. Computer welcher Daten empfängt und abspeichert oder geht das auch ohne Webserver) 2. Ich würde gern als Programmiersprache Java anwenden. Wie schwer seht ihr den Einstieg für einen embedded Programmierer? 3. Welches Protokoll würder ihr für die Übertragung von Daten zwischen den beiden PC verwenden? (HTTP erzeugt meiner Meinung nach viel zu viel overhead)

Ich bin schon sehr gespannt auf eure Fragen.

Viele Grüße

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11278

basstarono schrieb:

Ich bin schon sehr gespannt auf eure Fragen.

Ok, Wozu? 😀 Ansonsten: Kennst du netcat, Telnet, SSH usw.?

voku1987

Avatar von voku1987

Anmeldungsdatum:
6. November 2007

Beiträge: Zähle...

1.) auf deinem PC: stellst du auf einem Port (3333) eine CD zur Verfügung

1
cat backup.iso | nc -l 3333

2.) und auf einen anderen PC im Netz: kann du die CD (ISO) nun empfangen

1
nc 192.168.0.1 3333 > backup.iso

Metabolic

Anmeldungsdatum:
13. Mai 2011

Beiträge: Zähle...

Hallo basstarono,

Nun, also mich würde mal interessieren wie du dir das alles vorgestellt hast. Also soll das Tool was die Tastatureingaben aufzeichnet ein Service sein oder soll es eine GUI haben oder reichts wenn es im Termnial rennt?

Wenns als Service laufen soll klingt das für mich wie ein Keylogger der dann "nach hause telefonieren" soll ☺. Aber egal... will dir hier ja nichts unterstellen.

Wo befinden sich diese zwei Computer? Sind die beiden im gleichen Netz (Hätte zwar wenig sinn find ich aber kann ja sein ☺) oder ist der zweite irgendwo in der weiten weiten welt?

Zum Verbindungsaufbau:

Wenn die zwei im gleichen Netz sind machst einfach eine stinknormale Netzwerkverbindung via TCP zwischen den zwei und schreibst den String den du aufzeichnest auf den Stream und schon hats der zweite Computer drüben. Für java gibts da genug Beispiele im Netz wie das geht.

Sollen die Daten über das Internet geschickt werden ists natürlich am besten da mit einem WebService zu kommunizieren. Da brauchst bei dem ganzen ja keine komplexen Typen. Da reicht ein einfacher String. Also einen WebService schreiben der eine Methode hat und einen String entgegen nimmt. Die Methode speichert den dann irgendwo. Dann referenzierst du beim WebClient den Service und instanzierst ihn. Dann hast auch schon Zugriff auf die Methode vom Service. Jetzt kodierst noch zum Spaß den String mit Base64 und jagst ihn dann über die Leitung zum zweiten Computer ☺.

Wenn ich das jetzt zu oberflächlich und zu schnell "erklärt" habe dann kann ich dir auch sampleCode geben damit du dir das ganze besser vorstellen kannst.

Ob Java schwer zu erlernen ist? hmm. also meiner persönlichen Erfahrung nach (und auch das was andere so von ihren anfängen erzählt haben) hat Java eine steile Lernkurve am Anfang. Sprich es dauert ein wenig bis man auf den Geschmack gekommen ist ☺. Wenn mit C# anfängst ists etwas leichter weil meiner Meinung nach die Dokumentation auf msdn um WELTEN besser ist als bei Java. Da du aber wie ich vermute auf Linx entwickelst musst Mono nehmen wenn C# schreiben willst und das hinkt halt immer hinten nach und unterstützt z.b. auch nicht alle Funktionen.

Hoffe ich konnte dir irgendwie weiterhelfen ☺. Wenn Probleme mit dem ganzen hast, dann helfe ich dir gern.

Metabolic

basstarono

(Themenstarter)

Anmeldungsdatum:
13. August 2010

Beiträge: 6

Hallo zusammen

vielen Dank für die vielen Antworten. Hier nochmal ein paar Fragen.

Nun, also mich würde mal interessieren wie du dir das alles vorgestellt hast. Also soll das Tool was die Tastatureingaben aufzeichnet ein Service sein oder soll es eine GUI haben oder reichts wenn es im Termnial rennt?

Das Tool welches die Tastatureingaben aufzeichnet muss im ersten Schritt keine GUI haben. Es reicht zunächst wenn es über das Terminal gestartet wird. Zum Schluss sollte es ein Service sein.

Wenns als Service laufen soll klingt das für mich wie ein Keylogger der dann "nach hause telefonieren" soll ☺. Aber egal... will dir hier ja nichts unterstellen.

Also ich habe nichts illegales vor (fremde Rechner ausspionieren oder ähnliches).

Wo befinden sich diese zwei Computer? Sind die beiden im gleichen Netz (Hätte zwar wenig sinn find ich aber kann ja sein ☺) oder ist der zweite irgendwo in der weiten weiten welt?

Die beiden Computer befinden sich irgendwo im WWW. Können sich aber für erste Tests auch im lokalen Netzwerk befinden.

Sollen die Daten über das Internet geschickt werden ists natürlich am besten da mit einem WebService zu kommunizieren. Da brauchst bei dem ganzen ja keine komplexen Typen. Da reicht ein einfacher String. Also einen WebService schreiben der eine Methode hat und einen String entgegen nimmt. Die Methode speichert den dann irgendwo. Dann referenzierst du beim WebClient den Service und instanzierst ihn. Dann hast auch schon Zugriff auf die Methode vom Service. Jetzt kodierst noch zum Spaß den String mit Base64 und jagst ihn dann über die Leitung zum zweiten Computer ☺.

Hm ok. 100% verstehe ich das leider nicht. Aber ich denke dass wird noch!

Wenn ich das jetzt zu oberflächlich und zu schnell "erklärt" habe dann kann ich dir auch sampleCode geben damit du dir das ganze besser vorstellen kannst.

Für Besipielcode wäre ich sehr dankbar.

Ob Java schwer zu erlernen ist? hmm. also meiner persönlichen Erfahrung nach (und auch das was andere so von ihren anfängen erzählt haben) hat Java eine steile Lernkurve am Anfang. Sprich es dauert ein wenig bis man auf den Geschmack gekommen ist ☺. Wenn mit C# anfängst ists etwas leichter weil meiner Meinung nach die Dokumentation auf msdn um WELTEN besser ist als bei Java. Da du aber wie ich vermute auf Linx entwickelst musst Mono nehmen wenn C# schreiben willst und das hinkt halt immer hinten nach und unterstützt z.b. auch nicht alle Funktionen.

Also als Betriebssystem habe ich Ubuntu. Auf diesem möchte ich auch entwickeln. Daher denke ich, dass ich Java verwenden werde.

Metabolic

Anmeldungsdatum:
13. Mai 2011

Beiträge: 3

Hi,

Also hier ist mal ein Codebeispiel was ich grad schnell geschrieben hab: Müsste so eigentlich hinhauen obwohl ichs nicht getestet hab ☺.

WebService:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package webservice.pack;

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;

import sun.misc.BASE64Decoder;

import java.io.IOException;
import javax.swing.JOptionPane;
import javax.xml.ws.Endpoint;

@WebService(name = "server", serviceName = "FirstService")
@SOAPBinding(style = SOAPBinding.Style.RPC)
public class server {

	public static void main(String[] args) 
	{
        Endpoint endpoint = Endpoint.publish("http://localhost:12345/server?wsdl", new server());
        JOptionPane.showMessageDialog(null, "Shutdown Server");
        endpoint.stop();
    }
	
	@WebMethod
	public void SaveString(String content) 
	{
		try 
		{
			byte[] buffer = new BASE64Decoder().decodeBuffer(content);
			String decoded = new String(buffer, "iso-8859-1");
			SaveStringToFile(decoded);
		}
		catch (IOException e)
		{
		}
	}
	private void SaveStringToFile(String data)
	{
		//Code zum Speicher des Strings in einem File
	}
}

danach das wsimport tool aufrufen mit "wsimport http://localhost:12345/server?wsdl".

Jetzt kannst eine Instanz erzeugen im Client. Der Client sieht so aus:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package webservice.pack;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import sun.misc.BASE64Encoder;

import webservice.pack.server;

public class client {
	
	public static void main(String[] args) throws IOException {
		String input= "";

		System.out.println("Text eingeben:");
		InputStreamReader converter = new InputStreamReader(System.in);
		BufferedReader in = new BufferedReader(converter);

		input = in.readLine();
		
		server service = new server();
		
		byte buffer[] = input.getBytes();
		
		String enc = new BASE64Encoder().encode(buffer);
		
		service.SaveString(enc);
	}
}

basstarono

(Themenstarter)

Anmeldungsdatum:
13. August 2010

Beiträge: 6

Vielen Dank,

Ich habe deinen Code gerade mal ausgetestet. Scheint zu funktionieren. Ich werde morgen daran weiterarbeiten.

Gruß basstarono

Antworten |