Um zu sehen, wie sich ein Client- und ein Serverprogramm über das Netzwerk unterhalten, kann ein protokollierender Proxy dazwischengeschaltet werden.
Unter http://delog.wordpress.com/2011/04/08/a-simple-tcp-proxy-in-node-js/ findet sich der Quellcode eines solchen Proxies, der für TCP-Verbindungen genutzt werden kann.
An den entsprechenden Stellen habe ich noch die Ausgabe der Daten ergänzt, sodass die Kommunikation auf der Kommandozeile verfolgt werden kann.
var util = require('util'); var net = require("net"); process.on("uncaughtException", function(e) { console.log(e); }); if (process.argv.length != 5) { console.log("Require the following command line arguments:" + " proxy_port service_host service_port"); console.log(" e.g. 9001 www.google.com 80"); process.exit(); } var proxyPort = process.argv[2]; var serviceHost = process.argv[3]; var servicePort = process.argv[4]; net.createServer(function (proxySocket) { var connected = false; var buffers = new Array(); var serviceSocket = new net.Socket(); serviceSocket.connect(parseInt(servicePort), serviceHost, function() { connected = true; if (buffers.length > 0) { for (i = 0; i < buffers.length; i++) { //console.log(buffers[i]); serviceSocket.write(buffers[i]); } } }); proxySocket.on("error", function (e) { serviceSocket.end(); }); serviceSocket.on("error", function (e) { console.log("Could not connect to service at host " + serviceHost + ', port ' + servicePort); proxySocket.end(); }); proxySocket.on("data", function (data) { if (connected) { console.log("Send: " + data.toString()); serviceSocket.write(data); } else { buffers[buffers.length] = data; } }); serviceSocket.on("data", function(data) { console.log("Recv: " + data.toString()); proxySocket.write(data); }); proxySocket.on("close", function(had_error) { serviceSocket.end(); }); serviceSocket.on("close", function(had_error) { proxySocket.end(); }); }).listen(proxyPort)
Um nun die Verbindung zu beobachten, startet man node mit den entsprechenden Parametern, hier am Beispiel einer SMTP-Verbindung auf Port 25:
node tcpproxy.js 25 myrealmailserver 25
Nun kann ein beliebiges E-Mailprogramm angewiesen werden, als Server den Rechner zu nutzen, auf dem der Proxy läuft, der Proxy schickt die Daten an den »echten« Mailserver weiter.