[VB6] Winsock et Proxy

Winsock et Proxy [VB6] - Programmation

Marsh Posté le 23-03-2001 à 15:43:28    

comment gérer un proxy avec VB6/Winsock ??

Reply

Marsh Posté le 23-03-2001 à 15:43:28   

Reply

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

Reply

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 ?

Reply

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

Reply

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

Reply

Marsh Posté le 25-03-2001 à 15:36:33    

up

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed