【问题标题】:Detect if windows firewall is blocking my program检测 Windows 防火墙是否阻止了我的程序
【发布时间】:2011-10-20 01:39:13
【问题描述】:

我有一个应用程序通过他们的 api 与 NetApp 设备进行通信。打开 windows 防火墙后,api 命令将失败。关闭防火墙后,api 命令可以工作。我没有收到任何类似“Windows 防火墙正在阻止该程序”的消息。

通过查看文档,我相信我找到了需要打开的 TCP 端口才能使 api 命令正常工作。如何以编程方式检测端口是否被阻止,以便向用户显示潜在问题的消息?

【问题讨论】:

    标签: c# windows-firewall


    【解决方案1】:

    防火墙管理器通过 COM 暴露自己并实现IsPortAllowed

    【讨论】:

    • 这仅适用于传入的 UDP 端口 - 添加传出规则以阻止流量不会被此功能检测到。此外,如果传入的 UDP 端口被报告为被阻止,那么仍有可能对防火墙进行打孔。
    • 知道如何检测传出 UDP 是否被阻止?
    【解决方案2】:

    要检测端口是否被阻止 - 在 Win7 上,您可以通过打开 Windows 防火墙来查看 Window 防火墙日志 - 单击左侧的高级设置,然后打开监控分支。

    请注意,在“日志记录设置”部分的“监控”选项卡上,有一个选项可以记录到在我的 Win7 PC 上为 %systemroot%\system32\LogFiles\Firewall\pfirewall.log 的文件 - 你可以只解析这个文件。我过去研究过,有一些实用程序可以为您执行此操作,但归根结底,它只是一个标准格式的日志文件。

    【讨论】:

    • 对不起,我澄清了这个问题,但我怎样才能以编程方式做到这一点?
    • 为什么是-1?我的回答在编辑之前以编程方式进行。
    【解决方案3】:

    我怀疑防火墙会提到它正在阻止应用程序,否则入侵者可以获得有关阻止他访问系统的信息:-)。

    通常,防火墙会记录与计算机的连接尝试,无论成功与否,您都可以查看。

    更新*

    您可以在网络中尝试Acknowledgement。如果您在一定时间内没有收到任何消息,那么您可以肯定地说连接存在问题。

    【讨论】:

      【解决方案4】:

      我认为你可以这样做:试一试: 将 1433 更改为您要检查的端口。

      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Text;
      using System.Net.Sockets;
      
      namespace CheckPortStatus
      {
          class Program
          {
              static void Main(string[] args)
              {
                  try
                  {
                      TcpClient tcp = new TcpClient();
                      tcp.Connect("localhost", Convert.ToInt16(1433));
                      Console.WriteLine("online");
                  }
                  catch (Exception ex)
                  {
                      Console.WriteLine("offline");
                      Console.WriteLine(ex.Message);
                  }
              }
          }
      }
      

      另外,查看您的机器运行中可用的端口:

      C:>netstat -an |find /i "listening"

      TCP 0.0.0.0:25 0.0.0.0:0 监听

      TCP 0.0.0.0:80 0.0.0.0:0 监听

      TCP 0.0.0.0:135 0.0.0.0:0 监听

      【讨论】:

      • 这不会告诉您有关 Windows 防火墙的任何信息。这可能失败的原因有一百万个。
      • 防火墙通常会阻止对本地主机的访问吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-05
      • 2019-04-07
      • 1970-01-01
      • 2010-10-16
      • 2017-02-08
      • 2012-11-23
      相关资源
      最近更新 更多