none
windows ftp RRS feed

  • Question

  • Bonjour à tous,

     

    Voilà j'ai récément développé un client FTP en vb.net 2003, le pb c'est que je suis derrière une parefeu matériel et que je suis bloqué par ce dernier, j'ai essayé le FTP de windows en ligne de commande..... ce dernier n'est pas bloqué, j'aimerai donc savoir pkoi il n'est pas bloqué sachant qu'aucune exception ne lui a été

    affecté..

    Mon client FTP utilise des sockets, protocol TCP/IP, et je me connecte en passif.

     

    merci d'avance  

    mardi 3 juillet 2007 11:57

Réponses

  • En faite lors de l'ouverture du port pour la reception d'information, il ne se passe rien, au bout de quelques secondes le Serveur FTP n'ayant plus de contact décide de fermer la connection en me retournant un code d'erreur 500 ou 421.

     

    Aprés plusieurs tests je suis sur que ce sont les parefeu qui bloque puisque sur une machine pas trés sécurisé çà marche sans aucun PB....

    je reviens donc sur ma première question comment se fait il que le ftp de windows fonctionne sans pb ...utilise t-il des ports spéciaux ??

    J'ai aussi entendu parler d'une solution alternative qui consisterait a créer un "tunnel" en utilisant le port 80(qui lui est tjrs ouvert) mais je ne sais exactement comment çà fonctionne ??

    merci pour votre aide

    jeudi 9 août 2007 14:02

Toutes les réponses

  • Pouvez-vous poster le code concernant FtpWebRequest ?

    Avez-vous vérifié que vous vous connectez bien à un bon port...

     

    Cordialement

    samedi 14 juillet 2007 08:48
    Modérateur
  • Bonjour Gilles,

     

    Je n'utilise pas de FtpWebRequest, mais un système de socket pour interroger et traiter les réponses de mon serveur FTP. J'ai essayé en mode passif et actif mais dans les deux cas je suis bloqué par le parfeu??

     

    merci pour votre aide

    lundi 16 juillet 2007 06:43
  • Est-ce que vous pouvez publier des extraits de code de la création du socket et de l'envoi des commandes ?

     

    Cordialement

    lundi 16 juillet 2007 18:26
    Modérateur
  • Voila ma classe FTP je ne publie pas les sources de l'interface mais j'invoque les commandes de la manière suivante:

    je me base sur un système d'événement pour enhainer les commandes....ce code marche sur toutes les machines qui ne se trouve pas derrière un parefeu matériel.

     

    désolé pour le bordel mais j'ai pas voulu le séctioné.

     

    Traitement pour la connection:

    sendOpen()

    SendUser()

    SendPass()

    SendPwd()

    SendTypeI()

    SendPasv()

    ....

     

    Merci

    '*******************************************************************************

     

    '* Date :

    '* Projet : Service Web

    '* Classe : ClsFtp

    '* Operation : Classe permettant la connexion et le téléchargement de

    ' fichiers à partir d'un serveur FTP. Le traitement des

    ' informations renvoyé par le FTP permet

    '

    '*******************************************************************************

    Imports System.Net

    Imports System.Net.Sockets

    Imports System.Threading

    Imports System.IO

    Public Class ClsFTP

    'Adresse Hôte

    Public host As String

    'Utilisateur

    Public username As String

    'Pass de connection

    Public password As String

    'Port de connection

    Private port As Integer = 21

    Private portData As Integer = 20

    'Socket pour envoyer et recevoir des informations

    Private socketCommand As Socket

    Private socketServer As Socket

    'Socket pour le traitement des données

    Private socketData As Socket

    Public isOpen As Boolean

    'Permet de vérifier le nombre de bits reçu

    Private nbrebytes As String

    Public isConnected As Boolean

    'Certaines commandes reçoivent les mêmes réponses,

    'leur traitement est donc associé à une variable.

    'Ex : Variable pour le message 200

    Private message200 As Integer = 10

    Private message250 As Integer = 10

    Private message150 As Integer = 10

    Private message257 As Integer = 10

    Private FileSize As Integer = 0

    Public isList As Boolean = False

    Public isDownload As Boolean = False

    Public isUpload As Boolean = False

    Public fichierATelecharger As String

    Public fichierAEnvoyer As String

    Public RepDestination As String

     

     

    'Renvoi l'adresse IP local

    Private Function GetMyAddress() As String

    Return Dns.Resolve(Dns.GetHostName()).AddressList(0).ToString

    End Function

     

    #Region "Connection au serveur"

    Public Sub sendOpen()

    If Not isOpen Then

    'Creation d'un nouveau socket

    socketCommand = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)

    Try

    RaiseEvent EnvoiCommande("> Connection en cours")

    'Connection à l'hôte

    socketCommand.Connect(New IPEndPoint(Dns.Resolve(host).AddressList(0), port))

    isOpen = True

    'Si la connection est établie on traite les réponses du serveur

    Dim th As New Thread(New ThreadStart(AddressOf traiterReponse))

    th.Start()

    Catch ex As Exception

    'Connection impossible

    RaiseEvent ErreurCommande(ex.Message)

    End Try

    Else

    'Envoi de la commande USER

    SendUser()

    End If

    End Sub

    #End Region

    #Region "Utilisateur"

    'Commande USER

    'Envoi le nom de l'utilisteur

    Public Sub SendUser()

    Try

    'Stocks les informations dans un tableau de bits

    'pour éviter les erreurs d'interprétations ( ex : é, à, ä, ...)

    'Problème avec certain FTP

    RaiseEvent EnvoiCommande("> USER " + username)

    socketCommand.Send(System.Text.Encoding.ASCII.GetBytes("USER" + Convert.ToChar(32) + username + Convert.ToChar(13) + Convert.ToChar(10)))

    Catch ex As Exception

    RaiseEvent ErreurCommande(ex.Message)

    End Try

    End Sub

    #End Region

    #Region "Mot de passe"

    'Envoi le mot de passe au serveur sous forme binaire

    Public Sub SendPass()

    Try

    RaiseEvent EnvoiCommande("> PASS " + password)

    socketCommand.Send(System.Text.Encoding.ASCII.GetBytes("PASS" + Convert.ToChar(32) + password + Convert.ToChar(13) + Convert.ToChar(10)))

    Catch ex As Exception

    RaiseEvent ErreurCommande(ex.Message)

    End Try

    End Sub

    #End Region

    #Region "Reponse FTP"

    'Récupération et traitement des événements à partir du FTP

    Public Sub traiterReponse()

    While True

    Try

    'Récupération des réponses

    Dim data(1024) As Byte

    Dim nbrerec As Integer = socketCommand.Receive(data)

    'Utilisation d'une chaîne pour stocké les informations

    Dim message As String = ""

    'Recreéation de la liste des fichiers

    For i As Integer = 0 To nbrerec - 1

    message += Convert.ToChar(data(i)).ToString

    Next

    'Tous les messages commences par un code de trois chiffres

    Dim index As Integer = CInt(message.Substring(0, 3))

    RaiseEvent ReceptiondeCommande("< " + message)

    Select Case index

    Case 150 '250 Waiting for the DataConnection with the FTP

    'Si un téléchargement a été initié

    If isDownload Then

    'On vérifie le message reçu pour connaître le nombre de bit reçu

    Dim adresse As String = message.Substring(message.IndexOf("(") + 1, (message.IndexOf(")") - message.IndexOf("(") - 1))

    nbrebytes = ""

    For i As Integer = 0 To adresse.Length - 1

    Try

    Dim tempI As Integer = CInt(adresse.Chars(i).ToString)

    nbrebytes += adresse.Chars(i).ToString

    Catch ex As Exception

    Exit For

    End Try

    Next

    End If

    Case 200 'Port command successful

    Select Case message200

    Case 0

    RaiseEvent OnSendPort(message) 'LIST, RETR OR STOR

    Case 1

    ' RaiseEvent OnSendTypeA(message) 'PASV

    Case 2

    RaiseEvent OnSendTypeI(message) 'PASV

    End Select

    message200 = 10

    Case 213 'Taille du fichier

    FileSize = CInt(message.Substring(4, message.Length - 4).TrimEnd)

    RaiseEvent OnSendSize(message)

    Case 221 '221 Deconnexion

    RaiseEvent OnSendQuit(message) 'INTERFACE ACTIONS

    isConnected = False

    isOpen = False

    Exit While

    Case 220 '220 connection ok

    RaiseEvent OnSendOpen(message) 'USER

    Case 226 'File transfert successfull (message non traitée car soulevé en décalage avec le thread principale

    'RaiseEvent OnDownloadedFile(message)

    'RaiseEvent OnDownloadedFile("Fichier télécharger (" + fichierATelecharger + ")")

    Case 230 '230 User USERNAME logged in.

    isConnected = True

    RaiseEvent OnSendPass(message) 'SYST

    Case 331 '331 Password required for USERNAME.

    RaiseEvent OnSendUser(message) 'PASS

    Case 421 '421 Impossible d'établir la connexion

    RaiseEvent OnDataConnectionInUse(message)

    Case 425 '425 Try later, data connection in use.

    RaiseEvent OnDataConnectionInUse(message)

    Case 530 '530 Login ou mot de passe incorrecte.

    RaiseEvent OnSendPassError(message)

    Case 257

    Select Case message257

    Case 0

    ' RaiseEvent OnSendMkd(message) 'TYPE A - LIST

    Case 1

    RaiseEvent OnSendPwd(message) 'TYPE A - LIST

    End Select

    message257 = 10

    Case 227 '227 Entering Passive Mode (ex : 80,86,193,27,98,190)

    'RECOVER THE PORT NUMBER FOR RECEIVING DATA

    Dim adresse As String = message.Substring(message.IndexOf("(") + 1, (message.IndexOf(")") - message.IndexOf("(") - 1))

    Dim ip As String = ""

    Dim portA As String = ""

    Dim portB As String = ""

    Dim cpt As Integer = 0

    Dim isModPort As Boolean = False

    For i As Integer = 0 To adresse.Length - 1

    'Découpe de la chaîne pour définir les numéros de port

    If cpt = 4 Then

    If adresse.Chars(i) = "," Then

    isModPort = True

    Else

    If isModPort Then

    portB += adresse.Chars(i)

    Else

    portA += adresse.Chars(i)

    End If

    End If

    Else

    If adresse.Chars(i) = "," Then

    If cpt < 3 Then

    ip += "."

    End If

    cpt += 1

    Else

    ip += adresse.Chars(i)

    End If

    End If

    Next

    'Calcul le port d'entrée à partir de l'ip renvoyé par le serveur FTP

    portData = CInt(portA) * 256 + CInt(portB)

    Dim th As New Thread(New ThreadStart(AddressOf TraiteDonnees))

    th.Start()

    'Send PORT Command

    SendPort(portA, portB)

    Case 421 'fermeture de la connexion par le serveur (survient lors d'un delai d'attente trop long)

    RaiseEvent OnDataConnectionReleased(message)

    Case 425 '425 Try later, data connection in use.

    RaiseEvent OnDataConnectionInUse(message)

    Case 426 '426 Data connection closed, transfer aborted.

    RaiseEvent OnDataConnectionReleased(message)

    Case 530 '530 Login ou Password incorrect.

    RaiseEvent OnSendPassError(message)

    Case Else

    RaiseEvent ErreurReponseFtp(message)

    End Select

    Catch ex As Exception

    RaiseEvent ErreurConnection(ex.message)

    Exit While

    End Try

    End While

    End Sub

    #End Region

    #Region "Liste des fichiers"

    Public Sub SendList()

    ' If isConnected Then

    Try

    'message150 = 0

    RaiseEvent EnvoiCommande("> LIST")

    socketCommand.Send(System.Text.Encoding.ASCII.GetBytes("LIST" + Convert.ToChar(13) + Convert.ToChar(10)))

    Catch ex As Exception

    'Erreur sur la commande LIST

    RaiseEvent ErreurCommande(ex.Message)

    End Try

    ' End If

    End Sub

    #End Region

    #Region "Repertoire courant du serveur"

    Public Sub SendPwd()

    If isConnected Then

    Try

    message257 = 1

    RaiseEvent EnvoiCommande("> PWD")

    socketCommand.Send(System.Text.Encoding.ASCII.GetBytes("PWD" + Convert.ToChar(13) + Convert.ToChar(10)))

    Catch ex As Exception

    RaiseEvent ErreurCommande(ex.Message)

    End Try

    End If

    End Sub

    #End Region

    #Region "Mode de communication passif"

    'Commande PASV

    'Initie une connexion passive, c'est le client qui va contrôler tous le

    'processus et décider ou non d'un transfert, les parefeus et antivirus seront moins retissant

    'Cette commande est suivi par ma commande PORT

    Public Sub SendPasv()

    If isConnected Then

    Try

    RaiseEvent EnvoiCommande("> PASV")

    socketCommand.Send(System.Text.Encoding.ASCII.GetBytes("PASV" + Convert.ToChar(13) + Convert.ToChar(10)))

    Catch ex As Exception

    RaiseEvent ErreurCommande(ex.Message)

    End Try

    End If

    End Sub

    #End Region

    #Region "PORT"

    'Commande PORT

    'Nécessaire pour spécifier à partir des deux PORTS spécifiés le serveur

    'est capable de déterminer le port d'envoi des données

    Public Sub SendPort(ByVal portA As String, ByVal portB As String)

    If isConnected Then

    Try

    message200 = 0

    'Envoi de la commande PORT

    socketCommand.Send(System.Text.Encoding.ASCII.GetBytes("PORT " + GetMyAddress.ToString.Replace(".", ",") + "," + portA + "," + portB + Convert.ToChar(13) + Convert.ToChar(10)))

    Catch ex As Exception

    RaiseEvent ErreurCommande(ex.Message)

    End Try

    End If

    End Sub

    #End Region

     

    #Region "Reception et traitement des données"

    Public Sub TraiteDonnees()

    Try

    'Initialise the sockets

    socketServer = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)

    socketData = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)

    'End Ip address is your

    Dim tempIPEP As New IPEndPoint(IPAddress.Parse(GetMyAddress), portData)

    'Bind : pour mettre le socket en écoute sur le port spécifié par le serveur FTP

    socketServer.Bind(tempIPEP)

    '10:nombre de connexions clientes max que l'on peut mettre attente sur ce port

    socketServer.Listen(10)

    socketData = socketServer.Accept()

    'Téléchargement demandée

    If isDownload Then

    RaiseEvent OnDownloadStarted("Download started")

    Dim th As New Thread(New ThreadStart(AddressOf telecharger))

    th.Start()

    ElseIf isUpload Then

    RaiseEvent OnUploadStarted("Upload strated")

    Dim th As New Thread(New ThreadStart(AddressOf SendFileUpload))

    th.Start()

    End If

    Catch ex As Exception

    RaiseEvent OnConnectionDataError(ex.Message)

    End Try

    End Sub

    #End Region

    #Region "Commande TYPE I"

    'Le transfert d'effectue en binaire

    Public Sub SendTypeI()

    If isConnected Then

    Try

    message200 = 2

    RaiseEvent EnvoiCommande("> TYPE I")

    socketCommand.Send(System.Text.Encoding.ASCII.GetBytes("TYPE" + Convert.ToChar(32) + "I" + Convert.ToChar(13) + Convert.ToChar(10)))

    Catch ex As Exception

    RaiseEvent ErreurCommande(ex.Message)

    End Try

    End If

    End Sub

    #End Region

     

    End Class

    mardi 17 juillet 2007 06:54
  • Voila ma classe FTP je ne publie pas les sources de l'interface mais j'invoque les commandes de la manière suivante:

    je me base sur un système d'événement pour enhainer les commandes....ce code marche sur toutes les machines qui ne se trouve pas derrière un parefeu matériel.

     

    désolé pour le bordel mais j'ai pas voulu le séctioné.

     

    Traitement pour la connection:

    sendOpen()

    SendUser()

    SendPass()

    SendPwd()

    SendTypeI()

    SendPasv()

    ....

     

    Merci

    'Exit For

    End Try

    Next

    End If

    Case 200 'Port command successful

    Select Case message200

    Case 0

    RaiseEvent OnSendPort(message) 'LIST, RETR OR STOR

    Case 1

    ' RaiseEvent OnSendTypeA(message) 'PASV

    Case 2

    RaiseEvent OnSendTypeI(message) 'PASV

    End Select

    message200 = 10

    Case 213 'Taille du fichier

    FileSize = CInt(message.Substring(4, message.Length - 4).TrimEnd)

    RaiseEvent OnSendSize(message)

    Case 221 '221 Deconnexion

    RaiseEvent OnSendQuit(message) 'INTERFACE ACTIONS

    isConnected = False

    isOpen = False

    Exit While

    Case 220 '220 connection ok

    RaiseEvent OnSendOpen(message) 'USER

    Case 226 'File transfert successfull (message non traitée car soulevé en décalage avec le thread principale

    'RaiseEvent OnDownloadedFile(message)

    'RaiseEvent OnDownloadedFile("Fichier télécharger (" + fichierATelecharger + ")")

    Case 230 '230 User USERNAME logged in.

    isConnected = True

    RaiseEvent OnSendPass(message) 'SYST

    Case 331 '331 Password required for USERNAME.

    RaiseEvent OnSendUser(message) 'PASS

    Case 421 '421 Impossible d'établir la connexion

    RaiseEvent OnDataConnectionInUse(message)

    Case 425 '425 Try later, data connection in use.

    RaiseEvent OnDataConnectionInUse(message)

    Case 530 '530 Login ou mot de passe incorrecte.

    RaiseEvent OnSendPassError(message)

    Case 257

    Select Case message257

    Case 0

    ' RaiseEvent OnSendMkd(message) 'TYPE A - LIST

    Case 1

    RaiseEvent OnSendPwd(message) 'TYPE A - LIST

    End Select

    message257 = 10

    Case 227 '227 Entering Passive Mode (ex : 80,86,193,27,98,190)

    'RECOVER THE PORT NUMBER FOR RECEIVING DATA

    Dim adresse As String = message.Substring(message.IndexOf("(") + 1, (message.IndexOf(")") - message.IndexOf("(") - 1))

    Dim ip As String = ""

    Dim portA As String = ""

    Dim portB As String = ""

    Dim cpt As Integer = 0

    Dim isModPort As Boolean = False

    For i As Integer = 0 To adresse.Length - 1

    'Découpe de la chaîne pour définir les numéros de port

    If cpt = 4 Then

    If adresse.Chars(i) = "," Then

    isModPort = True

    Else

    If isModPort Then

    portB += adresse.Chars(i)

    Else

    portA += adresse.Chars(i)

    End If

    End If

    Else

    If adresse.Chars(i) = "," Then

    If cpt < 3 Then

    ip += "."

    End If

    cpt += 1

    Else

    ip += adresse.Chars(i)

    End If

    End If

    Next

    'Calcul le port d'entrée à partir de l'ip renvoyé par le serveur FTP

    portData = CInt(portA) * 256 + CInt(portB)

    Dim th As New Thread(New ThreadStart(AddressOf TraiteDonnees))

    th.Start()

    'Send PORT Command

    SendPort(portA, portB)

    Case 421 'fermeture de la connexion par le serveur (survient lors d'un delai d'attente trop long)

    RaiseEvent OnDataConnectionReleased(message)

    Case 425 '425 Try later, data connection in use.

    RaiseEvent OnDataConnectionInUse(message)

    Case 426 '426 Data connection closed, transfer aborted.

    RaiseEvent OnDataConnectionReleased(message)

    Case 530 '530 Login ou Password incorrect.

    RaiseEvent OnSendPassError(message)

    Case Else

    RaiseEvent ErreurReponseFtp(message)

    End Select

    Catch ex As Exception

    RaiseEvent ErreurConnection(ex.message)

    Exit While

    End Try

    End While

    End Sub

    #End Region

    #Region "Liste des fichiers"

    Public Sub SendList()

    ' If isConnected Then

    Try

    'message150 = 0

    RaiseEvent EnvoiCommande("> LIST")

    socketCommand.Send(System.Text.Encoding.ASCII.GetBytes("LIST" + Convert.ToChar(13) + Convert.ToChar(10)))

    Catch ex As Exception

    'Erreur sur la commande LIST

    RaiseEvent ErreurCommande(ex.Message)

    End Try

    ' End If

    End Sub

    #End Region

    #Region "Repertoire courant du serveur"

    Public Sub SendPwd()

    If isConnected Then

    Try

    message257 = 1

    RaiseEvent EnvoiCommande("> PWD")

    socketCommand.Send(System.Text.Encoding.ASCII.GetBytes("PWD" + Convert.ToChar(13) + Convert.ToChar(10)))

    Catch ex As Exception

    RaiseEvent ErreurCommande(ex.Message)

    End Try

    End If

    End Sub

    #End Region

    #Region "Mode de communication passif"

    'Commande PASV

    'Initie une connexion passive, c'est le client qui va contrôler tous le

    'processus et décider ou non d'un transfert, les parefeus et antivirus seront moins retissant

    'Cette commande est suivi par ma commande PORT

    Public Sub SendPasv()

    If isConnected Then

    Try

    RaiseEvent EnvoiCommande("> PASV")

    socketCommand.Send(System.Text.Encoding.ASCII.GetBytes("PASV" + Convert.ToChar(13) + Convert.ToChar(10)))

    Catch ex As Exception

    RaiseEvent ErreurCommande(ex.Message)

    End Try

    End If

    End Sub

    #End Region

    #Region "PORT"

    'Commande PORT

    'Nécessaire pour spécifier à partir des deux PORTS spécifiés le serveur

    'est capable de déterminer le port d'envoi des données

    Public Sub SendPort(ByVal portA As String, ByVal portB As String)

    If isConnected Then

    Try

    message200 = 0

    'Envoi de la commande PORT

    socketCommand.Send(System.Text.Encoding.ASCII.GetBytes("PORT " + GetMyAddress.ToString.Replace(".", ",") + "," + portA + "," + portB + Convert.ToChar(13) + Convert.ToChar(10)))

    Catch ex As Exception

    RaiseEvent ErreurCommande(ex.Message)

    End Try

    End If

    End Sub

    #End Region

     

    #Region "Reception et traitement des données"

    Public Sub TraiteDonnees()

    Try

    'Initialise the sockets

    socketServer = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)

    socketData = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)

    'End Ip address is your

    Dim tempIPEP As New IPEndPoint(IPAddress.Parse(GetMyAddress), portData)

    'Bind : pour mettre le socket en écoute sur le port spécifié par le serveur FTP

    socketServer.Bind(tempIPEP)

    '10:nombre de connexions clientes max que l'on peut mettre attente sur ce port

    socketServer.Listen(10)

    socketData = socketServer.Accept()

    'Téléchargement demandée

    If isDownload Then

    RaiseEvent OnDownloadStarted("Download started")

    Dim th As New Thread(New ThreadStart(AddressOf telecharger))

    th.Start()

    ElseIf isUpload Then

    RaiseEvent OnUploadStarted("Upload strated")

    Dim th As New Thread(New ThreadStart(AddressOf SendFileUpload))

    th.Start()

    End If

    Catch ex As Exception

    RaiseEvent OnConnectionDataError(ex.Message)

    End Try

    End Sub

    #End Region

    #Region "Commande TYPE I"

    'Le transfert d'effectue en binaire

    Public Sub SendTypeI()

    If isConnected Then

    Try

    message200 = 2

    RaiseEvent EnvoiCommande("> TYPE I")

    socketCommand.Send(System.Text.Encoding.ASCII.GetBytes("TYPE" + Convert.ToChar(32) + "I" + Convert.ToChar(13) + Convert.ToChar(10)))

    Catch ex As Exception

    RaiseEvent ErreurCommande(ex.Message)

    End Try

    End If

    End Sub

    #End Region

     

    End Class

    mardi 17 juillet 2007 06:54
  • Le code au niveau de la connexion à l'air bon...

     

    A quel endroit de votre code l'application est bloquée ?

    mardi 17 juillet 2007 16:01
    Modérateur
  • Mon code est bloquée au niveau du téléchargement des données:

     

    Sub telecharger()

    Dim completeFileName As String

     

    Try

    Dim rest As Integer = 0

    'Allocation d'un espace mémoire pour la reception des données

    Dim Buffer(FileSize) As Byte

    Dim data(CInt(nbrebytes)) As Byte

    'Index

    Dim index As Integer = 0

    Do

    rest = socketData.Receive(Buffer)

    If rest > 0 Then

    Array.Copy(Buffer, 0, data, index, rest)

    index += rest

    RaiseEvent OnDownloadingFile("Fichier en téléchargement " + fichierATelecharger, index, CInt(nbrebytes))

    End If

    Loop While rest > 0

     

    'Si la socket est connectée, déconnecter

    If socketData.Connected Then

    socketData.Close()

    End If

    'Chemin du fichier à télécharger

    If RepDestination.Chars(RepDestination.Length - 1) = "\" Then

    completeFileName = RepDestination + fichierATelecharger

    Else

    completeFileName = RepDestination + "\" + Path.GetFileName(fichierATelecharger)

    End If

    'Diriger le flux vers le répertoire de sortie

    Dim stream As FileStream

    stream = File.OpenWrite(completeFileName)

    For i As Integer = 0 To data.Length - 1

    stream.WriteByte(data(i))

    Next

    stream.Close()

    RaiseEvent OnDownloadedFile("Fichier télécharger (" + fichierATelecharger + ")")

    Catch ex As System.ArgumentException

    ' SendAbort()

    If socketData.Connected Then

    socketData.Close()

    End If

    RaiseEvent ErreurFileReceived(ex.Message)

    Catch ex As Exception

    RaiseEvent OnDownloadedFileError(ex.Message)

    End Try

    Thread.Sleep(2000)

    End Sub

     

    je ne posséde pas de parefeu matériel, je n'ai donc pas pu déterminer le code bloqué par le parefeu...pensé vous qu'un parefeu matériel soi capable de détecter les flux binaires et les bloqués si il ne sont pas "signés" ???

    mercredi 18 juillet 2007 06:55
  • Oui ce genre de parefeu existe, mais on ce sont des pare-feu haut gamme du genre ceux de Cisco....

     

    Quand vous dites "bloqué" cela veut dire que votre programme s'arrête à quelle ligne ?

     

     

    Cordialement
    mercredi 18 juillet 2007 12:36
    Modérateur
  • En faite lors de l'ouverture du port pour la reception d'information, il ne se passe rien, au bout de quelques secondes le Serveur FTP n'ayant plus de contact décide de fermer la connection en me retournant un code d'erreur 500 ou 421.

     

    Aprés plusieurs tests je suis sur que ce sont les parefeu qui bloque puisque sur une machine pas trés sécurisé çà marche sans aucun PB....

    je reviens donc sur ma première question comment se fait il que le ftp de windows fonctionne sans pb ...utilise t-il des ports spéciaux ??

    J'ai aussi entendu parler d'une solution alternative qui consisterait a créer un "tunnel" en utilisant le port 80(qui lui est tjrs ouvert) mais je ne sais exactement comment çà fonctionne ??

    merci pour votre aide

    jeudi 9 août 2007 14:02