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é.");
}
}