热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#学习教程:Windows过滤平台–如何根据本地端口阻止传入连接?分享

Windows过滤平台–如何根据本地端口阻止传入连接?我正在尝试使用WFP设置一些filter来阻止到本地服务器的入站连接(例如,侦听端口8080的Web服务器)。我有

Windows过滤平台 – 如何根据本地端口阻止传入连接?

我正在尝试使用WFP设置一些filter来阻止到本地服务器的入站连接(例如,侦听端口8080的Web服务器)。

我有一个可以基于远程端口阻止的filter工作,所以我可以阻止我的机器上的进程建立到端口8080的任何连接,但我无法弄清楚如何阻止来自另一台机器的传入连接基于本地8080港口?

这是我的代码,它基于远程端口进行阻塞:(它是使用P / invoke的C#,但它与用C ++编写的几乎相同)

var RemotePort = 8080 # port to block // connect to engine var session = new Fwpm.FWPM_SESSION0 { flags = Fwpm.FWPM_SESSION_FLAG_DYNAMIC }; UInt32 engineHandle; UnsafeNativeMethods.FwpmEngineOpen0(null, Fwpm.RPC_C_AUTHN_WINNT, IntPtr.Zero, session, out engineHandle // create a subLayer to attach filters to var subLayerGuid = Guid.NewGuid(); var subLayer = new Fwpm.FWPM_SUBLAYER0(); subLayer.subLayerKey = subLayerGuid; subLayer.displayData.name = DisplayName; subLayer.displayData.description = DisplayName; subLayer.flags = 0; subLayer.weight = 0x100; UnsafeNativeMethods.FwpmSubLayerAdd0(engineHandle, subLayer, IntPtr.Zero) var cOndition= new Fwpm.FWPM_FILTER_CONDITION0 { fieldKey = Fwpm.FWPM_CONDITION_IP_REMOTE_PORT, matchType = Fwpm.FWP_MATCH_TYPE.FWP_MATCH_EQUAL, cOnditionValue= { type = Fwpm.FWP_DATA_TYPE.FWP_UINT16, uint16 = RemotePort } } // create the filter itself var fwpFilter = new Fwpm.FWPM_FILTER0(); fwpFilter.layerKey = Fwpm.FWPM_LAYER_ALE_AUTH_CONNECT_V4; fwpFilter.action.type = Fwpm.FWP_ACTION_BLOCK; fwpFilter.subLayerKey = subLayerGuid; fwpFilter.weight.type = Fwpm.FWP_DATA_TYPE.FWP_EMPTY; // auto-weight. fwpFilter.numFilterCOnditions= (uint)1; var cOndsArray= new[]{ condition }; var cOndsPtr= SafeNativeMethods.MarshalArray(condsArray); // helper to create a native array from a C# one fwpFilter.filterCOndition= condsPtr; fwpFilter.displayData.name = DisplayName; fwpFilter.displayData.description = DisplayName; // add the filter UInt64 filterId = 0L; UnsafeNativeMethods.FwpmFilterAdd0(engineHandle, ref fwpFilter, IntPtr.Zero, out filterId)); 

如上所述,此代码可以阻止与远程端口8080的连接。要阻止与本地端口8080的连接,我修改了代码,如下所示:

 var LocalPort = 8080; var cOndition= new Fwpm.FWPM_FILTER_CONDITION0 { fieldKey = Fwpm.FWPM_CONDITION_IP_LOCAL_PORT, matchType = Fwpm.FWP_MATCH_TYPE.FWP_MATCH_EQUAL, cOnditionValue= { type = Fwpm.FWP_DATA_TYPE.FWP_UINT16, uint16 = LocalPort } } // create the filter itself var fwpFilter = new Fwpm.FWPM_FILTER0(); fwpFilter.layerKey = Fwpm.FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V4; 

MSDN暗示FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V4是阻止入站连接的正确位置,但这根本不起作用。 我已经尝试了FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V4以及其他一些图层,但无论我尝试过什么,我总能在我的机器上建立从另一台机器到服务器8080端口的连接。

任何帮助将非常感激

您应该能够在支持FWPM_CONDITION_IP_LOCAL_PORT条件的任何INBOUND或RECV层上创建该filter,要搜索的资源是:

http://msdn.microsoft.com/en-us/library/windows/hardware/ff549939%28v=vs.85%29.aspx

然而,并非所有流量都通过每一层,我绝不是专家,但一种方法是在每个适用层(半打左右的filter)中添加这样的filter,看看是否有效。 如果是这样,那么您一次删除一个filter,直到找到实际需要的集合。 我最近的一个项目需要4层才能阻止我感兴趣的所有流量。

可能值得注意的一个重要警告是,localhost上的流量可能不会通过任何WFP层(或者可能只是它跳过的入站层,我不记得了)。 因此,您可以使用WFP来阻止与端口的远程连接,但本地连接仍可能通过。

上述就是C#学习教程:Windows过滤平台 – 如何根据本地端口阻止传入连接?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—编程笔记


推荐阅读
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • C#多线程解决界面卡死问题的完美解决方案
    当界面需要在程序运行中不断更新数据时,使用多线程可以解决界面卡死的问题。一个主线程创建界面,使用一个子线程执行程序并更新主界面,可以避免卡死现象。本文分享了一个例子,供大家参考。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 本文详细介绍了使用C#实现Word模版打印的方案。包括添加COM引用、新建Word操作类、开启Word进程、加载模版文件等步骤。通过该方案可以实现C#对Word文档的打印功能。 ... [详细]
  • Unity3D引擎的体系结构和功能详解
    本文详细介绍了Unity3D引擎的体系结构和功能。Unity3D是一个屡获殊荣的工具,用于创建交互式3D应用程序。它由游戏引擎和编辑器组成,支持C#、Boo和JavaScript脚本编程。该引擎涵盖了声音、图形、物理和网络功能等主题。Unity编辑器具有多语言脚本编辑器和预制装配系统等特点。本文还介绍了Unity的许可证情况。Unity基本功能有限的免费,适用于PC、MAC和Web开发。其他平台或完整的功能集需要购买许可证。 ... [详细]
author-avatar
luhd88112010_254
这个家伙很懒,什么也没留下!