Today I wanted to perform some benchmarking of an SQL application. All of the work up to this point was on a single machine that hosted both the database and the application. As a result, SQL network traffic was flowing through the Loopback interface. I wanted to get a better idea of the effects of real network latency by putting the bytes out on the wire. I was too lazy to install the software or the database on another machine, so I wanted to set up a port reflector on a second Windows 7 machine.
First, I tried using netcat. Well, strictly speaking it was the nmap version, ncat:
ncat -l -p 9999 --keep-open -c "ncat win7host 1433"
This listens on the local port 9999 and feeds every incoming request to a new ncat process that sends the incoming packets to the target host on the SQL Server port 1433. This worked, and introduced network latency. A lot of latency. The processes being created for each connection introduced so much delay that throughput was similar to Internet latency. That was a little too much latency for my purposes.
As an alternative, I used the Windows netsh command:
netsh interface portproxy add v4tov4 listenport=9999 listenaddress=192.168.0.158 connectport=1433 connectaddress=win7host
This performed without any significant overhead introduced by the proxy itself. The port redirection was removed using:
netsh interface portproxy delete v4tov4 listenport=9999 listenaddress=192.168.0.158