检测 Windows 防火墙是不是阻止了我的程序

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案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 防火墙的任何信息。这可能失败的原因有一百万个。 防火墙通常会阻止对本地主机的访问吗?

以上是关于检测 Windows 防火墙是不是阻止了我的程序的主要内容,如果未能解决你的问题,请参考以下文章

如何检测是不是启用了防火墙产品?

检测 Java 应用程序是不是以 Windows 管理员身份运行

是啥导致 Windows 防火墙阻止应用程序?

windows防火墙规则有优先级吗

使用上下文菜单在 Windows 防火墙中阻止 .EXE

我如何知道浏览器通知是不是被 Windows 阻止