Goedendag
Ik ben laatst bezig geweest om voor een programma een proxifier te maken, dit gaat eigenlijk heel simpel te werk (heb het ook al voor een ander programma gemaakt).. Je VB6 programma luistert lokaal op de poort waar de remoteserver eigenlijk op draait, je client connect naar het programma, wanneer er in je programma een connection request binnenkomt, connect je naar de remoteserver. (allereerst dus wel het remote ip in je hosts file aanpassen naar localhost). Zo kan je dus heel effectief data uit packets halen en desnoods aanpassen.
Ok, nu heb probleem, op het moment gaat het zo:
Client connect naar proxy,
Proxy connect naar remote server.
Client zend data naar proxy,
proxy zend data naar remote server.
Remote server zend data naar proxy,
proxy zend data naar client.
Dit gaat middels onderstaande code: Als de client socket een request krijgt, wordt hij geaccepteerd te connecten en wordt er direct naar de remote server een connectie gemaakt.
Overigens heet het winsock control dat remote connect wSServer.
Nu moeten we natuurlijk data die we binnenkrijgen van de client, doorsturen via het wSServer socket control:
Wat nu uiteindelijk het probleem is, omdat de proxy local is, wordt er door de client enorm snel een verbinding gemaakt. Dit zorgt ervoor dat die meteen data begint te versturen, zonder dat mijn remote server control geconnect is! Overigens is connecten naar de remote server bij form load in mijn applicatie geen optie.
Nu heb ik dit geprobeerd op te lossen om mijn winsock accept pas uit te voeren als de remote server geconnect is(Private Sub wSServer_Connect()), maar dan krijg ik errors 'The descriptor is not a socket' oid. Oftewel, ik kan Accept niet uitvoeren buiten wSClient_SocketRequest, ook niet als ik requestID public define.
Enig idee hoe ik dit oplos? Alvast bedankt.
Ok, nu heb probleem, op het moment gaat het zo:
Client connect naar proxy,
Proxy connect naar remote server.
Client zend data naar proxy,
proxy zend data naar remote server.
Remote server zend data naar proxy,
proxy zend data naar client.
Dit gaat middels onderstaande code: Als de client socket een request krijgt, wordt hij geaccepteerd te connecten en wordt er direct naar de remote server een connectie gemaakt.
code:
1
2
3
4
5
6
7
8
| Private Sub wSClient_ConnectionRequest(ByVal requestID As Long)
wSServer.Connect remHost, remPort
If wSClient.State <> sckClosed Then wSClient.Close
wSClient.Accept requestID
End Sub |
Overigens heet het winsock control dat remote connect wSServer.
Nu moeten we natuurlijk data die we binnenkrijgen van de client, doorsturen via het wSServer socket control:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| Private Sub wSClient_DataArrival(ByVal bytesTotal As Long)
wSClient.GetData strData
strData = cv_HexFromString(strData)
ProcessClientData (strData)
End Sub
Private Sub ProcessClientData(data As String)
wSServer.SendData cv_StringFromHex(data)
End Sub |
Wat nu uiteindelijk het probleem is, omdat de proxy local is, wordt er door de client enorm snel een verbinding gemaakt. Dit zorgt ervoor dat die meteen data begint te versturen, zonder dat mijn remote server control geconnect is! Overigens is connecten naar de remote server bij form load in mijn applicatie geen optie.
Nu heb ik dit geprobeerd op te lossen om mijn winsock accept pas uit te voeren als de remote server geconnect is(Private Sub wSServer_Connect()), maar dan krijg ik errors 'The descriptor is not a socket' oid. Oftewel, ik kan Accept niet uitvoeren buiten wSClient_SocketRequest, ook niet als ik requestID public define.
Enig idee hoe ik dit oplos? Alvast bedankt.
