using System; using System.IO; using System.Net; using Genetec.Sdk; using Genetec.Sdk.Scripting; using System.Linq; public sealed class MyMacro : UserMacro { public string startIp { get; set; } = "192.168.1.10"; // IP de début public string endIp { get; set; } = "192.168.1.15"; // IP de fin public string cmd { get; set; } = "/cgi-bin/back_focus?auto=on"; public string username { get; set; } = "admin"; public string password { get; set; } = "Admin12345"; /// /// Entry point of the macro. /// public override void Execute() { try { // Validation des paramètres if (string.IsNullOrWhiteSpace(startIp) || string.IsNullOrWhiteSpace(endIp) || string.IsNullOrWhiteSpace(cmd)) { //ShowMessageBox("Erreur", "L'une des adresses IP ou la commande est vide."); return; } // Conversion des IP en parties numériques var startParts = startIp.Split('.').Select(int.Parse).ToArray(); var endParts = endIp.Split('.').Select(int.Parse).ToArray(); // Validation de la plage if (!IsValidIpRange(startParts, endParts)) { //ShowMessageBox("Erreur", "La plage d'adresses IP n'est pas valide."); return; } // Parcourir la plage d'adresses IP for (var ip = startParts; !IpGreaterThan(ip, endParts); IncrementIp(ip)) { string currentIp = string.Join(".", ip); string fullUrl = $"http://{currentIp}{cmd}"; try { //LogInfo($"Envoi de la requête à : {fullUrl}"); // Configuration de la requête WebRequest webRequest = WebRequest.Create(fullUrl); webRequest.Method = "GET"; webRequest.Credentials = new NetworkCredential(username, password); // Envoi de la requête et lecture de la réponse string responsestring; using (WebResponse response = webRequest.GetResponse()) { using (Stream responseStream = response.GetResponseStream()) { using (StreamReader readStream = new StreamReader(responseStream, System.Text.Encoding.UTF8)) { responsestring = readStream.ReadToEnd(); } } } //LogInfo($"Réponse de {currentIp} : {responsestring}"); } catch (WebException ex) { //LogError($"Erreur pour {currentIp} : {ex.Message}"); } catch (Exception ex) { //LogError($"Erreur inattendue pour {currentIp} : {ex.Message}"); } } //ShowMessageBox("Terminé", "Requêtes envoyées à toutes les IP de la plage."); } catch (Exception ex) { //ShowMessageBox("Erreur", $"Erreur inattendue : {ex.Message}"); //LogError($"Erreur inattendue : {ex.Message}"); } } /// /// Validation de la plage d'adresses IP. /// private bool IsValidIpRange(int[] start, int[] end) { return start.Length == 4 && end.Length == 4 && !IpGreaterThan(start, end); } /// /// Compare si une adresse IP est supérieure à une autre. /// private bool IpGreaterThan(int[] ip1, int[] ip2) { for (int i = 0; i < 4; i++) { if (ip1[i] > ip2[i]) return true; if (ip1[i] < ip2[i]) return false; } return false; } /// /// Incrémente une adresse IP. /// private void IncrementIp(int[] ip) { for (int i = 3; i >= 0; i--) { ip[i]++; if (ip[i] <= 255) break; ip[i] = 0; // Revenir à 0 si on dépasse 255 } } /// /// Nettoyage des ressources. /// protected override void CleanUp() { //LogInfo("Nettoyage des ressources terminé."); } }