|
Dernière réponse | |
---|---|
Sujet : [VB6] Winsock et Proxy | |
Kyle_Katarn | up |
Aperçu |
---|
Vue Rapide de la discussion |
---|
Kyle_Katarn | up |
Kyle_Katarn | 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 |
HelloWorld | 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 |
Kyle_Katarn | 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 ? |
Flying | 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 |
Kyle_Katarn | comment gérer un proxy avec VB6/Winsock ?? |