Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » GNU/Linux » Aktuell angemeldete User

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
09.01.2006, 09:52 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


Also noch was.
Ich will in einem C++ Programm alle angemeldeten User anzeigen.
Das geht normal mit utmp.h, bei der anzeige der User habe ich aber kleine Probleme.

C++:
#include <iostream>
#include <utmp.h>
using namespace std;

int main(int argc, char* argv[]) {
   struct utmp utmp;
   cout << utmp.ut_user << endl;
   return 0;
}


Ich hab aber ganz sicher kein User, der "taߤaÓ¿(p@" heißt.
hmm, ut_user ist ein Array vom Typ char und der Größe UT_NAMESIZE. Hat das vielleicht damit was zu tun?

Ach ja, utmp.h ist ein Linux Headerfile

Danke schonmal
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
09.01.2006, 09:54 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja du füllst das struct ja nicht :-)

www.linuxinfor.com/german/man3/getutent.html
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
09.01.2006, 09:58 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


ähm, das wundert nmich jetzt etwas. Wieso muss ich das Ding füllen ?
s hat einen Inhalt (nur den falschen) und die anderen struct parts (die keine Arrays enthalten) funktionieren ja auch problemlos ...
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
09.01.2006, 10:08 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Wo sollen die Daten denn Herkommen wenn du sie nicht füllst?!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
09.01.2006, 10:17 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


Soweit ich die man page verstanden habe, holt es sich die Daten aus Dateien und erzeugt daraus eine Struktur, die die Daten aus der Datei holt und sie in der Variablen innerhalb der Struktur sichert.
Ich mein ich will ja wissen, wer angemeldet ist, wenn ich ihm die Namen vorher geben muss der angemeldeten User, kann ich mir die Abfrage ja auch sparen, dann kenn ich die User ja schon ...
Passiert das nicht innerhalb von utmp.h, das füllen der Struktur ?
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
09.01.2006, 10:31 Uhr
virtual
Sexiest Bit alive
(Operator)



--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
09.01.2006, 10:43 Uhr
virtual
Sexiest Bit alive
(Operator)


So gehts bei mir:

C++:
#include <stdio.h>
#include <utmp.h>


void print_utmp(const struct utmp* e) {
    printf("ut_type:   %hu\n"
           "ut_pid:    %d\n"
           "ut_line:   %s\n"
           "ut_id:     %4.4s\n"
           "ut_user:   %s\n"
           "ut_host:   %s\n\n",
           e->ut_type,
           e->ut_pid,
           e->ut_line,
           e->ut_id,
           e->ut_user,
           e->ut_host);
}

int main() {
    struct utmp* e = NULL;

    /* Rewind */
    setutent();

    /* Loop to read. */
    while (NULL != (e=getutent())) {
        print_utmp(e);
    }

    /* Cleanup */
    endutent();
}


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
09.01.2006, 11:28 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)



Zitat von J-jayz-Z:
Soweit ich die man page verstanden habe, holt es sich die Daten aus Dateien und erzeugt daraus eine Struktur, die die Daten aus der Datei holt und sie in der Variablen innerhalb der Struktur sichert.
Ich mein ich will ja wissen, wer angemeldet ist, wenn ich ihm die Namen vorher geben muss der angemeldeten User, kann ich mir die Abfrage ja auch sparen, dann kenn ich die User ja schon ...
Passiert das nicht innerhalb von utmp.h, das füllen der Struktur ?

utmp.h ist einfach nur eine Header Datei die deinem Compiler sagt das bestimmte Datentypen und Funktionen existieren, was sie für Parameter erwarten und was sie zurück geben.
utmp ist eine Struktor von Variablen. Wenn du diese Variablen ausgeben willst musst du sie vorher mit Weten füllen, sonst wird das ausgegeben was zufällig an der Speicheradresse steht wo die Variable angelegt wurde.
Wie du die Struktur füllst hat dir virtual ja schon gezeigt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
09.01.2006, 21:44 Uhr
Pablo
Supertux
(Operator)



Zitat von J-jayz-Z:
Soweit ich die man page verstanden habe, holt es sich die Daten aus Dateien und erzeugt daraus eine Struktur, die die Daten aus der Datei holt und sie in der Variablen innerhalb der Struktur sichert.
Ich mein ich will ja wissen, wer angemeldet ist, wenn ich ihm die Namen vorher geben muss der angemeldeten User, kann ich mir die Abfrage ja auch sparen, dann kenn ich die User ja schon ...
Passiert das nicht innerhalb von utmp.h, das füllen der Struktur ?


du hast da ein C/C++ Programmierverständnis Problem.

Wenn du sowas machst:


C++:
#include <utmp.h>

void foo()
{
    struct utmp utmp;
    printf("%s\n", utmp.ut_user); /* bzw. cout << ... */
}



dann ist es klar, dass du Müll bekommst, warum?

utmp.h ist nur eine Header Datei, sie deklariert nur Strukturen und Funktionen, mehr nicht. Ein #include <utmp.h> sagt nur, dass du diese Strukturen und Funktionen verwenden willst.

struct utmp utmp; ist nur die Deklaration einer Variable names utmp vom Typ "stuct utmp". Die Variable ist uninitialisiert. Genauso wie wenn du int a; machst, dann hat a einen unbekannten Wert. Dasselbe ist es mit den Members eines structs.

Erst die Funktion getutent liest die Systemdatein, ermittelt welche benutzer eingeloggt sind und speichert ihre Information in einer Variablke von Typ "struct utmp".

Hastd du deinen Fehler gefunden?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 09.01.2006 um 21:44 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
09.01.2006, 21:57 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Gibts sowas auch für btmp? also die "bad"logins? Könnte ich für ne BruteForce-Attack-auf-SSH-Sperrprogramm brauchen. das "manuelle" dekodieren ist halt etwas lahm und vor allem nicht thread-safe
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ GNU/Linux ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: