// JavaScript Document
var etat;
var openPort=0; 
var closePort=0;
var debut = new Date();

// Supprime tout ce qui est dans ports ouvert et fermés
function netoyage(element) {
	if(document.all) { 	// IE
		while(element.nextSibling != null && element.nextSibling.getAttribute("className") == "comment") {
			element.parentNode.removeChild(element.nextSibling); 
		}
	}
	else { 				// Autres
		while(element.nextSibling.nodeType != Node.TEXT_NODE) {
			element.parentNode.removeChild(element.nextSibling); 
		}	
	}
	
}

// Gere toute la mise en page du bas
function remplissage() {
	if(document.getElementById('form1').radio[0].checked == false && document.getElementById('form1').radio[1].checked == false && document.getElementById('form1').radio[2].checked == false) {
		alert('Choisir un type d\'analyse');
		return false;
	}
	if(document.getElementById('form1').radio[0].checked == true) { 		// Choix du type = Normal
		var ports = new Array(21, 23, 25, 31, 41, 59, 79, 80, 99, 110, 113, 119, 121, 421, 443, 1720, 456, 531, 555, 666, 911, 999, 1002, 1010, 1011, 1012, 1013, 1014, 1015 , 1024, 1042, 1045, 1090, 1170, 1234, 1234, 1243, 1245, 1269, 1349, 1492, 1509, 1600, 1807, 1981, 1999, 1999, 2000, 2001, 2001, 2002, 2003, 2004, 2005, 2023, 2115, 2140, 2155, 2283, 2565, 2583, 2600, 2801, 2989, 3024, 3128, 3129, 3150, 3459, 3700, 3791, 3801, 4092, 4321, 4567, 4590, 5000, 5001, 5011, 5031, 5321, 5400, 5401, 5402, 5550, 5512, 5555, 5556, 5557, 5569, 5742, 6400, 6669, 6670, 6771, 6776, 6912, 6939, 6969, 6970, 7000, 7300, 7301, 7306, 7307, 7308, 7789, 8080, 9400, 9872, 9873, 9874, 9875, 9876, 9878, 9989, 10067, 10101, 10167, 10520, 10607, 11000, 11223, 12076, 12223, 12345, 12346, 12361, 12362, 12631, 13000, 16969, 17300, 20000, 20001, 20034, 20203, 21544, 22222, 23456, 23476, 23477, 26274, 27374, 29891, 30029, 30100, 30101, 30102, 30303, 30999, 31336, 31337, 31337, 31338, 31338, 31339, 31666, 31785, 31787, 31788, 31789, 31791, 31792, 33333, 33911, 34324, 40412, 40421, 40422, 40423, 40426, 47262, 50505, 50766, 53001, 54320, 54321, 54321, 60000, 61466, 65000);
	}
	else if(document.getElementById('form1').radio[2].checked == true) { 	// Choxi du type = Complet
		var ports = new Array(0, 1, 2, 5, 11, 16, 17, 18, 19, 20, 21, 22, 23, 25, 27, 28, 30, 31, 37, 39, 41, 44, 51, 52, 53, 54, 66, 69, 69, 70, 79, 80, 81, 101, 102, 103, 105, 107, 109, 110, 111, 113, 119, 120, 121, 123, 135, 137, 138, 139, 143, 145, 146, 166, 170, 171, 200, 201, 202, 211, 212, 221, 222, 230, 231, 232, 285, 299, 334, 335, 370, 389, 400, 401, 402, 411, 420, 443, 445, 455, 511, 513, 514, 515, 520, 555, 589, 600, 623, 635, 650, 661, 666, 667, 668, 669, 680, 692, 700, 777, 808, 831, 901, 902, 903, 911, 956, 991, 992, 999, 1000, 1001, 1005, 1008, 1010, 1011, 1012, 1015, 1016, 1020, 1024, 1025, 1026, 1027, 1028, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1039, 1041, 1042, 1042, 1043, 1044, 1044, 1047, 1049, 1052, 1053, 1054, 1080, 1081, 1082, 1083, 1092, 1095, 1097, 1098, 1099, 1104, 1111, 1115, 1116, 1122, 1133, 1150, 1151, 1160, 1166, 1167, 1170, 1180, 1183, 1183, 1200, 1201, 1207, 1208, 1212, 1215, 1218, 1219, 1221, 1222, 1234, 1243, 1245, 1255, 1256, 1272, 1313, 1314, 1349, 1369, 1386, 1415, 1433, 1441, 1492, 1524, 1560, 1561, 1600, 1601, 1602, 1703, 1711, 1720, 1772, 1777, 1826, 1833, 1834, 1835, 1836, 1837, 1905, 1911, 1966, 1967, 1978, 1981, 1983, 1984, 1985, 1985, 1986, 1991, 1999, 2000, 2000, 2001, 2001, 2002, 2002, 2004, 2005, 2023, 2060, 2080, 2101, 2115, 2130, 2140, 2140, 2149, 2150, 2222, 2222, 2281, 2283, 2300, 2311, 2330, 2331, 2332, 2333, 2334, 2335, 2336, 2337, 2338, 2339, 2339, 2343, 2345, 2407, 2418, 2555, 2565, 2583, 2589, 2600, 2702, 2702, 2772, 2773, 2774, 2800, 2929, 2983, 2989, 3000, 3006, 3024, 3031, 3119, 3128, 3129, 3131, 3150, 3215, 3215, 3292, 3295, 3333, 3410, 3417, 3418, 3456, 3459, 3505, 3700, 3721, 3723, 3777, 3791, 3800, 3801, 3945, 3996, 3997, 3999, 4000, 4092, 4128, 4128, 4156, 4201, 4210, 4211, 4225, 4242, 4315, 4321, 4414, 4488, 4567, 4653, 4666, 4700, 4836, 5000, 5001, 5002, 5005, 5011, 5025, 5031, 5032, 5050, 5135, 5150, 5151, 5152, 5221, 5250, 5321, 5333, 5350, 5377, 5400, 5401, 5402, 5418, 5419, 5430, 5450, 5503, 5534, 5550, 5555, 5556, 5557, 5569, 5650, 5669, 5679, 5695, 5696, 5697, 5742, 5802, 5873, 5880, 5882, 5888, 5889, 5933, 6000, 6006, 6267, 6400, 6521, 6556, 6661, 6666, 6667, 6670, 6697, 6711, 6712, 6713, 6714, 6715, 6718, 6723, 6766, 6767, 6771, 6776, 6838, 6891, 6912, 6969, 6970, 7000, 7001, 7007, 7020, 7030, 7119, 7215, 7274, 7290, 7291, 7300, 7301, 7306, 7307, 7308, 7312, 7410, 7424, 7597, 7626, 7648, 7673, 7676, 7677, 7718, 7722, 7777, 7788, 7789, 7800, 7826, 7850, 7879, 7979, 7983, 8011, 8012, 8080, 8090, 8097, 8110, 8111, 8127, 8130, 8131, 8301, 8302, 8311, 8322, 8329, 8488, 8489, 8489, 8685, 8732, 8734, 8787, 8811, 8812, 8821, 8848, 8864, 8888, 9000, 9090, 9148, 9301, 9329, 9400, 9401, 9536, 9561, 9563, 9870, 9872, 9873, 9874, 9875, 9876, 9877, 9878, 9879, 9919, 9999, 10000, 10001, 10002, 10003, 10008, 10012, 10013, 10067, 10084, 10085, 10086, 10100, 10100, 10167, 10167, 10498, 10520, 10528, 10607, 10666, 10887, 10889, 11000, 11011, 11050, 11051, 11111, 11223, 11225, 11660, 11718, 11831, 11977, 11978, 11980, 12000, 12310, 12321, 12345, 12345, 12346, 12348, 12349, 12361, 12362, 12363, 12623, 12624, 12631, 12684, 12754, 12904, 13000, 13013, 13014, 13028, 13079, 13370, 13371, 13500, 13753, 14194, 14285, 14286, 14287, 14500, 14501, 14502, 14503, 15000, 15092, 15104, 15206, 15207, 15210, 15382, 15432, 15485, 15486, 15500, 15512, 15551, 15695, 15845, 15852, 16057, 16484, 16514, 16515, 16515, 16523, 16660, 16712, 16761, 16959, 17166, 17499, 17500, 17569, 17593, 17777, 18753, 19191, 19216, 20000, 20001, 20002, 20005, 20023, 20034, 20331, 20432, 20433, 21212, 21544, 21554, 21579, 21957, 22115, 22222, 22223, 22456, 22554, 22783, 22784, 22785, 23000, 23001, 23005, 23006, 23023, 23032, 23321, 23432, 23456, 23476, 23476, 23477, 23777, 24000, 24289, 25002, 25123, 25555, 25685, 25686, 25799, 25885, 25982, 26274, 26681, 27160, 27184, 27184, 27373, 27374, 27379, 27444, 27573, 27665, 28431, 28678, 29104, 29292, 29559, 29589, 29589, 29891, 30000, 30001, 30005, 30100, 30101, 30102, 30103, 30133, 30303, 30331, 30464, 30700, 30947, 31320, 31335, 31336, 31337, 31338, 31339, 31340, 31382, 31415, 31416, 31557, 31745, 31785, 31787, 31788, 31789, 31790, 31791, 31791, 31792, 31887, 32000, 32001, 32100, 32418, 32791, 33270, 33333, 33545, 33567, 33568, 33577, 33777, 33911, 34312, 34313, 34324, 34343, 34444, 34555, 35000, 35555, 35600, 36794, 37237, 37651, 38741, 38742, 40071, 40308, 40412, 40421, 40422, 40423, 40425, 40426, 41337, 41666, 43720, 44014, 44444, 44575, 44767, 44767, 45092, 45454, 45632, 45673, 46666, 47017, 47262, 47698, 47785, 47891, 48004, 48006, 48512, 49000, 49683, 49698, 50000, 50021, 50130, 50505, 50551, 50552, 50766, 50829, 51234, 51966, 52365, 52901, 53001, 54283, 54320, 54321, 55555, 55665, 55666, 57163, 57341, 57785, 58134, 58339, 59211, 60000, 60001, 60008, 60068, 60411, 60551, 60552, 60666, 61115, 61337, 61440, 61603, 61746, 61747, 61748, 61979, 62011, 63485, 64101, 65000, 65289, 65421, 65422, 65432, 65432, 65530, 65535);
	}
	else if(document.getElementById('form1').radio[1].checked == true) { 	// Choix du type = Perso
		var chars = new RegExp("^[0-9,]*$"); 
		if(!(chars.test(document.getElementById('form1').champs.value))) {
			document.getElementById('bouton').disabled = false;
			alert('Votre champs ne doit que comporter des chiffres et des virgules');
			return false;
		}
		var ports = document.getElementById('form1').champs.value.split(","); 
	}
	etat = 0;
	openPort=0;		//Init nombre de ports ouverts
	closePort=0;	// Init nombre de ports fermés
	netoyage(document.getElementById('ferme'));
	netoyage(document.getElementById('ouvert'));
	if(!document.all) { 	// Pas IE
		document.getElementById('divmail').setAttribute("style","display:none;");
		document.getElementById('ouvert').setAttribute("style","visibility:visible;");
		document.getElementById('ferme').setAttribute("style","visibility:visible;");
		document.getElementById('resultats').setAttribute("visibility","hidden");
	}
	else {					// IE
		document.getElementById('divmail').style.cssText = "display:none;" ;
		document.getElementById('ouvert').style.cssText = "visibility:visible;" ;
		document.getElementById('ferme').style.cssText = "visibility:visible;" ;
		document.getElementById('resultats').style.cssText = "visibility:hidden;";
	}
	document.getElementById('bouton').value="Analyse en cours...";
	document.getElementById('bouton').disabled = true;
	var port;	
	debut = new Date();
	for(port in ports)
	{
		analyse(ports[port], ports.length);
	}
}

// Création AJAX avec gestion des reponses données
function analyse(numPort, total)
{ 
    var xhr; 
    try {  xhr = new ActiveXObject('Msxml2.XMLHTTP');   }
    catch (e) 
    {
        try {   xhr = new ActiveXObject('Microsoft.XMLHTTP');    }
        catch (e2) 
        {
          try {  xhr = new XMLHttpRequest();     }
          catch (e3) {  xhr = false;   }
        }
     }
    xhr.onreadystatechange  = function()
    { 
		 if(xhr.readyState  == 4)
         {
			  etat++;
			  if(xhr.status  == 200)  {	 
				 pourcent = etat/total*100;
				 if(pourcent>100) pourcent = 100;
				 document.getElementById('progress').setAttribute("style","width:"+pourcent+"%; background:url(progress.jpg); height:20px; background-color:#008FA9; background-repeat:no-repeat; font-weight:bold; color:#FFFFFF");
				 document.getElementById('progress').style.cssText = "width:"+pourcent+"%; background:url(progress.jpg); height:20px; background-color:#008FA9; background-repeat:no-repeat; font-weight:bold; color:#FFFFFF";
				 document.getElementById('progress').innerHTML=Math.ceil(pourcent) + "%";
				 if(xhr.responseText != '0') {
			 		 var ouv = new RegExp("^ouvert.*$");
					 var fer = new RegExp("^ferme.*$"); 
					 if(xhr.responseText.match(ouv)) {
						balise = document.getElementById('ouvert');
						openPort++;
					 }
					 else if (xhr.responseText.match(fer)) {
						balise = document.getElementById('ferme');
						closePort++;
					 }
				 	str = xhr.responseText.split(":::");
					chaine = "<strong>Port " + numPort + ":</strong> " + str[1];
					var element = document.createElement('div');
					element.setAttribute("class","comment");
					element.setAttribute("className","comment"); // Idem mais pour IE :(
					element.appendChild(document.createTextNode(''));
					element.innerHTML = chaine;
					balise.parentNode.insertBefore(element, balise.nextSibling);
				  }
				  if(total == etat) { 				// Le test est terminé, on affiche les résultats
				  	result = document.getElementById('resultats');
					result.innerHTML = "<br /><h4 align=\"center\">Vous avez <strong>" + openPort + "</strong> port(s) ouvert(s) et <strong>" + closePort + "</strong> port(s) ferm&eacute;(s).</h4>";
					if(openPort != 0) result.innerHTML += "<br />&nbsp;&nbsp;&nbsp;&nbsp;Le fait d'avoir un port ouvert peut &ecirc;tre l'acte d'un cheval de Troie qui communique avec l'ext&eacute;rieur. Assurez vous bien que ce port a &eacute;t&eacute; ouvert par vos soins, si ce n'est pas le cas vous devriez fermer et/ou masquer ce port.";
					if(closePort != 0) result.innerHTML += "<br />&nbsp;&nbsp;&nbsp;&nbsp;Un port ferm&eacute; peut para&icirc;tre bien dans un sens car les connections demand&eacute;es dessus seront refus&eacute;es. Maintenant un port ferm&eacute; indique que v&ocirc;tre PC est pr&eacute;sent car il transmet une r&eacute;ponse &agrave; celui qui va tenter de ce connecter. De ce fait un pirate pourra alors prendre v&ocirc;tre PC pour cible plut&ocirc;t que de passer son chemin.";
					if(openPort == 0 && closePort == 0) 
							result.innerHTML += "<br />&nbsp;&nbsp;&nbsp;&nbsp;Ce resultat est excellent, maintenant ";
					else 	
							result.innerHTML += "<br />&nbsp;&nbsp;&nbsp;&nbsp;<strong>Attention, </strong>";
					result.innerHTML += "la v&eacute;racit&eacute; de ce test a ses limites. Il y a en tout 65536 ports &agrave; analyser ce qui pourrait demander jusqu'&agrave; 212 minutes. Ce resultat ne montre donc pas que votre PC est enti&egrave;rement s&eacute;curis&eacute;.";
					result.innerHTML += "<br />&nbsp;&nbsp;&nbsp;&nbsp;Si vous souhaitez rentrer en contact avec Cybermassif vous pouvez nous laisser votre adresse e-mail dans le formulaire ci-dessous.";
					if(!document.all) { // Pas IE
						document.getElementById('divmail').style.display="inline";
						result.style.visibility="visible";		
					}
					else { // Pour IE
						result.style.cssText = "visibility:visible;";
						document.getElementById('divmail').style.cssText = "display:inline;";	
					}
					document.getElementById('bouton').value="Fin de l'analyse";
					document.getElementById('bouton').disabled = false;
				  }
			  }
              else {
                 document.getElementById('progress').innerHTML="Erreur lors du traitement...";
			  }
         }
    }; 
   chaine = "port.php?numPort="+numPort;
   xhr.open( "GET", chaine.replace(' ',''),  true); 
   xhr.send(null); 
} 


// Fonction qui envoie un mail au bon centre de ressources en fonction du formulaire.
function mail()
{ 
	document.getElementById('boutonmail').disabled = true;
	var xhr; 
    try {  xhr = new ActiveXObject('Msxml2.XMLHTTP');   }
    catch (e) 
    {
        try {   xhr = new ActiveXObject('Microsoft.XMLHTTP');    }
        catch (e2) 
        {
          try {  xhr = new XMLHttpRequest();     }
          catch (e3) {  xhr = false;   }
        }
    }
    xhr.onreadystatechange  = function()
    { 
		 if(xhr.readyState  == 4)
         {
			  if(xhr.status  == 200)  {	 
			  	alert(xhr.responseText);
				if(xhr.responseText == 'Votre adresse mail n\'est pas valide') {
					document.getElementById('boutonmail').disabled = false;
				}
			  }
              else {
                alert('Erreur lors du traitement...');
			  }
         }
    }; 
	centr = document.getElementById('centre');
   chaine = "mail.php?mail=" + document.getElementById('mail').value + "&center=" + centr.options[centr.selectedIndex].value;
   xhr.open( "GET", chaine.replace(' ',''),  true);
   xhr.send(null); 
} 