We have many legacy applications that can only send reports via printing. We have an application called RPM that can receive these print jobs and convert them to a more useful medium (e.g. PDF attachment in e-mail).
The legacy applications can only send the print jobs on port 9100. RPM can receive on multiple ports. RPM is running on a Windows XP box.
Attached is a diagram of what I'm thinking would work. The "router" would have multiple IP addresses, one for each legacy application and provide port address translation.
Ideally, I would like to have something I can install on the RPM machine itself that would allow me to perform the port address translation. If that's not possible, the "router" should be a virtual machine.
This will absolutely work fine, you could easily do this with the free version of the Vyatta router running under the free version of ESXi. Kudos to you for a clever solution. You could even run the "router" VM and the RPM on the same box.
At a previous job, we used a program called AUTAPF to do port-forwarding on a Windows 2003 server. In our case, we used it to test Web sites that lived on different ports in IIS, but that needed to be accessed as though they lived on the standard port 80. We probably didn't have the same utilization that you do with RPM, but it was small and simple, and worked well enough for our purposes. It's a little old, but I'd think that if it ran for us on 2003, it probably runs fine on XP.