PDA

View Full Version : Libreria FTP


Progeny
25-11-2001, 13:43
Salve, conoscete qualche libreria da utilizzare in C sotto *nix (e dove scaricarla) che mi permetta utilizzare in pieno il protocollo FTP? ]:| Ho problemi con il comando LIST via ftp, xchè con PORT devo aprire un socket in listening ecc.. è un mezzo casino, gh
bye

silentman
26-11-2001, 08:52
In data 2001-11-25 13:43, Progeny scrive:
Salve, conoscete qualche libreria da utilizzare in C sotto *nix (e dove scaricarla) che mi permetta utilizzare in pieno il protocollo FTP? ]:| Ho problemi con il comando LIST via ftp, xchè con PORT devo aprire un socket in listening ecc.. è un mezzo casino, gh
bye


Ci sono numerosi tutorial su come aprire una socket in listen(), se non hai voglia di leggerteli ti posso consigliare questo: http://freshmeat.net/projects/libfget/

Progeny
26-11-2001, 13:26
Il problema non sarebbe aprire un socket in listening, ma già sto usando un socket, poi ad aprirne un'altro sarebbe un mezzo casino, perchè da una settimana che ho imparato ad usare i socket alla meglio :smile: poi dovrei fare 2 controlli sui dati che ricevo, uff, insomma non ho propio voglia di compicarmi la vita :up:
grazie x l'url, bye

silentman
27-11-2001, 08:42
In data 2001-11-26 13:26, Progeny scrive:
Il problema non sarebbe aprire un socket in listening, ma già sto usando un socket, poi ad aprirne un'altro sarebbe un mezzo casino, perchè da una settimana che ho imparato ad usare i socket alla meglio :smile: poi dovrei fare 2 controlli sui dati che ricevo, uff, insomma non ho propio voglia di compicarmi la vita :up:
grazie x l'url, bye


e' piu semplice di quello che pensi :smile:

PORT MODE:
Client: "PORT a1,a2,a3,a4,p1,p2"
dove a1,a2,a3,a4 sono i byte che rappresentano il tuo ip in notazione puntata mentre p1 e p2 non son altro che il most-significant byte e il less-significant byte della porta. La porta su cui ascoltare la ricavi banalmente con una bind(0), di conseguenza p1=port/256 e p2=port%256.
Il server riceve la request e, al primo comando che involve un trasferimento dati (NLST, LIST, RETR, STOR, STOU o APPE) aprira una connessione all'host:port che tu stesso hai specificato.

PASV MODE:
Client: "PASV"
Server: "227 Entering passive mode (a1,a2,a3,a4,p1,p2)"
In questo caso ancora piu semplice:

unsigned int a1,a2,a3,a4,p1,p2;
char *ptr=strchr(ServerReply,'(');
if (sscanf(ptr,"(%u,%u,%u,%u,%u,%u)",&a1,&a2,&a3,&a4, &p1,&p2) != 6)
{
/* Error parsing reply */
}

a1..a4 contiene, come facilemnte intuibile, gli ottetti dlel'ip cui connettere la socket dati, e la porta e' ricavabile con port=p1*256+p2;

Sorry per essermi dilungato

F.

Progeny
27-11-2001, 13:00
grazie ancora Silent :wink: magari faccio qualche prova e poi vi faccio sapere appena possibile!