Im machen eine Anwendung zu manipulieren senden und recv, tun es mit send war sehr einfach, aber ich kann nicht herausfinden, wie die recv fälschen oder zu ersetzen.Ändern Sie Pufferdaten von recv
Was ich versuche zu tun, ist zum Beispiel, wenn das Programm "Hello"
empfängt, filtert es und macht das Programm glauben, dass es "Bye"
empfangen. Hier
ist der Teil des Codes, wo ich versuche, die recv zu filtern:
int WINAPI MyRecv(SOCKET s, char* buf, int len, int flags)
{
int i = 0;
int ret = pRecv(s, buf, len, flags);
while (i < ret && buf)
{
if (strncmp(buf, "Hello\0", 5) == 0)
{
strcpy(buf,"Bye\0");
}// End of if
int len = strlen(buf) +1;
buf += len;
i += len;
}//End of While
return ret;
}//End of Function
Eigentlich diese Art von Arbeiten, versucht aber beim nächsten Aufruf zu tun, nachdem es "Hello"
empfängt und das ist nicht die Absicht, ich möchte das tatsächliche Paket ersetzen, das "Hello"
enthält und es zu "Bye"
Sie müssen String-Terminatoren nicht explizit in konstante String-Literale setzen, sie werden dort automatisch von den Compilern eingefügt. –
Das ist eine extrem komplexe Sache, und der Code, den Sie gezeigt haben, ist nicht annähernd so ähnlich wie das, was Sie tun würden. Wirf den Code weg. Versuchen Sie stattdessen, einen rationalen Algorithmus dafür zu entwickeln, wie Sie dies tun würden. Schreiben Sie nicht, bis Sie einen Algorithmus haben. Zum Beispiel, was machst du, wenn 'len' 1 ist? –
Was Ihr Problem betrifft, hängt es sehr von Ihrem Betriebssystem ab. Es ist auch etwas, das nur sehr wenige Leute Ihnen empfehlen würden, anders als Sie es bereits tun. Kannst du uns bitte aufklären * warum * willst du es auf einer niedrigeren Ebene ändern? –