Портирование приложения C# в Mono, необходимо использовать FirewallAPI. Есть ли моно эквивалент?

Я написал службу Windows, которую мне нужно перенести на Mono, чтобы ее можно было использовать на платформах Mac / Linux.

Он использует FirewallAPI.dll (я думаю, что это реальное имя...). Другими именами являются NetFwTypeLb, NATUPNPLib и NETCONLib.

Я был в Google, пытаясь найти способ реализовать это на платформах Mac / Linux, но я не могу найти то, что я мог бы использовать для этого.

Это возможно? И объединяя еще один вопрос с этим: позволяют ли платформы Mac / Linux сервисам (которые я считаю иначе называемыми "демонами") легко устанавливаться и запускаться?

Спасибо Мэдлин

Просто обратите внимание, это текущий код, который я использую, я получил его от другого вопроса Stackru:

public class Firewall
{
    public static INetFwMgr WinFirewallManager()
    {
        Type type = Type.GetTypeFromCLSID(
            new Guid("{304CE942-6E39-40D8-943A-B913C40C9CD4}"));
        return Activator.CreateInstance(type) as INetFwMgr;
    }
    public bool AuthorizeProgram(string title, string path,
        NET_FW_SCOPE_ scope, NET_FW_IP_VERSION_ ipver)
    {
        Type type = Type.GetTypeFromProgID("HNetCfg.FwAuthorizedApplication");
        INetFwAuthorizedApplication authapp = Activator.CreateInstance(type)
            as INetFwAuthorizedApplication;

        authapp.Name = title;
        authapp.ProcessImageFileName = path;
        authapp.Scope = scope;
        authapp.IpVersion = ipver;
        authapp.Enabled = true;

        EventLog.WriteEntry("MachineVerification", authapp.Name + " " + authapp.Scope + " " + authapp.IpVersion);

        INetFwMgr mgr = WinFirewallManager();
        try
        {
            mgr.LocalPolicy.CurrentProfile.AuthorizedApplications.Add(authapp);

            EventLog.WriteEntry("MachineVerification", authapp.Name + " " + authapp.Scope + " " + authapp.IpVersion);
        }
        catch (Exception ex)
        {
            EventLog.WriteEntry("MachineVerification", "MROW!" + ex.Message);
            return false;
        }
        return true;
    }
}

1 ответ

Решение

Я забыл ответить на это, когда понял все!

На OS X нет необходимости делать исключение брандмауэра. OS X попросит пользователя дать вашему приложению разрешение на доступ к Интернету.

Хотя я не уверен насчет Linux, но охват Mono намного выше в Linux, поэтому я уверен, что кто-то уже отвечал на этот вопрос для Linux раньше.

Другие вопросы по тегам