eigenen dienst einbinden

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
Benutzeravatar
HelsAett
Beiträge: 749
Registriert: 18.03.2003 18:25:00

eigenen dienst einbinden

Beitrag von HelsAett » 08.01.2004 16:56:27

ich habe einen code der fehlerfrei ist und einen eigenen dienst auf einem port der wahl bereitstellt.
ich habe nun die etc/service bearbeitet und in der /etc/inetd.conf den pfad zum compilierten code aufgenommen, trotzdem lauscht der dienst nicht auf dem zugewissenen port, noch lauscht er auf irgendeinen port. was hab ich vergessen. achja gestartet wird der dienst selbstverständlich auch vorher, beim booten durch /etc/init.d und die berechtigungen für die auszuführende datei stehen auf 777

hat da jemand eine idee was fehlen könnte

gruss helsaett

Benutzeravatar
Bert
Beiträge: 3751
Registriert: 16.07.2002 14:06:52
Wohnort: Dresden
Kontaktdaten:

Re: eigenen dienst einbinden

Beitrag von Bert » 08.01.2004 18:09:13

HelsAett hat geschrieben:ich habe einen code der fehlerfrei ist
Mutige Aussage.
HelsAett hat geschrieben: ich habe nun die etc/service bearbeitet und in der /etc/inetd.conf den pfad zum compilierten code aufgenommen, trotzdem lauscht der dienst nicht auf dem zugewissenen port, noch lauscht er auf irgendeinen port. was hab ich vergessen. achja gestartet wird der dienst selbstverständlich auch vorher, beim booten durch /etc/init.d und die berechtigungen für die auszuführende datei stehen auf 777
Entweder Du läßt den Dienst per inetd laufen (dann startet dieser Dein Programm wenn eine Verbindung zu dem Port aufgemacht wird. Oder Du startest das Programm manuel (oder per Script in /etc/init.d, dann mußt Du natürlich auch Links in den entsprechenden Runlevels anlegen)

Kannst Du das Programm den aus einer Konsole heraus startet? Läuft es dann so wie erwartet?

Vielleicht kannst Du ja auch mal Dein Startscript posten.
Programmer: A biological machine designed to convert caffeine into code.
xmpp:bert@debianforum.de

Benutzeravatar
HelsAett
Beiträge: 749
Registriert: 18.03.2003 18:25:00

Beitrag von HelsAett » 08.01.2004 18:27:31

ja das programm lässt sich nach dem kompilieren auch peer hand in der konsole starten

Code: Alles auswählen

/* Weakserver.c*
* 27.5.2001 *
* */
#include <unistd.h>
#include <stdio.h>
#include <time.h>

#define TITEL "\n\rWillkommen beim Weakserver 0.0.4 \n\rGebe einen der folgenden Befehle ein:\n\r\n\r datum - gibt das aktuelle Datum + Zeit aus\n\r echo - Gibt den Text
aus\n\r quit - Beendet die Sitzung\n\r\n\r"

int Versorge(char *Buffer);

main()
{
char EmpfBuffer[2048];
int Size;

puts(TITEL);
fflush(stdout);
while ((Size = read(0, EmpfBuffer, 2047)) > 0)
{
EmpfBuffer[Size] = 0;
if (Versorge(EmpfBuffer) < 0) break;
}
}

int Versorge(char *Buffer)
{
char EchoNachricht[512];
time_t Zeit;
char *ZeitString;
if (!strncmp(Buffer, "datum", 5))
{
Zeit = time(NULL);
ZeitString = asctime(localtime(&Zeit));
while (isspace(ZeitString[strlen(ZeitString) - 1])) ZeitString[strlen(ZeitString) - 1] = 0;
puts(ZeitString);
fflush(stdout);
return;
}
else if (!strncmp(Buffer, "echo ", 5))
{
strcpy(EchoNachricht, Buffer + 5);
while (isspace(EchoNachricht[strlen(EchoNachricht) - 1])) EchoNachricht[strlen(EchoNachricht) - 1] = 0;
puts(EchoNachricht);
fflush(stdout);
return;
}
else if (!strncmp(Buffer, "quit", 4))
{
puts("bye");
fflush(stdout);
return -1;
}
else
{
while (isspace(Buffer[strlen(Buffer) - 1])) Buffer[strlen(Buffer) - 1] = 0;
strcat(Buffer, " : Unbekannter Befehl\n\r");
puts(Buffer);
}
return 1;
}
Bitte nicht selbstverwenden, es seih den zum testen, das programm enthält einen overflow, will ich auch nur verwenden zum austesten. Ich weisse drauf hin, nicht das jemand denkt probiere ich mal aus und vergisst es dann wieder zu entfernen. könnte ins auge gehen.

gruss helsaett

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 08.01.2004 19:33:48

Hast du an

Code: Alles auswählen

/etc/init.d/inetd restart
gedacht?

Folgender Eintrag müsste funktionieren:

Code: Alles auswählen

7777 stream tcp nowait username /pfad/zum/programm

Torsten
Beiträge: 384
Registriert: 24.09.2002 22:51:07
Kontaktdaten:

Beitrag von Torsten » 08.01.2004 22:32:02

Moinsen,

mal zum reinen Verständnis. Eventuell auch für mich.

Der inetd lauscht doch nach Verbindungen auf diversen sockets (die mit den Diensten registriert wurden). Demnach muss ein Dienst, der dahinter steht, doch auch in irgendeiner Art socket-Programmierung beinhalten. Denn es muss ja selbst ein socket verwendet werden, auf dem der Dienst mittels accept() ein oder mehrere connect()-Anfragen entgegen nimmt.


Grüße

Torsten

Benutzeravatar
spiffi
Beiträge: 1128
Registriert: 09.08.2003 19:02:27

Beitrag von spiffi » 08.01.2004 22:35:51

Nö, musser nicht. Das ist ja das Schicke am inetd.
Der inetd lauscht an dem Port (und übernimmt somit das Handling der Sockets), nimmt Verbindungen an und startet das zugehörige Serverprogramm. Dabei werden Standardein- und ausgabe des gestarteten Programms mit dem socket verbunden.

Torsten
Beiträge: 384
Registriert: 24.09.2002 22:51:07
Kontaktdaten:

Beitrag von Torsten » 08.01.2004 22:45:59

Wirklich jetzt?

Ist ja irre. War mir bis dato nicht bekannt.
Man registriert also ein Programm auf einem Port. Kommt eine Anfrage am entsprechenden Port (egal ob UDP/TCP ..?), so wird das Programm gestartet. Es muss nicht mal ein Netz-Prog sein, welches mit sockets und Trallala ausgestattet ist. Es könnte also auch "Hello World" sein.
Richtig so?

Torsten
Beiträge: 384
Registriert: 24.09.2002 22:51:07
Kontaktdaten:

Beitrag von Torsten » 08.01.2004 22:48:36

Ähm, ich sehe jetzt gerade nicht so recht, wie man in der inetd.conf einen Port angeben kann. :oops:

Benutzeravatar
spiffi
Beiträge: 1128
Registriert: 09.08.2003 19:02:27

Beitrag von spiffi » 08.01.2004 22:52:06

Gar nicht. :D
Den Port gibst Du in der /etc/services an. In der inetd.conf steht dann der korrespondierende Service-Name.

Torsten
Beiträge: 384
Registriert: 24.09.2002 22:51:07
Kontaktdaten:

Beitrag von Torsten » 08.01.2004 23:01:03

Hochinteressant. Tolle Lösung.

Nun muss ich mir mal ein Beispiel ausdenken, dass ich da mal sinnvoll einbaue.

Benutzeravatar
HelsAett
Beiträge: 749
Registriert: 18.03.2003 18:25:00

Beitrag von HelsAett » 08.01.2004 23:05:10

für torsten

/etc/inedt.conf
Weak stream tcp nowait root.root /vollerpfad/zumprog Weak

und ind der /etc/service
Weak 2323/tcp

so gehts und ja du kannst da auch ein "hello world" nehmen

für alle anderen danke für die hilfe

Joghurt seine antwort hat die lösung gebracht
Folgender Eintrag müsste funktionieren:
Code:
7777 stream tcp nowait username /pfad/zum/programm
hat mich auf die idee gebracht mal zu schauen unter welchem user das programm läuft, da war den auch der fehler.

danke für eure hilfe, ich mach mich jetzt ran und teste fleissig weiter

gruss helsaett

Torsten
Beiträge: 384
Registriert: 24.09.2002 22:51:07
Kontaktdaten:

Beitrag von Torsten » 08.01.2004 23:09:37

Ist ja toll. Besten Dank für die Info. An beide.

Dann kann ich also den entsprechenden Rechner vom Netz aus mit Paketen auf einem gewissen Port zumüllen und der Rechner sagt dauernd nur: Hello World.
Genial. :roll:

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 08.01.2004 23:46:45

Ich hatte testweise mal ein Skript der Art

Code: Alles auswählen

tr [A-Za-z] [a-zA-Z]
auf einem Port. War sehr sinnvoll ;)

Antworten