Logischer Fehler... *grmml*
-
all = (*dirzeiger).d_name;
Ich kenne mich mit dir usw. nicht aus, aber gibt .d_name nur den Namen der Datei oder den kompletten Pfad zurück? Falls es nur der Name der Datei ist und die Datei in einem anderen Ordner wie dein Programm liegt findet er sie ja nicht.
@BorisDieKlinge: Weiszt du zufällig wieviel String aufnehmen kann? Doch quasi soviel bis der Heap voll ist, oder? Reicht das nicht?
-
hmm kann sein dachte es ist begrenzt... naja aber X ist doch unendlich, wer hat unendlich speicher?? *fg*
-
fehler schrieb:
logicerror schrieb:
Das Programm tut nicht das was es soll +ggg+
Ich weis es, ich weis es: Du macht etwas falsch.
Meine Meinung: Wer sich nciht wenigstens ansatzweise die Mühe macht den Fehler zu beschreiben hat auch keine Hilfe verdient. Und "tut nicht" ist keine Fehlerbeschreibung.
Also WAS tut es nicht? Stürzt es ab, liefert es falsche Ergebnisse, fährt es den Rechner runter oder instaliert es selbstständig Linux?
Tja wenn du keinen Code lesen kannst...
Ja es stimmt, .d_name gibt nur den Namen der Datei zurück und nicht den kompletten Pfad, natürlich findet das Programm dann nur die Dateien im aktuellen Ordner aber dies ist nicht das Problem, denn ich führe das Programm auch nur in dem Ordner aus, in dem sich die Dateien befinden...
Wenn ich es ausführe kommt immer: "Dateiname: Nichts gefunden", obwohl hier Dateien mit den zu suchenden strings im Verzeichnis sind!!! Außerdem wird auch nichts ins /tmp/hunter kopiert
- was aber dann logisch ist, wenn der das Programm auch nichts findet^^
-
grmmluser schrieb:
Tja wenn du keinen Code lesen kannst...
Sag mal meinst Du wir sind fleischgewordene Compiler und Laufzeitumgebungen?
Wenn ich es ausführe kommt immer: "Dateiname: Nichts gefunden", obwohl hier Dateien mit den zu suchenden strings im Verzeichnis sind!!! Außerdem wird auch nichts ins /tmp/hunter kopiert
- was aber dann logisch ist, wenn der das Programm auch nichts findet^^Hast Du mal versucht mit einem Debugger die Schleife durchzusteppen?
-
strstr
#include <string.h>
char *strstr(const char *s1, const char *s2);
Sucht einen String nach dem Vorkommen eines bestimmten Teilstrings ab.
strstr sucht den über s1 angegebenen String nach dem ersten Vorkommen des Teilstrings s2 ab.Rückgabewert:
strstr liefert einen Zeiger auf den Beginn von s2 in s1 zurück bzw. den Zeigerwert NULL, wenn s2 in s1 nicht vorkommt.Solltest du nicht noch einen Header einbinden?
gruss Redo
-
Und anstelle von strstr() solltest du lieber string::find() verwenden

-
bin den code mal komplett durchgegangen und habs auch etwas umgeschrieben. wenn man anstatt der relativen pfade die absoluten verwendet dann klappts! hier mal der code (klappt bei mir soweit):
#include <iostream> #include <sys/types.h> #include <dirent.h> #include <fstream> //using namespace std; int main(int argc, char *argv[]) { DIR *dir; struct dirent *dirzeiger; //lässt sich wie folgt leichter verwalten und wird übersichtlicher const char* look_for[]={"passwort", "Passwort", "PASSWORT", "Pass", "PASS", "pass", "pw", \ "PW", "pwd", "PWD", "admin", "root", "r00t", "USER", "user", "User",\ "usr", "DB", "db", "ssh", "SSH", "login", "Login", "Kennwort", "kennwort",\ "telnet", 0}; const char** ptr; std::string path=argv[1]+std::string("\\"); std::string file; std::string buf; if (argc < 2) { return 1; } //Verzeichnis öffnen if((dir=opendir(argv[1])) != 0) { //komplettes Verzeichnis Eintrag für Eintrag auslesen while((dirzeiger=readdir(dir)) != 0) { //file enthällt die Datei die im moment eingelesen wird und wird nun mit ifstream bearbeitet ;) file = dirzeiger->d_name; if (file != ".." && file != "." && file != "hunter.out") { bool found=false; std::ifstream in; in.open((path+file).c_str()); if(!in.is_open()) return 2; //hier hat buf den kompletten inhalt der datei!!! std::getline(in, buf, static_cast<char>(EOF)); in.close(); //std::cout<<buf<<std::endl; ptr=look_for; for( ; *ptr; ++ptr) { if(buf.find(*ptr)!=std::string::npos) { found=true; std::cout<<file<<": Gefunden - Schreibe Output"<<std::endl; //system("mkdir(\"/tmp/hunter\")"); std::ofstream of; of.open((path+"hunter.out").c_str()); if(!of.is_open()) return 3; of<<buf; of.close(); } } if(found==false) std::cout<<file<<": Nichts gefunden"<<std::endl; } } } return 0; }
-
Danke für das Code umschreiben

Habe jetzt den Linux Rechner nicht griffbereit, werde es aber am Abend testen, "string.h" ist eigentlich inkludiert^^ k.A. wieso das beim obrigen Code nicht kopiert wurde bzw. ob ich da ne alte Version angehängt habe, was ich aber nicht denke!
-
Funktioniert leider nicht!
Aufruf des Programmes durch:
sudo ./hunter.out .
(. = aktuelle Verzeichnis)/tmp/hunter existiert!!!
-
wozu denn <string.h> inkludieren (btw: hier gibts eh nur <cstring> was aber auch nix bringt)? hab bei meinem code wohl auch das #include <string> vergessen, der compiler hat sich aber auch nicht beschwert. und an grrrgrrr oder grgrmm: lass mal das mit dem "." weg und gibt den kompletten pfad an. wenns auch nicht klappt dann poste deinen code nochmal.
-
habe den absoluten pfad angegeben und es passiert einfach gar nichts!
sry