C# 检测windows防火墙是否阻止我的程序

C# 检测windows防火墙是否阻止我的程序,c#,windows-firewall,C#,Windows Firewall,我有一个通过NetApp设备的api与之通信的应用程序。windows防火墙打开时,api命令将失败。关闭防火墙后,api命令可以工作。我没有收到任何类似“Windows防火墙正在阻止此程序”的消息 通过查看文档,我相信我找到了api命令需要打开的TCP端口。如何通过编程方式检测端口是否被阻止,以便向用户显示有关潜在问题的消息?要检测端口是否被阻止-在Win7上,您可以通过打开Windows防火墙查看窗口防火墙日志-单击左侧的高级设置,然后打开监控分支 注意:在“日志设置”部分的“监视”选项卡上

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


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

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


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

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

通常,防火墙记录从计算机连接到计算机的尝试,无论成功与否,您都可以检查它

更新*


你可以在网络上试试。如果您在一定时间内没有收到任何消息,那么您可以放心地说连接有问题。

您可以这样做,我认为:试试看: 为要检查的端口更改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 |查找/i“侦听”

TCP 0.0.0.0:25 0.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侦听

防火墙管理器通过COM公开自身并实现。

对不起,我澄清了这个问题,但如何通过编程实现此功能?为什么-1?我的回答是在编辑之前以编程方式进行的。这并没有告诉您有关Windows防火墙的任何信息。这可能会失败的原因有很多,还有一个。防火墙通常会阻止对本地主机的访问吗?这只适用于传入的UDP端口-添加传出规则以阻止流量不会被此函数检测到。另外,如果传入的UDP端口被报告为阻塞,那么仍然可以在防火墙上穿孔。知道如何检测传出的UDP是否被阻塞吗?