IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Vérifier si une règle firewall existe avant de la créer.


Sujet :

C#

  1. #1
    Membre confirmé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2020
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Novembre 2020
    Messages : 85
    Par défaut Vérifier si une règle firewall existe avant de la créer.
    Bonjour,
    J'ai fait un script permettant de créer une règle pour le Firewall dans Windows.
    celle-ci fonctionne bien mais si le l'exécute plusieurs fois, cette règle se crée plusieurs fois aussi.
    Je souhaite donc faire un test avant et ne pas la recréer si elle existe déjà.
    mon code de création :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Type tNetFwPolicy2 = Type.GetTypeFromProgID("HNetCfg.FwPolicy2");
                INetFwPolicy2 fwPolicy2 = (INetFwPolicy2)Activator.CreateInstance(tNetFwPolicy2);
     
                //on crée la règle
                INetFwRule2 inboundRule = (INetFwRule2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FWRule"));
                inboundRule.Enabled = true;
                //Allow through firewall
                inboundRule.Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW;
                inboundRule.Protocol = 17; //TCP = 6, UDP = 17
                inboundRule.LocalPorts = "80";  //Port 80
                inboundRule.Name = "LeNomDeMaRegle";
                //Now add the rule
                INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
                firewallPolicy.Rules.Add(inboundRule);

  2. #2
    Max
    Max est déconnecté
    Expert confirmé

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Par défaut
    Salut

    La réponse est dans l'exemple que tu donnes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    firewallPolicy.Rules.Add(inboundRule);
    Ton objet nommé firewallPolicy (d'un type qui implémente l'interface INetFwPolicy2) a une propriété Rules d'un type qui implémente l'interface INetFwRules qui est une liste d'objets implémentant INetFwRule. Tu peux comparer la propriété Name des règles existantes pour voir si elle existe déjà

  3. #3
    Membre confirmé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2020
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Novembre 2020
    Messages : 85
    Par défaut
    Salut,
    Merci pour ta réponse, mais peux tu être plus précis ?
    J'ai fait un bouton pour la tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Type tNetFwPolicy2 = Type.GetTypeFromProgID("HNetCfg.FwPolicy2");
                INetFwPolicy2 fwPolicy2 = (INetFwPolicy2)Activator.CreateInstance(tNetFwPolicy2);
                INetFwRule2 inboundRule = (INetFwRule2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FWRule"));
                if (inboundRule.Name == "LeNomDeMaRegle")
                {
                    MessageBox.Show("Elle Existe déjà");
                }
                else
                {
                    MessageBox.Show("Elle n'existe pas");
                }

  4. #4
    Max
    Max est déconnecté
    Expert confirmé

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Par défaut
    La propriété Rules de ton objet firewallPolicy contient l'ensemble des règles existantes (la preuve, tu en ajoutes une via la méthode Add dessus). Il te suffit donc de regarder dans ces Rules (en bouclant dessus ou autrement) voir s'il existe déjà une règle portant le nom de celle que tu veux ajouter : si elle existe déjà du ne la crées pas, sinon tu la crées.

  5. #5
    Membre confirmé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2020
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Novembre 2020
    Messages : 85
    Par défaut
    Re,
    du coup, j'ai tester un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Type tNetFwPolicy2 = Type.GetTypeFromProgID("HNetCfg.FwPolicy2");
                INetFwPolicy2 fwPolicy2 = (INetFwPolicy2)Activator.CreateInstance(tNetFwPolicy2);
     
                INetFwRule2 inboundRule = (INetFwRule2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FWRule"));
                INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
     
                foreach (String NameRule in firewallPolicy.Rules)
                {
                    if (NameRule == "LeNomDeMaRegle")
                    {
                        MessageBox.Show("Elle Existe déjà");
                    }
                }
    Mais ça ne fonctionne pas. il me dit :
    impossible d'effectuer un cast d'un objet COM de type 'System._ComObject' en type de classe 'System.String'.
    Désolé, mais je suis débutant en C#

  6. #6
    Max
    Max est déconnecté
    Expert confirmé

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Par défaut
    Oui, ça ne peut pas fonctionner, vu que la ligne suivante n'a pas de sens : foreach (String NameRule in firewallPolicy.Rules)

    Rules (cf. doc) est une liste d'objets qui sont d'un type qui implémente l'interface INetFwRule (cf. doc). Tu essaies de convertir un INetFwRule en string (mon petit doigt me dit que soit tu n'as pas parcouru les docs, soit tu débutes en dév et pas qu'en C#, soit les deux ). Il faut que tu compares la propriété Name de cet objet INetFwRule avec le nom de ta règle.

    En clair ce qu'il faut que tu fasses :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    pour chaque règle de firewall dans la liste des règles de ma policy de firewall) faire
        si cette règle a pour nom "LeNomDeMaRegle" alors
            j'affiche une messagebox ayant pour titre "la règle LeNomDeMaRegle existe déjà"
        finsi
    finpour
    En pratique :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
    foreach (INetFwRule currentRule in firewallPolicy.Rules) {
        if (currentRule.Name == "LeNomDeMaRegle") {
            MessageBox.Show("Elle Existe déjà");
        }
    }
    Et donc dans ton cas (il y aurait plus élégant, etc. mais bon on va pas t'embrouiller avec du LINQ ou autre) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
    string neededRuleName = "LeNomDeMaRegle";
    bool ruleAlreadyExists = false;
    foreach (INetFwRule currentRule in firewallPolicy.Rules) {
        if (currentRule.Name == neededRuleName) {
            ruleAlreadyExists = true;
            // On arrête de boucler si la règle est trouvée
            break;
        }
    }
    // Si elle n'existe pas on la crée
    if (!ruleAlreadyExists) {
        // ...
    }

  7. #7
    Membre confirmé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2020
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Novembre 2020
    Messages : 85
    Par défaut
    Un grand merci à toi !!!
    Ca fonctionne très bien.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 18/04/2014, 11h50
  2. Vérifier si une valeur est présente avant de copier
    Par maximilien59 dans le forum VBA Access
    Réponses: 12
    Dernier message: 20/06/2013, 19h45
  3. Vérifier si une base SQLite existe
    Par poussinvert dans le forum Android
    Réponses: 2
    Dernier message: 15/05/2012, 21h26
  4. vérifier si une table est vide avant insertion
    Par cashmoney dans le forum JDBC
    Réponses: 7
    Dernier message: 21/04/2009, 17h54
  5. Vérifier si une image distante existe
    Par fab4am dans le forum Langage
    Réponses: 26
    Dernier message: 02/01/2007, 17h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo