检测 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 防火墙是不是阻止了我的程序的主要内容,如果未能解决你的问题,请参考以下文章