确定IP是否被阻止

时间:2008-10-13 18:52:28

标签: c++ windows security networking

是否有人知道是否可以可靠地确定(编程C / C ++ ...)Windows PC上是否安装了防火墙或IP过滤软件?我需要检测主机操作系统是否在我的客户端软件中阻止某个服务器IP。

在这种情况下,我不需要担心外部硬件防火墙,因为我可以完全控制它。我只关心它的软件防火墙。我希望我可以迭代Windows网络堆栈或NDIS接口并确定这个

8 个答案:

答案 0 :(得分:3)

在阅读了一些回复其他答案的评论后,我认为这可能实际上更接近您所寻找的内容。它可能无法捕获所有类型的防火墙,但任何主要的防火墙供应商都应该在安全中心注册,因此可以使用此方法进行检测。您还可以将此与其他一些答案结合起来,为自己提供第二级验证。

Detecting running firewalls in windows

这是专家的交流帖子,因此您可能无法阅读该帖子。为了以防万一,我复制并粘贴了相关信息。它在VBScript中,但它应该指向正确的方向,直到您可以使用的WMI命名空间。

  

KemalRouge :我刚从a的一些帮助中解决了这个问题   同事。他指出我的知识库文章的方向,   它指出这些信息存储在WMI数据库中

     

基本上,可以在几行代码中查询WMI   找出正在监控的防火墙/防病毒软件   安全中心,以及该软件的状态(即启用与否)。

     

无论如何,如果你感兴趣的话,这里有一些用来测试它的VB代码   (您需要引用“Microsoft WMI Scripting V1.2 Library”):

Private Sub DumpFirewallInfo()

Dim oLocator    As WbemScripting.SWbemLocator
Dim oService    As WbemScripting.SWbemServicesEx
Dim oFirewalls  As WbemScripting.SWbemObjectSet
Dim oFirewall   As WbemScripting.SWbemObjectEx
Dim oFwMgr      As Variant


    Set oFwMgr = CreateObject("HNetCfg.FwMgr")

    Debug.Print "Checking the Windows Firewall..."
    Debug.Print "Windows Firewal Enabled: " & oFwMgr.LocalPolicy.CurrentProfile.FirewallEnabled
    Debug.Print ""

    Set oFwMgr = Nothing


    Debug.Print "Checking for other installed firewalls..."

    Set oLocator = New WbemScripting.SWbemLocator
    Set oService = oLocator.ConnectServer(".", "root\SecurityCenter")
    oService.Security_.ImpersonationLevel = 3

    Set oFirewalls = oService.ExecQuery("SELECT * FROM FirewallProduct") ' This could also be "AntivirusProduct"

    For Each oFirewall In oFirewalls
        Debug.Print "Company:       " & vbTab & oFirewall.CompanyName
        Debug.Print "Firewall Name: " & vbTab & oFirewall.DisplayName
        Debug.Print "Enabled:       " & vbTab & Format$(oFirewall.Enabled)
        Debug.Print "Version:       " & vbTab & oFirewall.versionNumber
        Debug.Print ""
    Next oFirewall

    Set oFirewall = Nothing
    Set oFirewalls = Nothing
    Set oService = Nothing
    Set oLocator = Nothing

End Sub

答案 1 :(得分:2)

如果您可以假设以下内容,可能会出现黑客攻击:

  1. 允许传出HTTP连接

  2. 您可以在另一台侦听端口80的服务器上运行您自己的服务

  3. 将您的服务编码为接受IP [和端口或网址]。它必须返回是否能够连接到IP。

    通过这种方式,您可以了解实际服务器是否已启动并正在运行。如果服务器不直接可用,您可以断定它被防火墙阻止。

    如果您不想编码/运行自己的服务,则可以使用互联网上提供的网络状态网络服务之一。

答案 2 :(得分:1)

如果该IP在其外部防火墙硬件上被阻止? 为什么某个主机无法访问是绝对不可能的。

答案 3 :(得分:1)

一种可能的解决方案是利用防火墙不会阻止访问端口80但阻止访问其他端口这一事实。因此,您可以尝试连接到端口80,如果成功,则通过通常阻塞的端口(see here for an example list)进行连接

答案 4 :(得分:1)

你无法确定IP是否被阻止,至少不知道你正在寻找什么防火墙软件并专门检查它。一些想法:

  • 检查是否启用了特定防火墙(例如Windows防火墙)或阻止了您的服务器
  • 检查hosts文件中是否有阻止服务器IP的条目
  • 通过一个或多个代理连接,看看他们是否可以在客户端无法访问IP的情况下访问IP。
  • 测试服务器以查看它是否可以访问(毕竟,这是你真正要测试的,对吧?看看服务器是否可以与之通信?)。如果服务器端出现实际中断,可能需要多次/周期性地测试它。

答案 5 :(得分:0)

您必须从C#翻译,但此博客文章介绍了如何检查Windows防火墙是否已启用: http://www.shafqatahmed.com/2008/01/controlling-win.html

答案 6 :(得分:0)

我打算建议在netsh上做一些'期待'式的编程......但通常当有这样的命令行应用程序时,它背后有一个库。

查看Windows Firewall API。我不能说这会解决你的具体问题,但似乎很可能。

Sample code用于检查是否允许特定端口... A good example显示所需的标头。

答案 7 :(得分:-4)

尝试调用Ping。