Hi Leute,
ich versuch mich grad an nem kleinen Mail-Proxy. Ich benutze dabei Microsofts Detours, um Connect() abzufangen und umzuleiten, falls auf Port 25 zugegriffen werden soll. Der Code sieht folgendermaßen aus:
<pre>
int WINAPI Detourconnect(SOCKET s, const struct sockaddr* name, int namelen)
{
int retval;
try
{
if (((sockaddr_in *)name)->sin_port==htons(25))
{
((sockaddr_in *)name)->sin_port=htons(8025);
UCHAR proxyIP[] = {127,0,0,1};
UCHAR serverIP[5];
UCHAR *zeiger;
zeiger = &(((sockaddr_in *)name)->sin_addr.S_un.S_un_b.s_b1);
for (int i=0; i<4; i++)
{
serverIP[i] = *zeiger;
*zeiger = proxyIP[i];
zeiger++;
} // for
serverIP[4] = 0;
retval = Real_connect(s, name, namelen);
MessageBox(NULL,(LPCTSTR) serverIP, "ProxyDLL", MB_OK);
for (int i = 0; i<200000; i++); // bisserl Zeit lassen
send(s, (const char *)serverIP[0], sizeof(serverIP), MSG_OOB|MSG_DONTROUTE/*?? welche Flags setzen??*/);
return retval;
} // if port = 8025
if (((sockaddr_in *)name)->sin_port==htons(8025))
{
((sockaddr_in *)name)->sin_port=htons(25);
return Real_connect(s, name, namelen);
} // if port == 8025
}
catch(int e){MessageBox(NULL, "Exception beim Umbiegen", "Proxy-DLL", MB_OK);}
return Real_connect(s, name, namelen);
}
</pre>
Dabei wird die IP und der Port in sockaddr_in geändert. Das Problem ist dann, daß mein Proxy-Programm die "richtige" IP des SMTP-Servers ja nicht kennt, also wird die per send() hinterhergeschickt.
Beim Proxy selbst kommt die aber nicht an :-((
Der Proxy (C#) startet nen neuen Thread mit nem TcpListener, holt sich dessen Stream und wartet dann darauf, daß über den Stream irgendwelche Daten ankommen, aber myStream.Read(...) blockiert einfach nur den Thread und nichts weiter geschieht, weil über den Stream anscheinend die per send() gesendeten Daten einfach nicht ankommen.
Weiß einer woran das liegen könnte?
Gruß,
Jörg
ich versuch mich grad an nem kleinen Mail-Proxy. Ich benutze dabei Microsofts Detours, um Connect() abzufangen und umzuleiten, falls auf Port 25 zugegriffen werden soll. Der Code sieht folgendermaßen aus:
<pre>
int WINAPI Detourconnect(SOCKET s, const struct sockaddr* name, int namelen)
{
int retval;
try
{
if (((sockaddr_in *)name)->sin_port==htons(25))
{
((sockaddr_in *)name)->sin_port=htons(8025);
UCHAR proxyIP[] = {127,0,0,1};
UCHAR serverIP[5];
UCHAR *zeiger;
zeiger = &(((sockaddr_in *)name)->sin_addr.S_un.S_un_b.s_b1);
for (int i=0; i<4; i++)
{
serverIP[i] = *zeiger;
*zeiger = proxyIP[i];
zeiger++;
} // for
serverIP[4] = 0;
retval = Real_connect(s, name, namelen);
MessageBox(NULL,(LPCTSTR) serverIP, "ProxyDLL", MB_OK);
for (int i = 0; i<200000; i++); // bisserl Zeit lassen
send(s, (const char *)serverIP[0], sizeof(serverIP), MSG_OOB|MSG_DONTROUTE/*?? welche Flags setzen??*/);
return retval;
} // if port = 8025
if (((sockaddr_in *)name)->sin_port==htons(8025))
{
((sockaddr_in *)name)->sin_port=htons(25);
return Real_connect(s, name, namelen);
} // if port == 8025
}
catch(int e){MessageBox(NULL, "Exception beim Umbiegen", "Proxy-DLL", MB_OK);}
return Real_connect(s, name, namelen);
}
</pre>
Dabei wird die IP und der Port in sockaddr_in geändert. Das Problem ist dann, daß mein Proxy-Programm die "richtige" IP des SMTP-Servers ja nicht kennt, also wird die per send() hinterhergeschickt.
Beim Proxy selbst kommt die aber nicht an :-((
Der Proxy (C#) startet nen neuen Thread mit nem TcpListener, holt sich dessen Stream und wartet dann darauf, daß über den Stream irgendwelche Daten ankommen, aber myStream.Read(...) blockiert einfach nur den Thread und nichts weiter geschieht, weil über den Stream anscheinend die per send() gesendeten Daten einfach nicht ankommen.
Weiß einer woran das liegen könnte?
Gruß,
Jörg
Comment