|
[ BORG @ 26.08.2002. 22:46 ] @
| Pozdrav,
Zanima me kako da napravim jedan C programcic koji ce slati e-mailove na lokalnog usera, npr. [email protected] preko programa /bin/mail i koji ce to raditi u neogranicenom loop-u.
Znaci hocu da napravim program koji bi slao sto brze moze,mailove na korisnika preko lokalnog smtp servera(qmail-a u mom slucaju),i to radio dok god ne pritisnem ctrl+c
Hvala unaprijed
|
[ B o j a n @ 27.08.2002. 00:26 ] @
Hi,
ako si ispravno sve konfigurisao do qmail-a mozes da probas:
Gde ti je moj__email ascii file sa sadrzajem koji saljes.
[ BORG @ 27.08.2002. 01:07 ] @
Znam to.
Namjesten je meni qmail,i radi.Bar je radio kad sam zadnji put slao mail,danas oko 3 sata.
Nego treba mi da salje mail non stop,znaci da posalje xxxxxxx mailova sto je brze moguce gdje `xxxxxxx' broj koliko mailova da posalje.
[ leka @ 27.08.2002. 12:36 ] @
BORG, totalno je neshvatljivo zasto forsiras C u ovom slucaju. Ako vec MORA da se koristi /bin/mail onda bi i taj tvoj C program radio isto sto i Bojanov cat moj__email | mail [email protected]. To sto je C program u pitanju nece nista da ubrza. :)
Ti bi zapravo samo trebalo da napises shell skript koji ce da u petlji radi to sto ti zelis.
[ BORG @ 27.08.2002. 17:32 ] @
"BORG, totalno je neshvatljivo zasto forsiras C u ovom slucaju."
Nema nekog posebnog razloga.
"Ti bi zapravo samo trebalo da napises shell skript koji ce da u petlji radi to sto ti zelis."
Da,to znam.Nego hocu da C program to radi,a ne shell.
Ali....izgleda da cu se morati i zadovoljiti sa shell skriptom ;-]
Pozdrav !
[ BORG @ 27.08.2002. 18:31 ] @
Evo ga u shellu ::
#!/bin/sh
# Evo,za slanje mailova,posto mi niko nije htjeo da pomogne da to napisem u C-u ;-[[[
echo
KOLIKO=200000
for ((a=1; a <= KOLIKO ; a++))
do
printf "`cat neki_fajl | mail -s "test" [email protected]`"
done
echo; echo
Za buduce citaoce foruma ;-]]
[ Dejan Lozanovic @ 27.08.2002. 21:59 ] @
evo ti C program, ni malo kratko :))) ali po protokolu sto bi rekli :))), moglo je i krace da se uradi ako se koristila system funkcija. Ovako je dobijen onaj najnizi C kod :)) mogao bi program jos malko da se frizira tako sto bi se i poziv djure desio u forku :)) na taj nacin main bi pravio decicu nenormalnom brzinom :)) pitanje je samo da li bi mail program mogao da postigne da se mail tako brzo salje i u tom obimu :))
Za friziranje dodati jos samo
Code:
if(fork()==0)
ispred poziva funkcije djuro_radi
Code:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <signal.h>
#include <stdlib.h>
#define BUFFSIZE 4096
#define MAIL "/bin/mail"
void djuro_radi(int fd,char *subject,char *adresa);
main(int argc,char *argv[])
{
int fd; /* za zeljeni mail */
int i,koliko;
if(argc<4)
{
fprintf(stderr,"Sintaksa je: %s <ime_fajla> <subject>"
" <mail_adresa_srecnika> [broj_puta] \n",argv[0]);
exit(1);
}
if( (fd=open(argv[1],O_RDONLY)) < 0)
{
fprintf(stderr,"Nemogu da otvorim mail: %s \n",argv[1]);
exit(1);
}
signal(SIGCHLD,SIG_IGN); /* bice mnogo forkovanja pa da ne da ne
napravimo lokalni DOS:) (ovo nisu
djin-djicu i prijatelji:) sa zombijima,
mada ako malo bolej razmislimo
DOS je stvarno DOS :) */
if(argc==2)
while(1)
djuro_radi(fd,argv[2],argv[3]);
else
{
koliko=atoi(argv[4]);
for(i=0; i < koliko ;i++)
djuro_radi(fd,argv[2],argv[3]);
}
}
/*ovaj sve radi :))) */
void djuro_radi(int fd,char *subject,char *adresa)
{
int pd[2]; /* za pipe*/
char buf[BUFFSIZE];
int n;
pipe(pd);
if(fork())
{
close(pd[0]); /* Roditelj samo pise */
while( (n=read(fd,buf,BUFFSIZE)) > 0 )
write(pd[1],buf,n);
}
else /*dete*/
{
close(0);
dup(pd[0]);
close(pd[0]);
close(pd[1]);
/*I krecemo da pumpamo :) */
execl(MAIL,MAIL,"-s",subject,adresa);
exit(1); /* Do ovde ne sme da dodje */
}
}
Da ne bude posle kako niko nije hteo da ti napravi C program, jeste da smo upotrebili tenk da ubijemo komarca, ali ajde nema veze zezamo se :))
[ BORG @ 27.08.2002. 22:22 ] @
hehehe,znao sam da ce neko napisati program,kad je vidio da sam stavio onaj komentar u shell skripti.
;-]]
#!/bin/sh
###### Evo,za slanje mailova,posto mi niko nije htjeo da pomogne da to napisem u C-u ;-[[[######
echo
KOLIKO=200000
for ((a=1; a <= KOLIKO ; a++))
do
printf "`cat neki_fajl | mail -s "test" [email protected]`"
done
echo; echo
Ali kao sto si vec rekao zezamo se...
Thanks.
[ BORG @ 27.08.2002. 23:11 ] @
btw,jel kod tebe radi ova skripte ??
Kod mene ne.
evo sta strace kaze :
----
bb@gw(~)$ strace ./a.out sasa test bb 2
execve("./a.out", ["./a.out", "sasa", "test", "bb", "2"], [/* 24 vars */]) = 0
uname({sys="Linux", node="gandalf", ...}) = 0
brk(0) = 0x8049b58
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40017000
open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=69935, ...}) = 0
old_mmap(NULL, 69935, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40018000
close(3) = 0
open("/lib/i686/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0p\307\1"..., 1024) = 1024
fstat64(3, {st_mode=S_IFREG|0755, st_size=5790313, ...}) = 0
old_mmap(NULL, 1293320, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x4002a000
mprotect(0x4015d000, 35848, PROT_NONE) = 0
old_mmap(0x4015d000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x132000) = 0x4015d000old_mmap(0x40162000, 15368, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40162000
close(3) = 0
munmap(0x40018000, 69935) = 0
open("sasa", O_RDONLY) = 3
rt_sigaction(SIGCHLD, {SIG_IGN}, {SIG_DFL}, 8) = 0
pipe([4, 5]) = 0
fork() = 2886
close(4) = 0
read(3, "", 4096) = 0
pipe([4, 6]) = 0
--- SIGCHLD (Child exited) ---
fork() = 2887
--- SIGCHLD (Child exited) ---
close(4) = 0
read(3, "", 4096) = 0
_exit(2) = ?
bb@gw(~)$
[ Dejan Lozanovic @ 28.08.2002. 00:21 ] @
da samo pogledaj koliko je ova tvoja shell skriptica kratka, a koliko je ovo moje glomazno tako da ono u principu i ne isplati se mnogo :)
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|