Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I'd like to Port forward a few ranges on my Windows 7 Desktop. Ideally I'd like to use a desktop utility for this purpose but I couldn't find one except this:

However, it accepts port numbers and not port ranges. So if I have to forward 10000 ports, i'll have to add 10,000 entries.

Is there a better way? Command line utilities and scripts are as good if any are available.

share|improve this question
What is your router? – soandos Aug 1 '11 at 9:15
Strange question: Port forward them from where to where: A router to your Windows 7 computer? Then how would you use software? Do you have a computer that is handling your routing that would then route to the Windows 7 box? You need to add more information to really get a good answer. – KCotreau Aug 1 '11 at 11:48
My Windows 7 box has multiple NICs and some Virtual Machines running on it. I'd like to forward ports ON my Windows Desktop to certain VMs on another NIC. There is no router; except that the Windows box is a router itself. – sharjeel Aug 1 '11 at 14:06
up vote 3 down vote accepted

I didn't see any good alternatives, but I have an idea.

The program that you mentioned lets you load from a text file filled with port, destination, and local port information.

It would be pretty easy to write a program that outputs this information to a text file given some ranges. You can then load the text file into the port forwarding program that you mentioned.

Here is a program in Java that I just stuck together (sorry i'm a novice programmer)

package portforwardranges;

public class PortForwardRanges {

        try {
            PrintWriter pw = new PrintWriter(new File("output.txt"));
            for (int i = 50; i <= 100; i++){
            pw.print(" ");


        } catch (Exception ex) {

    public static void main(String[] args) {
        PortForwardRanges app = new PortForwardRanges();

And creates a file called output.txt with this in it:

50 50
51 51
52 52
53 53
54 54

It goes from 50 to 100 and the local and destination ports are the same. Modify it as you wish.

share|improve this answer
Seems like an OK'ish solution. However the original program spawns a new thread for each redirection. So having 20,000 redirections simply kills the system. I think I need a lower level service for this. – sharjeel Aug 1 '11 at 14:28
@sharjeel You could give rinetd a try. It claims to be able to do more than one port redirection per process. – James T Aug 1 '11 at 17:34
Threads aren't processes though. But correct, 20.000 threads would also kill the system – sinni800 Aug 1 '11 at 20:55

Extending on James T's solution, here is a batch script:


FOR /L %G IN (50, 1, 100) DO ECHO %G %G >> hi.txt


  • 50 is the starting number
  • 1 is the step for every loop
  • 100 is the end number

If you want to "move" the port range on the destination (ex: 50-100 on source, 100-150 on destination) use this batch script:

FOR /L %%G IN (50, 1, 100) DO ( 
set /a dest=%%G+50 
ECHO %%G !dest! >> hi.txt) 

The line set /a dest=%%G+50 sets your distance from the source ports.

If you want a longer, but easier to maintain script:

@echo off
set start=150
set step=5
set end=200
set destdistance=-50
set ip=
set outputfile=output.txt

FOR /L %%G IN (%start%, %step%, %end%) DO ( 
set /a dest=%%G%destdistance%
ECHO %%G %ip% !dest! >> %outputfile%) 
share|improve this answer
Beautifully simple little script – James T Aug 1 '11 at 17:43

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .