Einzelnen Beitrag anzeigen

Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: ICS Port Mapping (WinXP Internetfreigabe)

  Alt 22. Jan 2004, 19:27
Habs aufgegeben, bin an der Enumeration gescheitert

Naja, jetzt muss halt das JavaScript Beispiel herhalten... benötigte Zeit, um 10 000 Ports freizugeben: 8,3 Stunden

Code:
ICSSC_DEFAULT = 0;

ICSTT_NAME     = 0;
ICSTT_IPADDRESS = 1;

// from netcon.idl
//NCM_SHAREDACCESSHOST_LAN = 8;
//NCM_SHAREDACCESSHOST_RAS = 9;

NAT_PROTOCOL_TCP = 6
NAT_PROTOCOL_UDP = 17

// from netcon.idl
NCCF_SHARED    = 0x0100;  // Connection is shared
NCCF_FIREWALLED = 0x0400;  // Connection is firewalled

WScript.Echo ("Starting....");
Main();
WScript.Echo ("Ending....");

function Main()
{
    var objShare = new ActiveXObject("HNetCfg.HNetShare.1");
    if (objShare == null)
        WScript.Echo ("failed to create HNetCfg.HNetShare object!");
    else
        DoTheWork (objShare);
    return;
}

function DoTheWork (objShare)
{
    var objEveryConnColl = objShare.EnumEveryConnection;
    if (objEveryConnColl == null)
        WScript.Echo ("failed to get EveryConnectionCollection!");
    else {
        // enum INetConnections until props are correct
        var objEveryEnum = new Enumerator (objEveryConnColl);
        if (objEveryEnum == null)
            WScript.Echo ("failed to create Enumerator from EveryConnectionCollection");
        else {
            for (objEveryEnum.moveFirst(); !objEveryEnum.atEnd(); objEveryEnum.moveNext()) {

                var objNetConn = objEveryEnum.item();
                if (objNetConn == null)
                    WScript.Echo ("can't get any net connections!");
                else {
                    var objNetConnProps = objShare.NetConnectionProps (objNetConn);
                    if (objNetConnProps == null)
                        WScript.Echo ("can't get net connection props!");
                    else {
                        if ((objNetConnProps.Characteristics & NCCF_SHARED) ||
                            (objNetConnProps.Characteristics & NCCF_FIREWALLED))
                        {
                            // found one!
                            var objShareConf = objShare.INetSharingConfigurationForINetConnection (objNetConn);
                            if (objShareConf == null)
                                WScript.Echo ("can't make INetSharingConfiguration object!");
                            else {
                         var i;
                        fordings = 1;
                        for (i=1; 1<10001; i++)
                         {AddAsymmetricPortMapping (objShareConf, i, i)};
                            //    WScript.Echo ("added a port mapping named 'Ben's Port Mapping'.");
                            }
                        }
                    }
                }
            }
        }
    }

    // do other work here.
    // when you're done,
    // clean up port mapping
    WScript.Echo ("cleaning up");
    //if (objShareConf != null)
    //    DeletePortMapping (objShareConf, NAT_PROTOCOL_TCP, 555, 444);
}

function AddAsymmetricPortMapping (objShareConf, iPort, ePort)
{
    // in case it exists already....
    DeletePortMapping (objShareConf, NAT_PROTOCOL_TCP, iPort, ePort);

    var objPortMapping = objShareConf.AddPortMapping (
                                "Automated Port Mapping:" + iPort,
                                NAT_PROTOCOL_TCP,
                                iPort,
                                ePort,
                                0,
                                "paps", ICSTT_NAME);
// or                          "192.168.0.2", ICSTT_IPADDRESS);

    if (objPortMapping != null) {
        WScript.Echo ("just added another Port:" + iPort);
       
        objPortMapping.Enable();
        WScript.Echo ("just enabled another port mapping!");
    } else
        WScript.Echo ("failed to add asymmetric port mapping!");
}

function DeletePortMapping (objShareConf, typeProtocol, iExternalPort, iInternalPort)
{
    // enum, deleting match, if any
    var objPMColl = objShareConf.EnumPortMappings (ICSSC_DEFAULT);
    if (objPMColl == null)
        WScript.Echo ("can't get 'every' collection!");
    else {
        var varEnumerator = new Enumerator (objPMColl);
        if (varEnumerator != null) {
            for (varEnumerator.moveFirst(); !varEnumerator.atEnd(); varEnumerator.moveNext()) {
                var objPortMapping = varEnumerator.item();
                if (objPortMapping != null) {
                    var objPMProps = objPortMapping.Properties;
                    if (objPMProps != null) {
                        if ((objPMProps.IPProtocol  == typeProtocol ) &&
                            (objPMProps.ExternalPort == iExternalPort) &&
                            (objPMProps.InternalPort == iInternalPort))
                        {
                            objPortMapping.Delete();
                            // or objShareConf.RemovePortMapping (objPortMapping);

                            WScript.Echo ("just deleted " + typeProtocol + ", " + iExternalPort + ", " + iInternalPort + "!")
                        }
                    }
                }
            }
        }
    }
}
Dani H.
  Mit Zitat antworten Zitat