PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : systembefehl



commanderzor
11.09.2006, 10:35
hi @ all

brauch dringend ma hilfe...

ich will mich per telnet in pop.gmx.net einloggen
probiere das so:

system("telnet.exe pop.gmx.net 110")

das tut auch wunderbar aber danach hängt das prg...
ich will nu aber dass er den username automatisch eingibt...

also so

system("telnet.exe pop.gmx.net 110 user username");

und des tut net!

linux_80
11.09.2006, 12:56
Mit system wird das nix gescheites werden,
besser wenn Du das per open machst, und dann stdin/out/err anzapfst, denn das telnet (POP3) ist interaktiv, das wird ansonsten nicht gehen.
Das Prg hängt sich dann nicht, sondern es wartet bis jemand was eingibt, was ja nicht geschehen kann !

commanderzor
11.09.2006, 14:16
danke habs geahnt...

aber wie kann ich das per open machen?
ich bin hir net so der c++ spez.

vlt n grober code?

thx im voraus...

robocat
11.09.2006, 16:30
guck mal hier: http://codefactory.dead-men.de/index.php?tutorial=28
das ist eine port 80 http abfrage mit sockets für windows.
vielleicht lässt sich damit was anfangen, und du kannst dir das telnet sparen.

gruesse von der katz

PicNick
11.09.2006, 18:07
Wenn du eine POp3 server anquatschen willst, ist das (im Prinzip) recht einfach. Du schickst einen Connect an das 110-er Port
Der Server schickt dir Strings mit <CR><LF> hinten, und du schickst genauso was zurück. Das ist bei FTP (21) und Http (80) nicht viel anders.

Soweit sollte es auch mit normalem File-open gehen (hab ich aber noch nicht gemacht, ich nehm die Sockets immer direkt)

WAS hin und hergeschickt wird

http://de.wikipedia.org/wiki/POP3

commanderzor
11.09.2006, 18:16
jo das mit dem connect und dem sonstigen pop gelöt kenne ich schon mein problem ist dass ich keine ahnung habe vonwegen file open und mir das gegoogelte auch eher wenig sagt vlt habt ihr ja nen link bez. einem tutorial.

Ich bin ja eher ein uC programmierer habe also vonwegen windoo...s
eher weniger ahnung daher verstehe das mit dem open net so recht

danke für erklährungen an meine eher mederbemittelte person ;)

robocat
11.09.2006, 18:36
ich hab doch ein tut gepostet! -.-
aber nagut, ich guck mal.. werd evtl hier noch was reineditieren.

gruesse

PicNick
11.09.2006, 18:51
Was soll's denn werden ? Willst du dir deine Mails selbst abholen ?

robocat
11.09.2006, 20:37
lol, verarsch die katze nicht!
genau das hatte ich vor. ich schick mir eine mail und connecte auf den pop3, und lad die mail wieder runter..
das ganze möglichst einfach gestrickt, damit es übersichtlich bleibt.

gruesse ^^

PicNick
12.09.2006, 06:31
Au weia. Ich mußte das selber schreiben, weil es für VMS/Alpha (egal, irgendeine Platform halt) keinen vernünftigen Mail-Client gab (auch nicht zum Mail-wegschicken).
Ich sag dir gleich, das Mail holen hast du gleich beisammen. Aber diese Mails dann Lesen ist eine grausliche Geschichte.

commanderzor
12.09.2006, 08:11
Möchte mich an dieser stelle mal für eure hilfe/geduld bedanken

habe dein tut übersehen sry
ich denke ma das mit dem socket ist der richtige weg.
ich muss nur das zeugs zuerst ma lernen.
ich denke ich versteh was das prgm machen sollte
wenn ich es jedoch kopiere und bei mir
einfüge habe ich da ein klitzekleines problem

nämlich folgendes

[Linker error] undefined reference to `WSAStartup@8' ld returned 1 exit status (what the hell? :-s )
C:\socket\Makefile.win [Build Error] [Project1.exe] Error 1

(ich habe ganz normal im dev-C++ console appl ausgewählt)

tja was nu?

PicNick
12.09.2006, 08:19
Ich füge in das Projekt "WS2_32.LIB" ein. (is im c++ libraryverzeichnis)

commanderzor
12.09.2006, 08:33
sollich dir ma richtig aufn wecker gehen?
ich finds nich! entweder bin ich echt zu dumm
oder ich finde kein einziges .lib file im ganzen dev_cpp ordner

*wahnsinnig werden*

gr comDave

PicNick
12.09.2006, 08:37
Normalerweise dort, wo man den Compiler installiert hat.
Bei mir z.B. is das

C:\Program Files\Microsoft Visual Studio\VC98\Lib

Ahja, nochwas Bei "FIle in Project einfügen" mußt du natürlich den Type "LIB" auswählen

commanderzor
12.09.2006, 08:52
so jetz habe ich es gefunden gab einfach _lib und lib vorallem sind es bei mir *.a files.

so nu beginn ich erstma mit dem lernen ;)

gr comDave

robocat
12.09.2006, 09:58
werde mich heute vielleicht auch mal damit befassen. wenn ich weiß wie es geht, poste ich hier. ich verwende allerdings bcc32, nicht bloodshed oder sowas. sind aber nur kleine unterschiede beim einbinden der libraries.

funktioniert der http-get jetzt bei dir, bzw kannst du es fehlerfrei kompilieren? das proggie ist keine console-anwendung, sondern richtig mit nem fenster und so..

gute tutorial zu winsock finden sich auf http://www.c-worker.ch/

viel erfolg, und melde dich, wenn etwas nicht klappt.

gruesse

commanderzor
12.09.2006, 10:31
DAS hätt ich nicht gesagt... ;)

folgendes prob: ich erstelle eine verbindung zu unserem server
der auch brav antworted dann will ich aber z.B. help senden und wieder
empfangen. nun empfängt er auch was ich geschickt habe also "help",
allerdings schreibt er mir nicht was er zum befehl help meint
z.B "'could not find 'help'".

überdies hab ich beim rückgabewert '4' was ja logischerweise "help" entspricht.

muss ich da noch irgendein <cr><lf> senden? bzw. kann ich das mit \0 \n \x13 tun?

PicNick
12.09.2006, 10:48
Also, bei ASCII ist <CR><LF> immer gut.
Was du da im moment siehst, ist wohl das Echo, weil er wohl denkt, du bist ein Terminal

robocat
15.09.2006, 15:49
so.. das hat zwar ein bisschen gedauert, aber hier habe ich eine console-anwendung, die emails von einem pop3-server herunterläd, sie anzeigt, und anschliessend vom server löscht.

das ganze ist noch nicht ganz perfekt (man sollte zum bleistift bei jedem "send(..);" den rückgabewert prüfen), aber man sieht wie man es macht, und es funktioniert auch (getestet unter xp mit web.de, gmx.de, und meinem webspace-server).



#include<stdio.h>
#include <winsock2.h>
//#include<string.h> // braucht bcc32 nicht

int main(int argc, char* argv[])
{
long rc;
SOCKET s;
SOCKADDR_IN addr;
char buf[1024];
WSADATA wsa;
HOSTENT* he;

int number_of_mails,i;
char *p,*p2;

if(argc!=4)
{
printf("syntax: pop3console.exe host user password\n");
printf("syntax: pop3console.exe pop3.web.de meier@web.de ganzgeheim\n");
exit(1);
}

// socket erstellen und connecten
if(WSAStartup(MAKEWORD(2,0),&wsa)!=0)
{
printf("Could not Startup WSA\n");
exit(1);
}

s=socket(AF_INET,SOCK_STREAM,0);
if(s==INVALID_SOCKET)
{
WSACleanup();
printf("Could not create socket\n");
exit(1);
}

memset(&addr,0,sizeof(SOCKADDR_IN)); // auf 0 setzen
addr.sin_family=AF_INET;
addr.sin_port=htons(110); // port

he=gethostbyname(argv[1]);
memcpy(&(addr.sin_addr),he->h_addr_list[0],4);

rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR));
if(rc==SOCKET_ERROR)
{
closesocket(s);
WSACleanup();
printf("Could not connect\n");
exit(1);
}

printf("connected to %s\n",argv[1]);

// login + check for mail

sprintf(buf,"USER %s\r\n",argv[2]);
rc=send(s,buf,strlen(buf),0);

if(rc==SOCKET_ERROR)
{
closesocket(s);
WSACleanup();
printf("Could not send\n");
exit(1);
}

rc=recv(s,buf,1023,0);
buf[rc]='\0';
printf("%s",buf);

sprintf(buf,"PASS %s\r\n",argv[3]);
rc=send(s,buf,strlen(buf),0);

if(rc==SOCKET_ERROR)
{
closesocket(s);
WSACleanup();
printf("Could not send\n");
exit(1);
}

rc=recv(s,buf,1023,0);
buf[rc]='\0';
printf("%s",buf);

rc=recv(s,buf,1023,0);
buf[rc]='\0';
printf("%s",buf);

sprintf(buf,"STAT\r\n");
rc=send(s,buf,strlen(buf),0);

if(rc==SOCKET_ERROR)
{
closesocket(s);
WSACleanup();
printf("Could not send\n");
exit(1);
}

rc=recv(s,buf,1023,0);
buf[rc]='\0';
printf("%s",buf);

// anzahl der mails bestimmen
// wenn alles geklappt hat, steht hinter dem letzten "+OK" die anzahl der mails im postfach

p=buf;
while(strstr(p,"+OK")!=NULL)
p=strstr(p,"+OK")+1;
p+=3;
p2=strstr(p," ");
if(p&&p2)
{
*p2=0;
number_of_mails=atoi(p);
printf("%d mails auf dem server\n",number_of_mails);
}

// mails runterladen
for(i=1;i<=number_of_mails;i++)
{
sprintf(buf,"RETR %d\r\n",i);
send(s,buf,strlen(buf),0);

do
{
rc=recv(s,buf,1024,0);
buf[rc]='\0';
printf("%s",buf);
if(strstr(&buf[rc-5],"\r\n.\r\n")!=NULL)break;
}
while(rc!=SOCKET_ERROR);

// geladene email vom server löschen
sprintf(buf,"DELE %d\r\n",i);
send(s,buf,strlen(buf),0);
}

// session beenden
sprintf(buf,"QUIT\r\n");
send(s,buf,strlen(buf),0);

// aufraeumen
closesocket(s);
WSACleanup();

return 0;
}


vielleicht hilft es jmd O:)

man würde natürlich die mails lokal speichern, und dann einen emailbetrachter öffnen, statt sie nur in der konsole darzustellen.

eine andere idee ist, daraus einen spamfilter zu basteln, der unerwünschte mails löscht, bevor man sein email-proggie öffnet, das dann den rest runterläd.


Katze: strcmp("QUOTE", "CODE") != 0 ) !!!
na gut na gut.. ich habe gerade festgestellt, dass es mit IE und mozilla kein problem ist, den code zu markieren und zu copypasten. nur mein opera kann das nicht. taugenichtse.

gruesse von der katz

PicNick
15.09.2006, 16:11
Na super, das sollt' doch helfen !

linux_80
15.09.2006, 17:03
Ist Outlook wirklich so schlimm, das man unter XP lieber mit Console arbeitet :-k :cheesy:


SCNR

PicNick
15.09.2006, 18:39
Es ist ganz praktisch, erstmal zu gucken was von wem da ist und wie groß es ist, bevor man das Zeugs runterholt.
Darüber hinaus ist es wohl mehr eine Fingerübung.

Wie gesagt, ich selber MUSSTE, denn für VMS gibts nix brauchbares