Registriert seit: 19. Jan 2003
732 Beiträge
Turbo Delphi für Win32
|
Re: ICS Port Mapping (WinXP Internetfreigabe)
22. Jan 2004, 20: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.
|
|
Zitat
|