1. #1
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    mai 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : mai 2012
    Messages : 28
    Points : 15
    Points
    15

    Par défaut Sockets via Proxy avec authentification

    Bonjour à tous,

    Je ne sais pas si je poste au bon endroit car mon problème concerne VB .Net ET la programmation réseau ?

    Je cherche depuis plusieurs jours à implémenter un code qui permettra de tester une connexion vers internet via un proxy avec
    authentification en utilisant l'objet "Sockets".

    J'utilise Fiddler pour capturer la connexion de mon logiciel développé à l'aide de Microsoft Visual Studio Express 2012 (Visual Basic).
    Cela fonctionne très bien pour le mode TCP/WebRequest.
    Je mets le code qui fonctionne bien ci-après:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    If Connection Then
                Dim ReponseReq As HttpWebResponse = Nothing            
                Dim reader As StreamReader = Nothing
                Dim request As WebRequest = Nothing
                Dim proxyObject As WebProxy = Nothing
                Dim Message as string = nothing
                Try
                    'on obtient le proxy par defaut
                    Dim proxy As IWebProxy = WebRequest.GetSystemWebProxy()
                    Dim AdrProxy As Uri = proxy.GetProxy(New Uri("http://www.monsite.com"))
                    'on crée l'objet proxy pour y renseigner les "credentials" du proxy 
     	proxyObject = New WebProxy(AdrProxy, True)
                    proxyObject.UseDefaultCredentials = False
                    Dim basicCredential As New NetworkCredential("a", "a")
                    proxyObject.Credentials = basicCredential
                    'on initialise la requête 
                    request = WebRequest.Create("http://www.monsite.com")
                    ' On passe par le proxy
                    request.Proxy = proxyObject
                    'on définit un timeout
                    request.Timeout = 4500
    	'on demande une réponse (réponnse attendue 200)             
     	ReponseReq = CType(request.GetResponse, HttpWebResponse)
                    If ReponseReq.StatusCode = HttpStatusCode.OK Then
                        reader = New StreamReader(ReponseReq.GetResponseStream())
                        Message= reader.ReadToEnd()                   
                    End If
                Catch ex As Exception
                    'Interception et Message d'erreur
               Finally
                   'on libère les ressources
                    If reader IsNot Nothing Then reader.Close() : reader = Nothing                
                    If ReponseReq IsNot Nothing Then ReponseReq.Close() : ReponseReq = Nothing
                    If request IsNot Nothing Then request = Nothing
                    If proxyObject IsNot Nothing Then proxyObject = Nothing
                End Try    
    End If
    Par contre, avant de réaliser la lecture d'information sur mon site internet, je dois réaliser un test de connectivité à internet de l'ordinateur
    client ; j'utilise juste la fonction "Connect" de l'objet "Sockets" qui est très rapide et permet de valider la connexion réelle à internet.
    Cette fonction fonctionne très bien sans proxy mais avec proxy et authentification :
    - Fiddler ne capture pas du tout les "Sockets" ou alors je ne sais pas comment faire ?
    - J'ai cherché le code pour passer par un proxy avec authentification avec les "Sockets" : sans résultat ?

    Le code pour l'objet "Sockets" est très simple car je ne fais que vérifier la connectivité en utilisant des Url de grands sites internet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    Dim Sock As Sockets.Socket = Nothing
    Try
    Sock = New Sockets.Socket(Sockets.AddressFamily.InterNetwork, Sockets.SocketType.Stream, Sockets.ProtocolType.Tcp)
    Sock.SendTimeout = 4000
    Sock.ReceiveTimeout = 4000
    Sock.Connect(New IPEndPoint(Dns.GetHostEntry("www.google.com")).AddressList(0), 80))
     If Sock.Connected Then
          Sock.Shutdown(Sockets.SocketShutdown.Both)
          ' Je met ici un flag qui permet de valider la connexion effective de l'ordinateur à Internet 
          End If
     Catch ex As Net.Sockets.SocketException
     
     Finally
                  ' liberation des ressources     
     If Sock IsNot Nothing Then Sock.Close() : Sock = Nothing
    End Try

    Je peux contourner le problème en restant avec l'objet WebRequest mais je ne pourrais pas faire fonctionner le code qui permet
    de lire la date et l'heure sur les serveurs de temps mondiaux utilisant le protocole UDP port 123 avec l'objet "Sockets".

    Je commence à désespérer ...

    Pour résumer, :
    - Comment implémenter le passage par un proxy avec autenthification avec l'objet "Sockets"
    - Y a t-il un émulateur de proxy autre que Fiddler qui capturerait le trafic via "Sockets" ? Peut-être je n'ai pas tout compris à propos
    de Fiddler pour la capture des "Sockets"

    Merci par avance pour un début de solution ou un lien qui me permettrait d'avancer un peu dans cette galère ...

    Cordialement
    Pascal

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    avril 2007
    Messages
    12 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : avril 2007
    Messages : 12 833
    Points : 23 106
    Points
    23 106

    Par défaut

    j'ai trouvé ça qui doit contenir quelques infos interessantes
    https://stackoverflow.com/questions/...t-connectasync

    après je ne connais pas trop les proxy, mais certains sites disent qu'il faut un tunnel http à moins que le proxy soit un socket proxy (je ne vois pas trop ce que ca veut dire, et c'est moi qui ait traduit ca comme ca ^^)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    mai 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : mai 2012
    Messages : 28
    Points : 15
    Points
    15

    Par défaut

    Merci bien pour ta réponse et le lien.

    Il me semble que la connexion se fait principalement via Tcp mais en http sur le lien.
    Mais, je n'ai pas trouvé d'instructions pour se connecter (login,user) avec des sockets.
    Bon, j'ai fait un essai avec des sockets sur un proxy avec authentification vers une connexion NTP (serveur de temps) en UDP port 123 : le proxy laisse passer et
    ne voit rien (Squid) , en tout cas celui que j'ai testé.
    La connexion passe comme tu le dis par un tunnel et bipasse le proxy.

    Merci encore pour tes réponses aux deux post qui me permettent d'avancer.

Discussions similaires

  1. [System.Net.Sockets] Connexion via un proxy
    Par kendras dans le forum Développement
    Réponses: 15
    Dernier message: 17/02/2009, 14h52
  2. Socket irc via proxy
    Par Eltha dans le forum Langage
    Réponses: 2
    Dernier message: 07/07/2008, 23h08
  3. C++ Builder 3 GET & POST via Proxy avec Identification
    Par izak52g dans le forum Bibliothèques
    Réponses: 0
    Dernier message: 06/09/2007, 10h11
  4. [reseaux] SOCKET - Connection via proxy
    Par Julien_ dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 17/11/2006, 14h23
  5. Réponses: 3
    Dernier message: 18/04/2006, 22h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo