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:
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:
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