Winsock et Proxy [VB6] - Programmation
Marsh Posté le 23-03-2001 à 18:43:23
Je ne sais pas si ca peut t'aider, voici la fonction que j'utilise en C (VB ca fait trop longtemps que j'ai arrêté).
void SetProxy(CSession* session, CString* strproxy)
{
INTERNET_PROXY_INFO proxy;
proxy.dwAccessType = INTERNET_OPEN_TYPE_PROXY;
proxy.lpszProxy = *strproxy;
proxy.lpszProxyBypass = NULL;
int size = sizeof(INTERNET_PROXY_INFO);
BOOL test = session->SetOption(INTERNET_OPTION_PROXY, &proxy, size);
}
session est un pointeur vers la session internet en cours (winsock)
strproxy est un pointeur sur la chaine de caractères représentant le proxy ("195.234.54:80" par exemple).
Essaie de regarder dans la doc (MSDN) la fonction SetOption d'internet, c'est avec elle que tu peux faire cela.
@+
Flying
Marsh Posté le 23-03-2001 à 19:33:33
En fait, je passe par le controle Winsock de VB pas par les sockets de VC++ (même si je compte y passer bientot...). pas d'idées ?
Marsh Posté le 23-03-2001 à 19:34:52
tiens voilà un source ke g trouvé sur le net
Exemple de proxy en Visual-Basic
Proxy en Visual-Basic:
Créez un nouveau projet EXE standard. Faites CTRL + T et ajoutez "Microsoft Winsock Control".
Créez 3 objets winsock. Nommez les "winsock", "winsock1"et "winsock2".
Créez une listbox et nommez la "list".
Mettez ensuite la source qui suis dans la source du projet.
COPIER/COLLER ------------------------------------------------------------------------------------------------------------------------
Dim etape As Integer
Dim vip, ip, port As String
Private Sub Form_Load()
' Nous cachons la boite form du programme
Form1.Visible = False
' Listen sur le port 1080
Winsock.Close
Winsock.LocalPort = 1080
Winsock.Listen
' Mise à 0 de la variable etape
etape = 0
End Sub
Private Sub Winsock_Close()
' Si la connection se ferme nous re-Listenons sur le port 1080 et nous remettons etape à 0 et Connect = 0
Winsock.Close
Winsock.LocalPort = 1080
Winsock.Listen
etape = 0
Connect = 0
End Sub
Private Sub Winsock_ConnectionRequest(ByVal requestID As Long)
' Si quelqu'un essaye de se connecter sur le port en listen(1080)
' nous l'acceptons et mettons les variables etape et Connect à 0
Winsock.Close
Winsock.Accept requestID
Connect = 0
etape = 0
End Sub
Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)
' Nous lisons les données texte envoyées
Dim dat As String
Winsock.GetData dat
' Etape 0 -> définition du pass : si le mot de pass est saisi et est correcte alors nous passons à l'étape 1
If etape = 0 And Left$(dat, Len(dat) - 2) = "Proxy by KOP for HackerStorm" Then etape = 1: Exit Sub
' Etape 1 -> définition du server vers lequel les données doivent être re-routé(etape=2)
If etape = 1 Then ip = dat: etape = 2: Exit Sub
' Etape 2 -> définition du port du server vers lequel les données doivent être re-routé(etape=3)
If etape = 2 Then
port = dat
etape = 3
' Nous listenons winsock2 et envoyons au server un de nos ports ouvert sur lequel il doit se connecter
' pour utiliser le proxy
Winsock2.Close
Winsock2.Listen
MsgBox "Vous devez vous connecter sur " + Str(Winsock2.LocalPort)
Winsock.SendData "Connectez vous sur le port " + Str(Winsock2.LocalPort) + Chr(13) + Chr(10)
' Nous mettons son IP dans la variable VIP pour la vérification d'authenticité de reconnection sur le bon port
vip = Winsock.RemoteHostIP
' Nous re-Listenons sur le port 1080
Winsock.Close
Winsock.LocalPort = 1080
Winsock.Listen
Exit Sub
End If
End Sub
Private Sub Winsock_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long,
ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long,
CancelDisplay As Boolean)
' Si une erreur intervient dans winsock, nous fermons la connection et on re-listen sur le port 1080(etape=0;Connect=0)
Winsock.Close
Winsock.LocalPort = 1080
Winsock.Listen
etape = 0
Connect = 0
End Sub
Private Sub Winsock1_Connect()
'Si le server que vous avez configuré se connect, les données envoyé par votre client pendant
'le temps dez la connection sont renvoyé au server dans le même ordre
For i = 0 To List.ListCount - 1
Winsock1.SendData List.List(0)
List.RemoveItem 0
Next i
' on met 1 dans la variable connect
Connect = 1
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
' Si le server envoye des données, nous les lisons et les renvoyons vers le client
Dim dat As String
Winsock1.GetData dat
Winsock2.SendData dat
End Sub
Private Sub Winsock2_DataArrival(ByVal bytesTotal As Long)
' Si le client envoye des données, nous les lisons et si le server est connecté, nous les renvoyons vers le server
'sinon nous les ajoutons à la liste qui sera envoyée plus tard
Dim dat As String
Winsock2.GetData dat
If Connect = 1 Then Winsock1.SendData dat
If Connect = 0 Then List.AddItem dat
End Sub
Private Sub Winsock2_ConnectionRequest(ByVal requestID As Long)
' Nous effaçons la liste de données envoyées par le client
For i = 0 To List.ListCount - 1
List.RemoveItem 0
Next i
' Si quelqu'un essaye de se connecter sur le port en listen
' nous l'acceptons si son IP est identique a celle enregistré lors de l'enregistrement,
' mettons la variable Connect à 0 et nous nous connectons au server défini
Winsock2.Close
Winsock2.Accept requestID
If Winsock2.RemoteHostIP <> vip Then Winsock2.Close: Exit Sub
Winsock1.Close
Connect = 0
Winsock1.Connect ip, port
End Sub
Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long,
ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long,
CancelDisplay As Boolean)
' Si une erreur intervient dans winsock1, nous fermons les connections server et client et nous mettons etape à 0
Winsock1.Close
Winsock2.Close
etape = 0
End Sub
Private Sub Winsock2_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long,
ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long,
CancelDisplay As Boolean)
' Si une erreur intervient dans winsock2, nous fermons les connections server et client et nous mettons etape à 0
Winsock1.Close
Winsock2.Close
etape = 0
End Sub
----------------------------------------------------------------------------------------------------------------------------------------------
Voilà pour le proxy.
Cette source vous permet de connecter un client mais vous pouvez modifier la source
en y mettant des index pour que le proxy prenne autant de client que vous le souhaitez.
Lancez maintenant un client simple qui envoye du texte brut ou tout simplement votre client IRC.
Connectez-vous au proxy sur le port 1080. Envoyez le pass qui est "Proxy by KOP for HackerStorm".
Une fois ceci envoyé, envoyé l'IP ou le nom du server auquel le proxy doit se connecter. ex : "ircnet.grolier.net"
Et envoyez pour finir le N° du port auquel le proxy doit se connecter. ex : "6667"
Le server devrait vous envoyer "Connectez vous sur le port " + le port auquel vous devez vous connecter
pour utiliser le proxy. Dans l'exemple d'IRC, pour vous connectez, lancez votre client IRC et tapez
/server [ip du proxy] [port d'utilisation du proxy]. Ceci vous connectera au proxy et le proxy se connectera
automatiquement à "ircnet.grolier.net" sur le port 6667. Les données envoyé au proxy seront retransmises
et le proxy effectue donc bien son boulot.
By KoP
Marsh Posté le 23-03-2001 à 19:50:35
C'est pas ce que je cherche.
J'ai un PC qui (au boulot) est derrière un proxy (vu le nombre de poste connectés, c'est normal...) et je voudrais savoir comment envoyer un paquet de données à une PC serveur d'une IP donnée situé de l'autre coté du proxy (sur le net quoi).
Ce que tu as fait est une sorte de serveur et encore, je trouve qsue tu t'es bien compliqué la vie (cf mon serveur Neti en beta test..)
Merci qd meme
Marsh Posté le 23-03-2001 à 15:43:28
comment gérer un proxy avec VB6/Winsock ??