VBoxPortForwarding.py revision f52596ee352b88100d0a2abd044c8edd3c542bd7
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncCopyright (C) 2009-2012 Oracle Corporation
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncThis file is part of VirtualBox Open Source Edition (OSE), as
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsyncavailable from http://www.virtualbox.org. This file is free software;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncyou can redistribute it and/or modify it under the terms of the GNU
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncGeneral Public License (GPL) as published by the Free Software
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncFoundation, in version 2 as it comes in the "COPYING" file of the
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVirtualBox OSE distribution. VirtualBox OSE is distributed in the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsynchope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync#################################################################################
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync# This program is a port-forwarding configurator supposed to simplify
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync# port-forwarding for NAT users
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync# > python VBoxPortForwarding.py --vm winXP -a 1 -p TCP -l 8080 -g 80 -P www
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync# generates sequence of API calls, equivalent to:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# > VBoxManage setextradata "winXP"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# "VBoxInternal/Devices/pcnet/0/LUN#0/Config/www/Protocol" TCP
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# > VBoxManage setextradata "winXP"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# "VBoxInternal/Devices/pcnet/0/LUN#0/Config/www/GuestPort" 80
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# > VBoxManage setextradata "winXP"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# "VBoxInternal/Devices/pcnet/0/LUN#0/Config/www/HostPort" 8080
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync################################################################################
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if option.type == "string" and getattr(self.values, option.dest) != None:
61fa69e2bc9fc9e7490feed1c020273f3ddb238dvboxsync if option.type == "int" and getattr(self.values, option.dest) != -1:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncdef generate_profile_name(proto, host_port, guest_port):
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync return proto + '_' + str(host_port) + '_' + str(guest_port)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync usage = "usage: %prog --vm winXP -a 1 -p TCP -l 8080 -g 80 -P www"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync parser.add_option("-V", "--vm", action="store", dest="vmname", type="string",
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync help="Name or UID of VM to operate on", default=None)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync parser.add_option("-P", "--profile", dest="profile", type="string",
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync parser.add_option("-p", "--ip-proto", dest="proto", type="string",
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync parser.add_option("-l", "--host-port", dest="host_port", type="int",
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync parser.add_option("-g", "--guest-port", dest="guest_port", type="int",
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync parser.add_option("-a", "--adapter", dest="adapter", type="int",
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (not (parser.check_required("-V") or parser.check_required("-G"))):
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync parser.error("please define --vm or --guid option")
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync parser.error("please define -p or --ip-proto option")
0174432b2b1a760b89840ba696f7ba51def65dddvboxsync parser.error("please define -l or --host_port option")
0174432b2b1a760b89840ba696f7ba51def65dddvboxsync parser.error("please define -g or --guest_port option")
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync parser.error("please define -a or --adapter option")
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync print "can't find VM by name or UID:",options.vmname
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (adapter.adapterType == man.constants.NetworkAdapterType_Null):
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync print "none adapter type detected"
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync elif (adapter.adapterType == man.constants.NetworkAdapterType_Am79C970A):
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync elif (adapter.adapterType == man.constants.NetworkAdapterType_Am79C973):
7e960d3a0a8a3a84d7aba2cca45d72b1c31cc97bvboxsync elif (adapter.adapterType == man.constants.NetworkAdapterType_I82540EM):
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync elif (adapter.adapterType == man.constants.NetworkAdapterType_I82545EM):
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync elif (adapter.adapterType == man.constants.NetworkAdapterType_I82543GC):
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync print "adapter of '%s' type has been detected" % name
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync profile_name = generate_profile_name(options.proto.upper(),
fdea543f71872a3ec3909536a4fce37ab7aa3a8bvboxsync config = config + str(adapter.slot) +"/LUN#0/Config/" + profile_name