Hallo zusammen. ich habe ein kleines Projekt im Studium erhalten, ein Programm zu schreiben, welches einen Socket erstellt und über einen String an das verbundene Gerät (IP/Port) schickt. Nun möchte ich das Ganze mal ausprobieren. Leider finde ich kein Programm, mit dem man sehen kann, ob meine programmierte Software nun auch richtig den Socket/die Verbindung aufbaut bzw. ob der String auch entsprechend rausgeschickt wird. Außerdem möchte ich, dass ich einen Response an meine Software schicken kann, damit ich sehe, wie diese reagiert. Wisst ihr was ich meine? Gibt es da so etwas wie ein "Terminal" für COM-Schnittstellen, nur eben auf Netzwerkbasis? Vielen Dank!
Lars schrieb: > Leider finde ich kein > Programm, mit dem man sehen kann, ob meine programmierte Software nun > auch richtig den Socket/die Verbindung aufbaut bzw. ob der String auch > entsprechend rausgeschickt wird. Das verstehe ich nicht. Entweder du musst in dem Projekt nur den Client schreiben, dann gibt es schon das entsprechende Serverprogramm, also benutze das. Oder du sollst beide Programme erstellen dann mach das doch einfach. Eine Suche nach "socket programmierung" fördert hunderte Treffer auch zu Programmbeispielen. Hier z.B. für Windows nach 5sekunden Suche: http://www.c-worker.ch/tuts/wstut_op.php
:
Bearbeitet durch User
http://superuser.com/questions/23180/whats-the-easiest-way-to-sniff-tcp-traffic-data-on-linux http://superuser.com/questions/23180/whats-the-easiest-way-to-sniff-tcp-traffic-data-on-linux
Hallo Leute! Mein geschriebenes Programm ist die Client-Seite. Dort gebe ich IP und Port ein, um sich dann an ein Messgerät zu verbinden. Dieses Messgerät liefert auf eine entsprechende Anfrage eine Rückantwort. Da ich dieses Gerät leider nicht zuhause zum testen habe, brauche ich eben etwas, was dieses Messgerät "simuliert". Das heißt: Ich schicke mit meinem Programm eine Anfrage raus ans Messgerät, daraufhin antwortet das Messgerät und mein Programm wertet die Antwort aus. Kann WireShark und Co. das? Danke!
Lars schrieb: > Kann WireShark und Co. das? nein, aber nichts hindert dich daran, einen primitiven Server selbst zu schreiben, z.B. mit perl:
1 | #!/usr/bin/perl -w
|
2 | |
3 | use IO::Socket; |
4 | use Net::hostent; |
5 | $PORT = 5000; |
6 | $server = IO::Socket::INET->new(Proto => 'tcp', LocalPort => $PORT, Listen => SOMAXCONN, Reuse => 1); |
7 | die "wtf" unless $server; |
8 | while ($client = $server->accept()) { |
9 | $client->autoflush(1); |
10 | print $client "Willkommen am simulierten Messgeraet"; |
11 | while (<$client>) { |
12 | next unless /\S/; |
13 | if (/befehl/i){ |
14 | //machwas |
15 | }
|
16 | } continue { |
17 | print $client "#> "; |
18 | }
|
19 | close $client; |
20 | }
|
Zwar eine nette Idee...aber nicht wirklich hilfreich. Woher weiß ich ob dann das "Server-"Programm fehlerfrei funktioniert. Gibts da nichts in der Linux-Welt, womit man einfach einen Befehl auf die eth0 rausschicken kann?!
Lars schrieb: > Zwar eine nette Idee...aber nicht wirklich hilfreich. Woher weiß ich ob > dann das "Server-"Programm fehlerfrei funktioniert.
1 | anon@linuxkiste:~$ cat testserver.pl |
2 | #!/usr/bin/perl -w |
3 | |
4 | use IO::Socket; |
5 | use Net::hostent; |
6 | $PORT = 5000; |
7 | $server = IO::Socket::INET->new(Proto => 'tcp', LocalPort => $PORT, Listen => SOMAXCONN, Reuse => 1); |
8 | die "wtf" unless $server; |
9 | while ($client = $server->accept()) { |
10 | $client->autoflush(1); |
11 | print $client "Willkommen am simulierten Messgeraet"; |
12 | while (<$client>) { |
13 | next unless /\S/; |
14 | if (/quit/i){ |
15 | last; |
16 | } |
17 | } continue { |
18 | print $client "#> "; |
19 | } |
20 | close $client; |
21 | } |
22 | anon@linuxkiste:~$ ./testserver.pl & |
23 | [1] 26402 |
24 | anon@linuxkiste:~$ telnet localhost 5000 |
25 | Trying 127.0.0.1... |
26 | Connected to localhost. |
27 | Escape character is '^]'. |
28 | Willkommen am simulierten Messgeraet |
29 | #> quit |
30 | Connection closed by foreign host. |
31 | anon@linuxkiste:~$ |
Lars schrieb: > Gibts da nichts in der Linux-Welt, womit man einfach einen Befehl auf > die eth0 rausschicken kann?! netcat koennt' dir vielleicht weiterhelfen. Gruss WK
Manchmal frage ich mich schon, warum alles so umständlich ist. Das ist doch eine Problemstellung, die es täglich gibt, und noch immer muss man sich sein Zeug selbst programmieren...
Lars schrieb: > Manchmal frage ich mich schon, warum alles so umständlich ist. > Das ist doch eine Problemstellung, die es täglich gibt, und noch immer > muss man sich sein Zeug selbst programmieren... Du hast völlig recht, absolut unnötig, am Ende lernst du noch was durch das selbst programmieren. Echt ätzend. :-)
Ich sage nicht, dass es unnötig ist oder ätzend, aber wenn man schnell ein Ergebnis möchte, muss man sich erst selbst verzetteln...das nervt. Aber gut zu wissen, dass es sowas noch nicht gibt, vielleicht werde ich bald reich. ;)
Es gibt sowas wie (fast) wie Sand am Meer: CANoe (Windows, teuer), odisLogger (Windows + Linux, preiswert für privat, Demolizenz möglich)) um nur zwei zu nennen. Gruß Olaf PS: Zweiteres ist von mir und ich brauche noch Tester :-)
derguteweka schrieb: > netcat koennt' dir vielleicht weiterhelfen. Genau das ist das Mittel der Wahl. Findet sich nur kaum in den vielen Antworten.
Klaus Wachtler schrieb: > derguteweka schrieb: >> netcat koennt' dir vielleicht weiterhelfen. > > Genau das ist das Mittel der Wahl. > Findet sich nur kaum in den vielen Antworten. Das ist nicht das Mittel der Wahl, weil er ein Protokoll programmieren muss. Netcat kann das zwar an andere Programme weiterleiten, das wird aber schmerzhaft, weil sich netcat immer wieder beendet wenn die Verbindung geschlossen wird. Gruß Olaf
Olaf Dreyer schrieb: > Klaus Wachtler schrieb: >> derguteweka schrieb: >>> netcat koennt' dir vielleicht weiterhelfen. >> >> Genau das ist das Mittel der Wahl. >> Findet sich nur kaum in den vielen Antworten. > > Das ist nicht das Mittel der Wahl, weil er ein Protokoll programmieren > muss. > Netcat kann das zwar an andere Programme weiterleiten, das wird aber > schmerzhaft, weil sich netcat immer wieder beendet wenn die Verbindung > geschlossen wird. > > Gruß > > Olaf Na ja, ganz so schlimm ist das ja noch nicht. Der TE möchte ja erst mal nur mit Sockets rumspielen. @TE programmiere dir doch die andere Seite selber. Da lernst du auch noch was dabei. Sockets sind ja keine Einbahnstraße. Alternativ eine kleine Liste: Realterm Putty netcat telnet socat Die können sich alle auf einen Server verbinden. Da muss doch was dabei sein für dich.
Klaus Wachtler schrieb: > Genau das ist das Mittel der Wahl. Und wie machst du das, das Netcad sich als Server installiert und bei einem Request des zu testenden Clients diesem z.B. ein Magic Word zusendet, dann auf Daten des Clients wartet und -abhängig von diesen Daten- dann eine passende Antwort gibt? Und das alles in einer Verbindung.
Udo Schmitt schrieb: > Klaus Wachtler schrieb: >> Genau das ist das Mittel der Wahl. > > Und wie machst du das, das Netcad sich als Server installiert und bei > einem Request des zu testenden Clients diesem z.B. ein Magic Word > zusendet, dann auf Daten des Clients wartet und -abhängig von diesen > Daten- dann eine passende Antwort gibt? > Und das alles in einer Verbindung. Ich sag ja, mit netcat wird das wehtun.
So...ich habe dankend das Perl-Skript ausgeführt, jetzt habe ich aber schon Java-Seitig ein Problem: Laut diesem Code soll er die Antwort des Perl-Programms doch eigentlich in der Konsole ausgeben...tut er aber leider nicht. :( Die Anzahl der Bytes stimmen. Wisst ihr, woran das liegen kann, dass er zwar die Anzahl der empfangenen Bytes anzeigt, aber nicht die Daten selbst?
1 | import java.io.BufferedReader; |
2 | import java.io.IOException; |
3 | import java.io.InputStream; |
4 | import java.io.InputStreamReader; |
5 | import java.io.OutputStream; |
6 | import java.io.PrintStream; |
7 | import java.net.Socket; |
8 | import java.net.UnknownHostException; |
9 | |
10 | class StringClient { |
11 | |
12 | public static void main(String[] args) { |
13 | Socket socket = null; |
14 | try { |
15 | socket = new Socket("localhost", 3141); |
16 | |
17 | OutputStream raus = socket.getOutputStream(); |
18 | PrintStream ps = new PrintStream(raus, true); |
19 | ps.println("Hallo Welt!"); |
20 | ps.println("Hallo Otto!"); |
21 | |
22 | InputStream rein = socket.getInputStream(); |
23 | System.out.println("verf\u00FCgbare Bytes: " + rein.available()); |
24 | BufferedReader buff = new BufferedReader(new InputStreamReader(rein)); |
25 | |
26 | while (buff.ready()) { |
27 | System.out.println(buff.readLine()); |
28 | }
|
29 | |
30 | } catch (UnknownHostException e) { |
31 | System.out.println("Unknown Host..."); |
32 | e.printStackTrace(); |
33 | } catch (IOException e) { |
34 | System.out.println("IOProbleme..."); |
35 | e.printStackTrace(); |
36 | } finally { |
37 | if (socket != null) |
38 | try { |
39 | socket.close(); |
40 | System.out.println("Socket geschlossen..."); |
41 | } catch (IOException e) { |
42 | System.out.println("Socket nicht zu schliessen..."); |
43 | e.printStackTrace(); |
44 | }
|
45 | }
|
46 | }
|
47 | }
|
Gruß
Udo Schmitt schrieb: > Und wie machst du das, das Netcad sich als Server installiert und bei > einem Request des zu testenden Clients diesem z.B. ein Magic Word > zusendet, dann auf Daten des Clients wartet und -abhängig von diesen > Daten- dann eine passende Antwort gibt? > Und das alles in einer Verbindung. warum klingt das bei dir kompliziert? 'nc -l -p 3333' startet den Server. Die Anfrage siehst du im Klartext auf deiner Konsole. Dann kannst du vorbereitete Antworten per copy/paste zurück schicken und schauen, wie dein Programm reagiert. Ist jetzt nicht wirklich schwer oder?
nicht"Gast" schrieb: > Dann kannst du vorbereitete Antworten per copy/paste > zurück schicken und schauen, wie dein Programm reagiert. > > Ist jetzt nicht wirklich schwer oder? Aber nicht lustig, wenn man das zum Testen x-Mal in der Stunde machen muss. Es ist das typische Gefummel bei dem sich manche Programmierer einreden, sie wären extrem produktiv, weil sie ständig rumwuseln.
Jay schrieb: > nicht"Gast" schrieb: >> Dann kannst du vorbereitete Antworten per copy/paste >> zurück schicken und schauen, wie dein Programm reagiert. >> >> Ist jetzt nicht wirklich schwer oder? > > Aber nicht lustig, wenn man das zum Testen x-Mal in der Stunde machen > muss. Es ist das typische Gefummel bei dem sich manche Programmierer > einreden, sie wären extrem produktiv, weil sie ständig rumwuseln. Also im OT steht, daß er ein selbgebautes Programm hat und testweise die Gegenseite simulieren will. Genau dafür ist netcat ideal. Daß man das nicht als Dauertest stundenlang machen will, ist doch gar nicht gefragt.
nicht"Gast" schrieb: > warum klingt das bei dir kompliziert? Weil ich netcad nicht kenne. Ich gehe also jetzt davon aus, dass netcad kein Konsolenprogramm ist das sich von selbst beendet, sondern dass es ähnlich wie ftp eine eigene Konsole öffnet und offen hält, in der man weitere Kommandos eingeben kann. Danke, wieder was gelernt.
Wenns nur Strings sein sollen reichen Linux Boardmittel. netcat zum senden und empfangen von Strings und tcpdump um zu sehen was über die Leitung geht. Wenn du etwas zum Klicken brauchst, kannst du statt tcpdump natürlich auch wireshark nehmen.
Lars schrieb: > > Nun möchte ich das Ganze mal ausprobieren. Leider finde ich kein > Programm, mit dem man sehen kann, ob meine programmierte Software nun > auch richtig den Socket/die Verbindung aufbaut bzw. ob der String auch > entsprechend rausgeschickt wird. Du schreibst nicht für was : windows/linux daher hier mal ein kleiner win server einfach entpacken und starten, es wird nichts installiert, keine registry oder sonswas verändert. entfernen kannst ihn dann idem du ihn einfach wieder löscht. Deine CLient Message 'string' steht dann im 'Incomming' Fenster drin > Außerdem möchte ich, dass ich einen Response an meine Software schicken > kann, damit ich sehe, wie diese reagiert. Schreibst du in 'Server Response' rein > > Wisst ihr was ich meine? Hoffe es :) anbei ein kleiner Test Server wenn du HEX, BIN oder andere Anzeigen auch brauchst musst dich etwas gedulden, hatte nur paar minuten zeit. Port einstellen, Server Active setzen, dein client auf die IP + Port setzen, connecten, senden und kontrollieren ob alles durchläuft. Feedback wäre nett, auch Verbesserungsvorschlag. Ist einfach gehalten, also richtige Portnummer angeben dann erst Server active setzen.. lg rudi :)
Udo Schmitt schrieb: > netcad Das kenne ich auch nicht. Aber netcat :-) Das ist wiederum ein Konsolenprogramm (lief mir auch schon mit dem aussagekräftigen Namen nc über den Weg).
Klaus Wachtler schrieb: > Udo Schmitt schrieb: >> netcad > > Das kenne ich auch nicht. > Aber netcat :-) gmml Klaus Wachtler schrieb: > (lief mir auch schon mit dem > aussagekräftigen Namen nc über den Weg). aka 'not connected'? Passt irgendwie :-)
Lars schrieb: > Wisst ihr, woran das liegen kann, dass er zwar die Anzahl der > empfangenen Bytes anzeigt, aber nicht die Daten selbst? bin mir nicht ganz sicher aber probiere mal: anstatt >
1 | >
|
2 | > while (buff.ready()) { |
3 | > System.out.println(buff.readLine()); |
4 | > } |
5 | >
|
mit dem
>
1 | >
|
2 | > while (buff.ready()) { |
3 | > System.out.println(buff.nextLine() ); |
4 | > } |
5 | >
|
lg
Es gibt eigentlich auf jedem netzwerkfähigen Unix-/Linuxserver eine echo Service. Die Port-Nummer habe ich gerade nicht zur Hand, steht aber in der /etc/services. Kann sein, dass der heute aus Sicherheitsgründen standardmäßig disabled ist, dann musst Du ihn erst freischalten. Dieser Dienst gibt einfach alles, was ihm geschickt wird, unverändert an den Client zurück. Also einfach bei einem Server Deiner Wahl auf diesen Port verbinden, String senden und Antwort einlesen. Wenn es exakt der gleiche String ist sollte Deine Verbindung funktionieren.
:
Bearbeitet durch User
A. H. schrieb: > Es gibt eigentlich auf jedem netzwerkfähigen Unix-/Linuxserver eine > echo Service. Den gibt es auch auf jedem Windows, wird nur normalerweise nicht mit installiert. Zu finden in den "Windows features" als "Simple TCPIP services"
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.