View Full Version : [c]:socket
mercury841
11-06-2006, 19:02
Una domanda veloce: è possibile fare una popen su una socket???????
Un grazie anticipato a chi mi aiuta. Ciao
ilsensine
12-06-2006, 11:04
No.
Devi fare esplicitamente fork()+dup2(socket, stdin|out|err)+exec.
Come fa questo famoso trojan per aprire una backdoor tramite socket, ad esempio:
http://www.hlug.org/trojan/trojan-script
mercury841
12-06-2006, 12:44
Mamma mia che brutta notizia che mi hai dato, :muro:
Grazie per l'aiuto ciao.
ilsensine
12-06-2006, 12:59
Perché brutta? Cosa c'è di difficile?
mercury841
12-06-2006, 14:36
Brutta perchè la popen è più facile da implementare rispetto a dup,fork e exec.
ciao
mercury841
13-06-2006, 16:08
Una volta eseguita questa istruzione:
dup2(sock,STDOUT_FILENO) ;
come faccio a ripristinare la situazione precedente a questa istruzione?, cioè come faccio a riportare lo STDOUT_FILENO come lo standard out?
(sock è il descrittore del socket)
ciao
ilsensine
13-06-2006, 16:43
Fallo dopo la fork sul ramo del child, così non avrà effetto sullo stdout del processo principale.
mercury841
13-06-2006, 19:43
Giusto, grazie mille, ciao
mercury841
14-06-2006, 17:28
perchè quando faccio eseguire al mio programma questa istruzione:
execvp(cmd[0],cmd);
con cmd[0]=cd,cmd[1]=nome_directory,cmd[2]=NULL, mi da questo errore:
"execvp: No such file or directory" ???????
Preciso che con altri comandi tipo ls,rm,mkdir la execvp funziona tranquillamente.
CIao
mercury841
15-06-2006, 12:34
up
ilsensine
15-06-2006, 13:29
Perché "cd" non è un programma, ma un comando builtin di bash.
Forse cerchi la funzione "chdir()".
mercury841
15-06-2006, 13:43
Non ho capito, ma cd non è un comando di shell come ls,rm e pwd?
Ho provato anche con chdir e mi da lo stesso errore.
Ciao
ilsensine
15-06-2006, 13:50
Non ho capito, ma cd non è un comando di shell come ls,rm e pwd?
No. E' un comando builtin di bash, ovvero viene interpretato da bash.
Gli altri sono programmi; con exec* puoi eseguire solo programmi.
Non avrebbe senso inoltre un eventuale "programma che cambia la directory", in quanto la cambia per se -- non per il parent.
Ho provato anche con chdir e mi da lo stesso errore.
Non è un programma da eseguire con exec*, ma una semplice funzione che puoi invocare dal tuo programma.
E' definita se includi <unistd.h>
mercury841
11-07-2006, 16:28
ma pwd non è anch'esso un comando builtin di Bash???
ilsensine
11-07-2006, 16:54
ma pwd non è anch'esso un comando builtin di Bash???
Sì.
Dentro un programma devi usare la funzione getcwd()
Se devi eseguire dei comandi della Shell di sistema va benissimo la funzione system() ;)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.