//Coded By Sha0 BadChecksum
//Activa y configura el firewall de WinXP en todas las interfaces
//(Tested on SP1)

var PROTO_TCP = 6;
var PROTO_UDP = 17;
var LOCALHOST = "0";              // 0 -> cualquier host
var NCCF_FIREWALLED = 0x0400;
var NCCF_SHARED = 0X0100;
var ICSTT_NAME = 0;
var ICSTT_IPADDRESS = 1;
var ICSSC_DEFAULT = 0;



main ();
WScript.echo ("Proceso Finalizado");


function main () {
	var NetShare = new ActiveXObject("HNetCfg.HNetShare.1"); 
	if (NetShare == null)
		return error ();

	activarFirewall (NetShare);

					//desactivarFirewall (NetShare);
					//abrirPuerto (NetShare,"prueba",PROTO_TCP,80,LOCALHOST);	
					//cerrarPuerto (NetShare,PROTO_TCP,80);

	cerrarTodo (NetShare);
	abrirPagent (NetShare); 	//Agente del panda antivirus.

	NetShare = null;
}

function abrirPagent (NetShare) {
	abrirPuerto (NetShare, "Pagent1", PROTO_TCP, 19226,LOCALHOST);
	abrirPuerto (NetShare, "Pagent2", PROTO_UDP, 137,LOCALHOST);
}

function cerrarTodo (NetShare) {
	var enumConn = NetShare.EnumEveryConnection;
	var interfaces = new Enumerator (enumConn);
	interfaces.moveFirst();
	if (interfaces == null)
		return error();

	for (interfaces.moveFirst(); !interfaces.atEnd(); interfaces.moveNext()) {
		var ifaceid = interfaces.item();

		if (ifaceid != null) {
			if (NetShare.NetConnectionProps(ifaceid).Characteristics & NCCF_FIREWALLED) {
				var conf = NetShare.INetSharingConfigurationForINetConnection(ifaceid)	
				var puertos = conf.EnumPortMappings(ICSSC_DEFAULT);
				var epuertos = new Enumerator (puertos);
				if (epuertos == null)
					return error();

				for (epuertos.moveFirst(); !epuertos.atEnd(); epuertos.moveNext()) {
					var port = epuertos.item();
					var portProps = port.Properties;
					if (portProps.Enabled) 
						port.Delete();
				}
			}
		}
	}
}


function error () {
	return WScript.echo ("HA FALLADO EL SCRIPT");
}


function cerrarPuerto (NetShare,protocolo,puerto)   {
	var enumConn = NetShare.EnumEveryConnection;
	var interfaces = new Enumerator (enumConn);
	interfaces.moveFirst();
	if (interfaces == null)
		return error();

	for (interfaces.moveFirst(); !interfaces.atEnd(); interfaces.moveNext()) {
		var ifaceid = interfaces.item();

		if (ifaceid != null) {
			if (NetShare.NetConnectionProps(ifaceid).Characteristics & NCCF_FIREWALLED) {
				var conf = NetShare.INetSharingConfigurationForINetConnection(ifaceid)	
				var puertos = conf.EnumPortMappings(ICSSC_DEFAULT);
				var epuertos = new Enumerator (puertos);
				if (epuertos == null)
					return error();

				for (epuertos.moveFirst(); !epuertos.atEnd(); epuertos.moveNext()) {
					var port = epuertos.item();
					var portProps = port.Properties;
					WScript.echo ("open="+portProps.Enabled);
					if (portProps.IPProtocol == protocolo && portProps.ExternalPort == puerto &&
					    portProps.InternalPort == puerto) {

						port.Delete();
					}
				}
			}
		}
	}
}

function abrirPuerto (NetShare,descripcion,protocolo,puerto,host) {
	var enumConn = NetShare.EnumEveryConnection;
	var interfaces = new Enumerator (enumConn);
	interfaces.moveFirst();
	if (interfaces == null)
		error();
	
	for (interfaces.moveFirst(); !interfaces.atEnd(); interfaces.moveNext()) {
		var ifaceid = interfaces.item();

		if (ifaceid != null) {
			if (NetShare.NetConnectionProps(ifaceid).Characteristics & NCCF_FIREWALLED) {
				var conf = NetShare.INetSharingConfigurationForINetConnection(ifaceid);
				var port = conf.AddPortMapping (
									descripcion,
									protocolo,
									puerto,
									puerto,
									0,
									host,
									ICSTT_NAME
								);
				if (port != null) 
					port.Enable();
				else
					return error();

			} else
				return error();
		}	
	}
}

function activarFirewall (NetShare) {
	var enumConn = NetShare.EnumEveryConnection;
	var interfaces = new Enumerator (enumConn);
	interfaces.moveFirst();
	if (interfaces == null)
		error();
	
	for (interfaces.moveFirst(); !interfaces.atEnd(); interfaces.moveNext()) {
		var ifaceid = interfaces.item();
		if (ifaceid != null)
			NetShare.INetSharingConfigurationForINetConnection(ifaceid).EnableInternetFirewall();
	}
}

function desactivarFirewall (NetShare) {
	var enumConn = NetShare.EnumEveryConnection;
	var interfaces = new Enumerator (enumConn);
	interfaces.moveFirst();
	if (interfaces == null)
		error();
	
	for (interfaces.moveFirst(); !interfaces.atEnd(); interfaces.moveNext()) {
		var ifaceid = interfaces.item();
		if (ifaceid != null)
			NetShare.INetSharingConfigurationForINetConnection(ifaceid).DisableInternetFirewall();
	}
}
