11

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

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

4

4 回答 4

11

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

于 2011-08-04T14:40:20.103 回答
8

我认为你可以这样做:试一试:将 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 "监听"

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 监听

于 2011-08-04T14:40:02.050 回答
2

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

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

于 2011-08-04T14:33:16.030 回答
0

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

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

更新*

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

于 2011-08-04T14:34:39.347 回答