Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2008
    Messaggi
    146

    Calcolo degli argomenti nel comando PORT del FTP

    Sto creando un client ftp.
    Ora sto implementando il comando PORT.
    Esso come argomento possiede: x1.x2.x3.x4.p1.p2.
    Le x sono le componenti dell'indirizzo ip e p1 e p2 identificano la porta.
    La porta si calcola p1*256+p2.
    Il problema è come calcolo p1 e p2 data una porta???
    Qualcuno può aiutarmi??
    Qualcuna sa perchè si usa questo metodo??

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2008
    Messaggi
    146
    Ho capito come funziona.
    Si divide il numero della porta per 256. Si tiene il numero intero. Questo è p1.
    Mentre il resto della divisione è p2.
    Ma non riesco a capire perchè si sono inventati sto metodo per trasferire il numero di porta.
    Non potevano fare semplicemente PORT numPort??
    Qualcuno sa dirmi il perchè??

  3. #3
    Boh, il concetto di fondo è di spezzare indirizzo e porta in campi da 8 bit ciascuno, non so che utilità pratica possa avere.
    Rispetto alla divisione comunque un metodo più efficiente e semanticamente corretto è l'uso degli operatori bitwise, su cui però non ti so dare indicazioni più precise dal momento che non hai specificato il linguaggio di riferimento.
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Non l'ho mai capito manco io.
    Il comando PORT risale all'RFC-959, se non da prima ancora, per cui trovare le ragioni di determinate decisioni oggi non è proprio immediato.
    Col senno di poi si può comunque dire che come decisione fu sbagliata in quanto nei comandi EPRT e EPSV, che sono molto più recenti, il numero di porta è un normale intero su cui non si deve applicare alcuna operazione aritmetica.
    Rilasciata Python FTP Server library 0.5.1
    http://code.google.com/p/pyftpdlib/

    We'll be those who'll make the italian folks know how difficult can be defecating in Southern California without having the crap flying all around the house.

  5. #5
    Giusto per la cronaca aggiungo che stai ovviamente reinventando l'acqua calda in quanto, come probabilmente gia saprai, un client FTP ce l'hai gia nella libreria standard di Python.
    Rilasciata Python FTP Server library 0.5.1
    http://code.google.com/p/pyftpdlib/

    We'll be those who'll make the italian folks know how difficult can be defecating in Southern California without having the crap flying all around the house.

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2008
    Messaggi
    146
    Sto creando un ftp client per gli esami. Lo so che ci sono a disposizione le librerie con un qualsiasi linguaggio di programmazione.
    Il prob è che mi piacerebbe dare una spiegazione sul perchè di questa suddivisione. Sicuramente almeno un prof(o info o sistemi) mi chiederà: "ma perchè questa suddivisione, non si può spedire direttamente il numero di porta??"

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Dato che il protocollo FTP risale al 1971, quando anche un solo bit costava caro, probabilmente era stato pensato di utilizzare la comunissima notazione posizionale tipica del nostro sistema di numerazione. Dato che il numero di porta può essere un qualunque numero intero compreso fra 0 e 65536 (lascio a te capire perchè 65536), esso va rappresentato su due byte (unsigned).

    Dato che la base di numerazione del sistema informatico è il byte (che ha valori decimali da 0 a 255 = 256 valori in tutto), non vedo dove sia il problema. In un qualunque sistema di numerazione posizionale, il valore numerico rappresentato su due simboli si calcola in questo modo (dato il numero "AB", dove A e B sono due simboli del sistema):

    codice:
    B * (base ^ 0) + A * (base ^ 1)
    Un esempio nel sistema decimale (base 10): il numero "45" rappresenta il valore:

    codice:
    5 * (10 ^ 0) + 4 * (10 ^ 1) = 45
    Se fossimo in un sistema che utilizza il byte come base (quindi il valore 256), avremmo che "45" rappresenta (assumendo che 4 e 5 non siano i caratteri ASCII ma i valori):

    codice:
    5 * (256 ^ 0) + 4 * (256 ^ 1) = 1029
    Tutto qui.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    Originariamente inviato da LeleFT
    Dato che il protocollo FTP risale al 1971, quando anche un solo bit costava caro
    Appunto: perché allora perdere tempo a spezzare il numero di porta, il che tra l'altro allunga la richiesta? Rispetto ad una cosa tipo
    codice:
    PORT 192.168.0.1:21
    viene preferita una notazione più lunga in qualunque circostanza
    codice:
    PORT 192,168,0,1,0,21
    visto che viene impiegato un byte per la virgola e almeno un byte per lo spezzone degli 8 bit più significativi, anche se non serve. Io questo non mi spiego.
    Comunque, forse sarebbe meglio aggiungere al titolo di questo thread un tag [Aria fritta], così si capisce che stiamo discutendo del sesso degli angeli.
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Originariamente inviato da dades
    Sto creando un ftp client per gli esami. Lo so che ci sono a disposizione le librerie con un qualsiasi linguaggio di programmazione.
    Il prob è che mi piacerebbe dare una spiegazione sul perchè di questa suddivisione. Sicuramente almeno un prof(o info o sistemi) mi chiederà: "ma perchè questa suddivisione, non si può spedire direttamente il numero di porta??"
    A una domanda del genere io mi limiterei a rispondere: "questo è quanto dichiara l'RFC" e fine.
    Per il resto sono solo chiacchiere da bar.
    L'RFC è li da decenni ed è cosi piena di imprecisioni, contraddizioni, errori e quant'altro che questo "dettaglio" della porta è davvero il meno, ti assicuro.
    Ci potrei scrivere un paper sulle indecenze della 959. =)
    Rilasciata Python FTP Server library 0.5.1
    http://code.google.com/p/pyftpdlib/

    We'll be those who'll make the italian folks know how difficult can be defecating in Southern California without having the crap flying all around the house.

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da MItaly
    Appunto: perché allora perdere tempo a spezzare il numero di porta, il che tra l'altro allunga la richiesta? Rispetto ad una cosa tipo
    codice:
    PORT 192.168.0.1:21
    viene preferita una notazione più lunga in qualunque circostanza
    codice:
    PORT 192,168,0,1,0,21
    visto che viene impiegato un byte per la virgola e almeno un byte per lo spezzone degli 8 bit più significativi, anche se non serve. Io questo non mi spiego.
    Comunque, forse sarebbe meglio aggiungere al titolo di questo thread un tag [Aria fritta], così si capisce che stiamo discutendo del sesso degli angeli.
    Probabilmente lo hanno fatto per maggiore leggibilità da parte dei programmatori. Il programmatore sa che verrà inviata una stringa di 6 byte (4 per l'indirizzo, 2 per la porta). I punti (o le virgole) servono solo a separare i byte... questo evita di dover riconvertire gli ultimi 2 byte in un numero decimale se si ha già la rappresentazione su 6 byte.

    Per il resto, direi che effettivamente non si tratta di un problema di programmazione, ma va lasciata aperta la discussione in quanto legata ad un protocollo (FTP) che è fortemente connesso con essa.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.