View previous topic :: View next topic |
Author |
Message |
Gekko l33t
Joined: 29 Oct 2002 Posts: 773
|
Posted: Wed Apr 20, 2005 6:57 pm Post subject: |
|
|
Pamino wrote: | tztz ich dachte das forum hat mehr stil - dann lasst es halt, wenn ihr nicht in der lage seit irgendwas vorzuschlagen aber nur kritisieren und SPAM nachrichten zu posten (Gekko).
@ruth: das scriptkiddie überhör ich mal. das im home soll (später mal) eine resume funktion bereitstellen und da ich bis jetzt if for while schleifen und eben schreiben und lesen aus dateien kenne ist es etwas schwierig wget zu ersetzen. Schließlich mach ich das den dritten Tag. Aber da du dich developer nennst kannst du mir ja einen verbesserungsvorschlag nennen, oder? Und danke nochmals für eure äußerst konstruktiven beiträge.
Interessieren würde mich allerdings wie ich die datei in /tmp umgehen kann, da ich ja string und int nicht miteinander verbinden und so keine url generieren kann. |
1.) Den Tipp Errorhandlers und Parameterübergaben zu verwenden halte ich eigentlich für genauso konstruktive Verbesserungsvorschläge wie das Programm zu dokumentieren...
2.) WIRKLICH konstruktive Kritik kann man in diesem Falle nur machen wenn man den Quelltext hat (Dein Konstrukt bezüglich /tmp ist nicht wirklich zu durchschauen, wenn man die Quelle nicht hat - deshalb darfst du ruth nicht wirklich gram sein.)
3.) Jupp, ich habe gespammt, hab mich nur über die Art der Präsentation Deines Programmes gewundert.....
4.) Auf dieser Seite habe ich schon so manch interessantes gefunden, wenns ums Programmieren geht: http://www.thefreecountry.com/ |
|
Back to top |
|
|
mrsteven Veteran
Joined: 04 Jul 2003 Posts: 1939
|
Posted: Wed Apr 20, 2005 7:01 pm Post subject: |
|
|
Pamino wrote: | ach ^^ das war wohl java |
Nö. das war C-Code, der aber auch in C++ funktioniert. In C++ machen es die meisten aber so, wie ich es gepostet habe.
Quote: | Code: | int main() {
std::ostringstream conv;
int i=302;
conv << "Hallo! Hier ist eine Zahl: " << i;
std::string str = conv.str(); //nur ein Beispiel, wie man einen ostringstream in einen string "umwandelt"
cout << conv.str() << endl;
} |
|
Da fehlt:
Code: | #include <iostream>
#include <sstream> |
Außerdem fügst du besser noch ein "using namespace std;" nach den Includes ein, oder du schreibst immer "std::" vor die Klassen-/Funktionsnamen der Klassenbibliothek. |
|
Back to top |
|
|
Pamino Apprentice
Joined: 07 Apr 2004 Posts: 281 Location: 127.0.0.1
|
Posted: Wed Apr 20, 2005 7:08 pm Post subject: |
|
|
Naja, ich finde das äußerst seltsam, dass sich diverse Leute, die scheinbar irgendwoher doch zumindest teile des Quelltextes haben sich über lächerlich machen, das sie laut eigenen aussagen nichtmal ausgeführt haben. Und bitte: Der geniale Virus:
Quelltext:
Code: | //: C02:cleverloader.cpp
// Clever downloader
#include <string>
#include <cstdlib>
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
int main() {
cout << "Willkommen im smarten Downloadmanager ClEvErLoAdEr 0.1alpha!\nMit diesem kleinen "
<< "Tool können sie durchnumierierte Dateien aus dem Web laden.\nBitte geben sie eine URL "
<< "bis zu der Stelle, an der alle Dateinamen gleich benannt sind, ein:\n" << endl; //Begrüßende Worte mit Beschreibung
string url, type; //Definiere "url" und "type"
cin >> url; //Warte auf Eingabe für den Beginn der URL
cout << "\nNun müssen sie die feste Endung der Dateien angeben:\n" << endl; //Information zur Notwendigkeit der Angabe von der Endung ab nach der Zahl
cin >> type; //Warte auf Endung
cout << "\nHat die Nummerierung eine feste Anzahl von Stellen?\n" //Frage zu Typ der Durchzählung
<< "Bespiel für 3 Stellen: 001, 002 (...) 010, 011... statt 1,2,3,4,5...?\n1 Für ja, 2 für nein\n"
<< "\n!!!ACHTUNG!!!FUNKTION 1 FUNKTIONIERT TEILWEISE NUR MIT 2 STELLEN!!!! 2 Funktioniert PERFEKT!!!\n" << endl;
int nummerierung, maximalnummer, zahl = 1; //Definiere "nummerierung", "maximalnummer" und "zahl"
cin >> nummerierung; //Warte auf Wahl der Numerierungsart
if (nummerierung == 1) { //Zu erledigende Sachen, falls die erste Art gewählt wird
cout << "\nWie viele Stellen hat die Nummerierung immer (min. 2, max. 3)?\n "
<< endl; int stellen, number; cin >> stellen;
if (stellen > 3) cout << "\nZu langer Zahlenstrang!" << endl;
if (stellen <= 0) cout << "\nWie bitte?" << endl;
cout << "\nMit welcher Zahl soll begonnen werden zu zählen?\n" << endl;
cin >> zahl;
cout << "\nWas ist die höchste Zahl der zu ladenden Dateien (max. 3 Stellen)?\n" << endl;
cin >> maximalnummer;
if (stellen = 2) {
for(zahl; zahl <= maximalnummer && zahl < 10; zahl++)
{
number = 0;
ofstream out("/tmp/cleverloader.tmp");
out << "wget " << url << number << zahl << type << endl;
system("cp /tmp/cleverloader.tmp ~/.cleverloader.tmp && chmod 777 ~/.cleverloader.tmp && ~/.cleverloader.tmp");
}
for(zahl; zahl <= maximalnummer && zahl >= 10; zahl++)
{
ofstream out("/tmp/cleverloader.tmp");
out << "wget " << url << zahl << type << endl;
system("cp /tmp/cleverloader.tmp ~/.cleverloader.tmp && chmod 777 ~/.cleverloader.tmp && ~/.cleverloader.tmp");
}
}
if (stellen = 3) {
for(zahl; zahl <= maximalnummer && zahl < 10; zahl++)
{
number = 00;
ofstream out("/tmp/cleverloader.tmp");
out << "wget " << url << number << zahl << type << endl;
system("cp /tmp/cleverloader.tmp ~/.cleverloader.tmp && chmod 777 ~/.cleverloader.tmp && ~/.cleverloader.tmp");
}
for(zahl; zahl <= maximalnummer && zahl >= 10 && zahl <= 99; zahl++)
{
number = 0;
ofstream out("/tmp/cleverloader.tmp");
out << "wget " << url << zahl << type << endl;
system("cp /tmp/cleverloader.tmp ~/.cleverloader.tmp && chmod 777 ~/.cleverloader.tmp && ~/.cleverloader.tmp");
}
}
}
if (nummerierung == 2)
cout << "\nMit welcher Zahl soll begonnen werden zu zählen?\n" << endl;
cin >> zahl;
cout << "\nWas ist die höchste Zahl der zu ladenden Dateien?\n" << endl;
cin >> maximalnummer;
ofstream out("/tmp/cleverloader.tmp");
out << "wget " << url << zahl << type << endl;
for(zahl; zahl <= maximalnummer; zahl++)
{
ofstream out("/tmp/cleverloader.tmp");
out << "wget " << url << zahl << type << endl;
system("cp /tmp/cleverloader.tmp ~/.cleverloader.tmp && chmod 777 ~/.cleverloader.tmp && ~/.cleverloader.tmp");
}
}
|
(Teile sind mittlerweile neu um funktion 1 machbar zu machen.)
Das habe ich nach all meinem 3tage alten Können erstellt und hier sicher nicht gepostet um sich darüber zu streiten.
Das ich den scipt in temp UND in home habe liegt daran, das wenn ich ihn mit system("blabla") aufrufen will eine meldung kommt die soviel sagt dass darauf zugegriffen wird, weshalb ich ihn einfach in home kopiert habe mit einem "DOT" davor, weil sicher niemand (ich zumindest) sowas in meinem home ständig sehen will. Ich frag mich auch nur was daran so dragisch ist das ich ihn für "jeden und alles" ausfürhbar gemacht hab, schließlich ist er ja in dem home-verzeichnis und somit eh nur für den benutzer verwendbar. Eine andere möglichkeit als das zeug mit wget zu saugen kenn ich nunmal nicht warum ich ein "script-wrapper" drauß gemacht hab.[/quote]
Last edited by Pamino on Wed Apr 20, 2005 7:17 pm; edited 2 times in total |
|
Back to top |
|
|
Pamino Apprentice
Joined: 07 Apr 2004 Posts: 281 Location: 127.0.0.1
|
Posted: Wed Apr 20, 2005 7:12 pm Post subject: |
|
|
mrsteven wrote: | Pamino wrote: | ach ^^ das war wohl java |
Nö. das war C-Code, der aber auch in C++ funktioniert. In C++ machen es die meisten aber so, wie ich es gepostet habe.
Quote: | Code: | int main() {
std::ostringstream conv;
int i=302;
conv << "Hallo! Hier ist eine Zahl: " << i;
std::string str = conv.str(); //nur ein Beispiel, wie man einen ostringstream in einen string "umwandelt"
cout << conv.str() << endl;
} |
|
Da fehlt:
Code: | #include <iostream>
#include <sstream> |
Außerdem fügst du besser noch ein "using namespace std;" nach den Includes ein, oder du schreibst immer "std::" vor die Klassen-/Funktionsnamen der Klassenbibliothek. | Danke "using namespace std;" hab ich standdardmäßig scho bei jeder datei drinnen. ich schau mir das mit den std:: schau ich mir noch genauer an, aber so viel ich weiß kommt das eh im 2ten kapitel meines buchs. Aber kannst du mir grob sagen was das std::ostringstream conv; undstd::string str macht? |
|
Back to top |
|
|
ruth Retired Dev
Joined: 07 Sep 2003 Posts: 640 Location: M / AN / BY / GER
|
Posted: Wed Apr 20, 2005 7:29 pm Post subject: |
|
|
Hi,
für einen normalen Menschen liest sich der Thread nämlich so:
Code: |
[person1] hey jungs, ich hab da ein suppertolles programm - wollt ihr testen?
[person2] klar, immer her damit
[person1] liegt hier: http://mitglied.lycos.de/dumdelidumm/cleverloader-0.1a !!! anonymer Webspace !!!
[person2] ohh, das is ja nur ein binary, gibts den quelltext auch?
[person1] neee, gibts nich ;)
[person2] dann mag ichsnicht ausführen
[person1] ach bitte, das macht auch nichts kaputt, führs halt aus... *händereib*
|
nach Durchsicht der Strings der ELF Datei offenbart sich, dass
1) das Programm potentiell über wget zugriff auf das gesamte inet hat
2) das Programm potentiell eine (über wget geladene) Datei nach /tmp/cleverloader.tmp kopiert, das dann in mein $HOME schiebt, das executable bit setzt und anschliessend ausführt.
Damit ist für mich das Programm zumindest potentiell ein Trojaner bis zum Beweis des Gegenteils.
Angriffe dieser Art sind speziell im IRC sehr häufig...(genau auf die hier gesehene Art und Weise)
zuletzt ist es mir immer noch schleierhaft, was das executable Bit auf einer downgeloadeten Daten Datei
verloren hat.
(angenommen den Fall, dass man ein *.mpg, *.pdf, *.tar.gz geladen hat macht das nicht wirklich viel Sinn)
selbige Datendatei (*.jpg, *.mpg, *.tar.gz) dann auszuführen noch viel weniger...
Das ergibt nur dann Sinn, wenn die geladene Datei eine ELF binary oder sowas ist...(und die dann u.U. eine remote Shell öffnet oder etwas anderes lustiges anstellt...)
und die binary werd ich jedenfalls nicht disassemblieren, das ist mir zuviel Stress ebenso ist Quelltext nicht unbedingt gleich Kompilat...
ich hoffe, jetzt wird's klarer was ich meinte...
gruss
ruth _________________ "The compiler has tried twice to abort and cannot do so; therefore, compilation will now terminate."
-- IBM PL/I (F) error manual |
|
Back to top |
|
|
Pamino Apprentice
Joined: 07 Apr 2004 Posts: 281 Location: 127.0.0.1
|
Posted: Wed Apr 20, 2005 7:41 pm Post subject: |
|
|
Naja, klar ist geworden, das du scheinbar die trotz code die funktion von cleverloader.tmp falsch gedeutet hast: In ihr steht nichts anderes als wget <url>. Ausführbar ist es eben weil die generierte <url> geladen werden sollte. Ich hab das so gemacht, weil ich eben nicht in der lage war die url in system (wget....) einzubinden.
Den Code hab ich zuerst nicht gepostet weil mir ein neuer thread wegen diesem winzigen programm nicht wert schien. Und außerdem könnte ich es als beleidigung auffassen dass mir vorgeworfen wird, (theoretisch) in einem forum, dass meine personalien - weiß nicht ob ich sie angegeben hab aber per email addy ist es ein kinderspiel die rauszukreigen - hat einen trojaner zu veröffentlichen. *G* |
|
Back to top |
|
|
ruth Retired Dev
Joined: 07 Sep 2003 Posts: 640 Location: M / AN / BY / GER
|
Posted: Wed Apr 20, 2005 7:55 pm Post subject: |
|
|
hi,
ich habe nichts falsch gedeutet.
ich habe folgende Strings im Programm gefunden(und da hattest du deinen Quelltext _noch_ nicht veröffentlicht, siehe zeitpunkt mein erstes Posting gegenüber Zeitpunkt QuellcodePosting von dir!!!), z.B.
Code: |
...
/tmp/cleverloader.tmp
wget
cp /tmp/cleverloader.tmp ~/.cleverloader.tmp && chmod 777 ~/.cleverloader.tmp && ~/.cleverloader.tmp
|
meine (absolut logische) Schlussfolgerung war, dass wget eine Datei lädt, sie nach /tmp/cleverloader.tmp schreibt, und dann das da ausführt:
Code: |
cp /tmp/cleverloader.tmp ~/.cleverloader.tmp && chmod 777 ~/.cleverloader.tmp && ~/.cleverloader.tmp
|
und das ist nunmal definitiv der Weg aller Script Kiddies, sich auf einem fremden Rechner eine Backdoor zu öffnen.
Ich kann dir nur raten, in deinem eigenen Interesse, in Zukunft lieber (ausschliesslich) den Quelltext zu veröffentlichen und eben nicht ein ELF binary.
vor allem nicht, wenn du da drin solche Sachen stehen hast.
und nur der Vollständigkeit halber:
du hattest zu diesem Zeitpunkt ausschliesslich die Binary gepostet, nicht den Quelltext...
und die war alles andere als koscher.
also halt den Ball flach...
gruss
ruth _________________ "The compiler has tried twice to abort and cannot do so; therefore, compilation will now terminate."
-- IBM PL/I (F) error manual
Last edited by ruth on Wed Apr 20, 2005 9:03 pm; edited 1 time in total |
|
Back to top |
|
|
Pamino Apprentice
Joined: 07 Apr 2004 Posts: 281 Location: 127.0.0.1
|
Posted: Wed Apr 20, 2005 8:02 pm Post subject: |
|
|
ruth wrote: |
also halt den Ball flach...
gruss
ruth | Also jetzt reichts finde ich. Wie man schön sehen kann steht mein Quellcode über deinem post. Das erinnert mich irgendwie an die Sprüche "Erste lesen, dann schreiben" die ich immer gehört habe, als ich vor paar Jahren das internet bekam...
Du hast wohl recht, nur den Code zu posten, den ich allerdings vor wenigen Tagen, wenn ich darauf gestoßen wäre nicht mal kompilieren könnte. Aber da das Programm eigendlich sowieso nur zum eigengebrauch geschrieben ist werde ich sie in keiner weiße veröffentlichen zumal ich ja gerade erst von Gekko erfahren habe wie ihr die strings lesen konntet - da u.a auch du, ruth nicht verraten hast wie ihr darauf kommt und ihr dann dachte ich habt den code irgendwoher?!
Da diese diskussion nicht sinn der sache war, schlage ich vor das thema zu beenden. |
|
Back to top |
|
|
ruth Retired Dev
Joined: 07 Sep 2003 Posts: 640 Location: M / AN / BY / GER
|
Posted: Wed Apr 20, 2005 8:15 pm Post subject: |
|
|
hi,
Quote: |
"Erste lesen, dann schreiben"
|
stimmt:
das ist der Zeitpunkt der veröffentlichung der binary:
Posted: Wed Apr 20, 2005 6:40 pm
das ist der Zeitpunkt meines ersten Postings(ohne Quellcode, dafür mit sehr seltsamen Strings... ):
Posted: Wed Apr 20, 2005 7:26 pm
den Quellcode hast du geposted erst um:
Posted: Wed Apr 20, 2005 9:01 pm
erst denken dann schreiben
und ja, beenden wir's hier
gruss
ruth
p.s.
und nix für ungut - ich reagier aber nunmal ziemlich allergisch auf fremde ELF binarys, die sowas machen
Code: |
cp /tmp/cleverloader.tmp ~/.cleverloader.tmp && chmod 777 ~/.cleverloader.tmp && ~/.cleverloader.tmp
|
... irgendwie verständlich, oder? *gg* _________________ "The compiler has tried twice to abort and cannot do so; therefore, compilation will now terminate."
-- IBM PL/I (F) error manual |
|
Back to top |
|
|
slick Bodhisattva
Joined: 20 Apr 2003 Posts: 3495
|
Posted: Wed Apr 20, 2005 8:30 pm Post subject: |
|
|
Geehrte Hackers, Non-Hackers, l33t5, Noobs und Scriptkiddys,
bitte seid so nett und hört mit den Flames auf. Sonst kommt der böse Mod slick und muß den Thread schliessen.
Sicherlich ist das alles ein Mißverstandnis über das sich vernünftig Konversation treiben läßt.
@ Pamino - Bitte nimm die Kritik zu Herzen. Es mag sein das dies der Quellcode ist, aber schließlich läßt sich auch das File auf dem Webspace schnell austauschen. Niemand will Dir was unterstellen, aber lass Dir auch die Fehler erklären. Nur dann kannst Du was lernen...
@ C-Freaks - Erklärt ihm doch wie das besser geht, sodaß er auch den Mut bekommt seinen Code gleich zu veröffentlichen.
-- slick |
|
Back to top |
|
|
Pamino Apprentice
Joined: 07 Apr 2004 Posts: 281 Location: 127.0.0.1
|
Posted: Wed Apr 20, 2005 8:43 pm Post subject: |
|
|
slick wrote: | Geehrte Hackers, Non-Hackers, l33t5, Noobs und Scriptkiddys,
bitte seid so nett und hört mit den Flames auf. Sonst kommt der böse Mod slick und muß den Thread schliessen.
Sicherlich ist das alles ein Mißverstandnis über das sich vernünftig Konversation treiben läßt.
@ Pamino - Bitte nimm die Kritik zu Herzen. Es mag sein das dies der Quellcode ist, aber schließlich läßt sich auch das File auf dem Webspace schnell austauschen. Niemand will Dir was unterstellen, aber lass Dir auch die Fehler erklären. Nur dann kannst Du was lernen...
@ C-Freaks - Erklärt ihm doch wie das besser geht, sodaß er auch den Mut bekommt seinen Code gleich zu veröffentlichen.
-- slick | Wie schön kann es sein einen Gesetzeshüter zu Treffen Der Teil mit den C-Freaks gefällt mir gut. Ich poste jetzt hier die neueste Version, voll funktionstüchtige cleverloader.cpp, die gerne verberssert wird durch fachmännische Beratung: Und Achtung: kein Trojaner *g*
Code: | //: C02:cleverloader.cpp
// Clever downloader
#include <string>
#include <cstdlib>
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
int main() {
cout << "Willkommen im smarten Downloadmanager ClEvErLoAdEr 0.2!\nMit diesem kleinen "
<< "Tool können sie durchnumierierte Dateien aus dem Web laden.\nBitte geben sie eine URL "
<< "bis zu der Stelle, an der alle Dateinamen gleich benannt sind, ein:\n" << endl; //Begrüßende Worte mit Beschreibung
string url, type; //Definiere "url" und "type"
cin >> url; //Warte auf Eingabe für den Beginn der URL
cout << "\nNun müssen sie die feste Endung der Dateien angeben:\n" << endl; //Information zur Notwendigkeit der Angabe von der Endung ab nach der Zahl
cin >> type; //Warte auf Endung
cout << "\nHat die Nummerierung eine feste Anzahl von Stellen?\n" //Frage zu Typ der Durchzählung
<< "Bespiel für 3 Stellen: 001, 002 (...) 010, 011... statt 1,2,3,4,5...?\n1 Für ja, 2 für nein\n" <<endl;
int nummerierung, maximalnummer, zahl = 1; //Definiere "nummerierung", "maximalnummer" und "zahl"
cin >> nummerierung; //Warte auf Wahl der Numerierungsart
if (nummerierung == 1) { //Zu erledigende Sachen, falls die erste Art gewählt wird
cout << "\nWie viele Stellen hat die Nummerierung immer (min. 2, max. 3)?\n "
<< endl; int stellen, number=0;
cin >> stellen;
if (stellen > 3) cout << "\nZu langer Zahlenstrang!" << endl;
if (stellen <= 0) cout << "\nWie bitte?" << endl;
cout << "\nMit welcher Zahl soll begonnen werden zu zählen?\n" << endl;
cin >> zahl;
cout << "\nGeben sie die höchste Zahl der Dateinumerierung an.\n" << endl;
cin >> maximalnummer;
if (stellen == 2) {
for(zahl; zahl <= maximalnummer && zahl < 10; zahl++)
{
ofstream out("/tmp/cleverloader.tmp");
out << "wget " << url << number << zahl << type << endl;
system("cp /tmp/cleverloader.tmp ~/.cleverloader.tmp && chmod 777 ~/.cleverloader.tmp && ~/.cleverloader.tmp");
}
for(zahl; zahl <= maximalnummer && zahl >= 10; zahl++)
{
ofstream out("/tmp/cleverloader.tmp");
out << "wget " << url << zahl << type << endl;
system("cp /tmp/cleverloader.tmp ~/.cleverloader.tmp && chmod 777 ~/.cleverloader.tmp && ~/.cleverloader.tmp");
}
}
if (stellen == 3) {
for(zahl; zahl <= maximalnummer && zahl < 10; zahl++)
{
ofstream out("/tmp/cleverloader.tmp");
out << "wget " << url << number << number << zahl << type << endl;
system("cp /tmp/cleverloader.tmp ~/.cleverloader.tmp && chmod 777 ~/.cleverloader.tmp && ~/.cleverloader.tmp");
}
for(zahl; zahl <= maximalnummer && zahl >= 10 && zahl <= 99; zahl++)
{
ofstream out("/tmp/cleverloader.tmp");
out << "wget " << url << number << zahl << type << endl;
system("cp /tmp/cleverloader.tmp ~/.cleverloader.tmp && chmod 777 ~/.cleverloader.tmp && ~/.cleverloader.tmp");
}
for(zahl; zahl <= maximalnummer && zahl >= 100 && zahl <= 999; zahl++)
{
ofstream out("/tmp/cleverloader.tmp");
out << "wget " << url << zahl << type << endl;
system("cp /tmp/cleverloader.tmp ~/.cleverloader.tmp && chmod 777 ~/.cleverloader.tmp && ~/.cleverloader.tmp");
}
}
}
if (nummerierung == 2)
cout << "\nMit welcher Zahl soll begonnen werden zu zählen?\n" << endl;
cin >> zahl;
cout << "\nWas ist die höchste Zahl der zu ladenden Dateien?\n" << endl;
cin >> maximalnummer;
ofstream out("/tmp/cleverloader.tmp");
out << "wget " << url << zahl << type << endl;
for(zahl; zahl <= maximalnummer; zahl++)
{
ofstream out("/tmp/cleverloader.tmp");
out << "wget " << url << zahl << type << endl;
system("cp /tmp/cleverloader.tmp ~/.cleverloader.tmp && chmod 777 ~/.cleverloader.tmp && ~/.cleverloader.tmp");
}
} |
|
|
Back to top |
|
|
ruth Retired Dev
Joined: 07 Sep 2003 Posts: 640 Location: M / AN / BY / GER
|
Posted: Wed Apr 20, 2005 8:48 pm Post subject: |
|
|
hi,
also @Pamino:
der system(); call ist insofern schwer sicher zu implementieren, da er schlicht und einfach eine subshell öffnet und das/die übergebenen argument(e) in der subshell ausführt.
falls du also system("wget [foo]"); schreibst, wird das erste wget ausgeführt, das die Shell in $PATH findet.
meistens ist das das richtige Programm. manchmal aber auch nicht; dann wird's kritisch.(path injection!!!)
besser wäre also zumindest sowas: system("/path/to/wget [foo]")
noch besser wäre es, wenn du als downloader mit einer bibliothek (z.B. libcurl) arbeitest:
http://curl.haxx.se/libcurl/
schöne Dokumentation, einfache API; versuchs mal
noch viel 1337er ist es, wenn du dann im nächsten Schritt mit Sockets() arbeitest.
damit bist du am fexiblesten; ist aber auch am schwierigsten.
noch was:
da du ja den wget aufruf in eine executable (shell script) schreiben möchtest, solltest du vorher unbedingt noch einen
shebang (#!/bin/bash)
voranstellen.
ansonsten weiss die shell ja nicht, welchen komandointerpreter sie verwenden soll...
HTH
gruss,
ruth _________________ "The compiler has tried twice to abort and cannot do so; therefore, compilation will now terminate."
-- IBM PL/I (F) error manual |
|
Back to top |
|
|
Pamino Apprentice
Joined: 07 Apr 2004 Posts: 281 Location: 127.0.0.1
|
Posted: Wed Apr 20, 2005 9:04 pm Post subject: |
|
|
Ui, das mit libcurl hört sich doch schon toll an!
Ist das im portage? ich hab net-misc/curl emergt aber der findet beim compilieren die header dateien nicht (#include <curlpp/cURLpp> #include <curlpp/Options>)
Ich hab erstmal eine Frage zu meinen ewgi vielen if-Schleifen: Ist das gut so oder gibt es da elegantere Lösungen? |
|
Back to top |
|
|
ruth Retired Dev
Joined: 07 Sep 2003 Posts: 640 Location: M / AN / BY / GER
|
Posted: Wed Apr 20, 2005 9:29 pm Post subject: |
|
|
hoi,
du könntest statt if(){} if() {} ... mit case arbeiten... wird wohl besser aussehen damit.
ausserdem könntest du dann illegale Angaben per default: abfangen.
Code in Subroutinen(!!) auslagern (siehe hierzu konzept OOP!!!(willst du das wirklich jetzt schon???))
hmm, hehe, so wie's aussieht, ist der C++ Wrapper von libcurl tatsächlich nich' in portage... (??)
musst halt mischmasch(tm) schreiben(*gg*) oder selber bauen.
fyi:
im Tarball
http://rrette.com/curlpp-0.5.0-rc5.tar.gz
ist ein (ex)samples Verzeichnis, das wird dir weiterhelfen...
doku jibbet da:
http://rrette.com/guide-devel.pdf
btw:
meines Erachtens(tm) ist das Konzept, welches hinter c++ steht (OOP) für Anfänger schwer zu durchschauen.
da kommt fast zwangsläufig was prozedurales bei raus; was logisch ist, schliesslich denken Menschen natürlicherweise prozedural und nicht objektorientiert.
deshalb ist es IMHO(tm) immer(tm) besser mit der besten, schönsten, tollsten, schnellsten, abgefahrensten, geilsten,... Sprache der Welt anzufangen, dabei zu bleiben und zu lieben: C *gg*
und wenn du das dann kannnst, kannst du immer noch OOP mit C++ machen...(back to the roots...)
abgesehen davon: wenn du C beherrschst lernst du andere Sprachen innerhalb von Stunden bis Tagen.
Ist halt sozusagen die Mutter aller Programmiersprachen...(naja, hinkt der Vergleich, ich weiss...)
gruss
ruth _________________ "The compiler has tried twice to abort and cannot do so; therefore, compilation will now terminate."
-- IBM PL/I (F) error manual |
|
Back to top |
|
|
Gekko l33t
Joined: 29 Oct 2002 Posts: 773
|
Posted: Wed Apr 20, 2005 9:38 pm Post subject: |
|
|
bei mir ists perl, was mich fesselt......
ich hab mir c angeguckt und c++, java auch aber im endeffekt hab ich noch immer alles mit perl erledigt.
weis auch nicht warum, liegt vielleicht an den guten büchern, die ich mit dafür zugelegt habe. |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|