c# 防火墻添加/刪除 特定端口的示例
更新時間:2020年10月28日 09:44:47 作者:一只獨(dú)行的猿
這篇文章主要介紹了c# 如何將特定端口加入防火墻中,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下
針對將特定端口加入到windows系統(tǒng)的防火墻中,使其允許或禁止通過防火墻。其大概思路是:

/// <summary>
/// 添加防火墻例外端口
/// </summary>
/// <param name="name">名稱</param>
/// <param name="port">端口</param>
/// <param name="protocol">協(xié)議(TCP、UDP)</param>
/// <param name="scope">范圍類型</param>
/// <param name="remoteAddresses">自定義范圍時的IP地址范圍</param>
public static void AllowPortsUseFirewall(string name, int port, string protocol, NET_FW_SCOPE_ scope,string remoteAddresses)
{
//創(chuàng)建firewall管理類的實(shí)例: Type的GetTypeFromProgID是通過注冊表信息項目創(chuàng)建實(shí)例類型
INetFwMgr netFwMgr = (INetFwMgr)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwMgr"));
//判斷網(wǎng)絡(luò)類型,是TCP還是UDP
NET_FW_IP_PROTOCOL_ protocolType = NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_UDP;
if (protocol.ToUpper() == "TCP")
{
protocolType = NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP;
}
//查找以前是否有相同的規(guī)則創(chuàng)建,如果有則不再創(chuàng)建新的規(guī)則
foreach (INetFwOpenPort mPort in netFwMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts)
{
if (mPort.Protocol == protocolType && mPort.Port == port)
{
return;
}
}
//創(chuàng)建一個防火墻端口管理實(shí)例
INetFwOpenPort objPort = (INetFwOpenPort)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwOpenPort"));
//設(shè)置端口實(shí)例名稱
objPort.Name = name;
//設(shè)置端口信息
objPort.Port = port;
//端口管理的網(wǎng)絡(luò)類型
objPort.Protocol = protocolType;
/*
* NET_FW_SCOPE_ALL 范圍是所有地址。
* NET_FW_SCOPE_CUSTOM 自定義范圍。
* NET_FW_SCOPE_LOCAL_SUBNET 范圍是本地子網(wǎng)。
* NET_FW_SCOPE_MAX 使用僅用于測試。不意味著為應(yīng)用程序?qū)崿F(xiàn)。
*/
//端口的范圍,針對哪類或哪個IP地址
objPort.Scope = scope;
//此處可以指定IP地址版本信息
//objPort.IpVersion = NET_FW_IP_VERSION_.NET_FW_IP_VERSION_V4;
//自定義IP地址范圍
if (objPort.Scope == NET_FW_SCOPE_.NET_FW_SCOPE_CUSTOM)
{
//這而需要移除多個地址之間的空白字符串,有空白字符串會出現(xiàn)設(shè)置異常
objPort.RemoteAddresses = remoteAddresses.Replace(" ", ""); ;//"192.168.1.10,192.168.1.12.......";
}
//是否啟用規(guī)則
objPort.Enabled = true;
//加入到本地防火墻管理規(guī)則中。
netFwMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts.Add(objPort);
}
刪除規(guī)則比較簡單:創(chuàng)建防火墻實(shí)例,直接移除某種通信類型的端口就行。
/// <summary>
/// 刪除防火墻例外端口
/// </summary>
/// <param name="port">端口</param>
/// <param name="protocol">協(xié)議(TCP、UDP)</param>
public static void DeletePortsUseFirewall(int port, string protocol)
{
//創(chuàng)建firewall管理類的實(shí)例: Type的GetTypeFromProgID是通過注冊表信息項目創(chuàng)建實(shí)例類型
INetFwMgr netFwMgr = (INetFwMgr)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwMgr"));
//移除特定類型的通信方式的端口
if (protocol == "TCP")
{
netFwMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts.Remove(port, NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP);
}
else
{
netFwMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts.Remove(port, NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_UDP);
}
}
以上就是c# 防火墻添加/刪除特定端口的示例的詳細(xì)內(nèi)容,更多關(guān)于c# 防火墻添加/刪除端口的資料請關(guān)注腳本之家其它相關(guān)文章!
您可能感興趣的文章:
- C#檢測遠(yuǎn)程計算機(jī)端口是否打開的方法
- C#端口轉(zhuǎn)發(fā)用法詳解
- 基于C#實(shí)現(xiàn)的端口掃描器實(shí)例代碼
- c#檢測端口是否被占用的簡單實(shí)例
- C#獲取Windows進(jìn)程監(jiān)聽的TCP/UDP端口實(shí)例
- C#開發(fā)之Socket網(wǎng)絡(luò)編程TCP/IP層次模型、端口及報文等探討
- asp.net(c#)動態(tài)修改webservice的地址和端口(動態(tài)修改配置文件)
- c# 連接字符串?dāng)?shù)據(jù)庫服務(wù)器端口號 .net狀態(tài)服務(wù)器端口號
- c# AcceptEx與完成端口(IOCP)結(jié)合的示例
相關(guān)文章
C#實(shí)現(xiàn)把科學(xué)計數(shù)法(E)轉(zhuǎn)化為正常數(shù)字值
這篇文章主要介紹了C#實(shí)現(xiàn)把科學(xué)計數(shù)法(E)轉(zhuǎn)化為正常數(shù)字值,本文直接給出代碼實(shí)例,需要的朋友可以參考下2015-06-06
WPF自定義實(shí)現(xiàn)雷達(dá)圖控件的示例詳解
雷達(dá)圖用于表示不同內(nèi)容的占比關(guān)系,在項目中有廣泛的應(yīng)用,但是目前未曾有封裝良好的雷達(dá)圖控件,所以本文分享了如何封裝一個通用的雷達(dá)圖控件,希望對大家有所幫助2023-08-08
對WPF中的TreeView實(shí)現(xiàn)右鍵選定
這篇文章介紹了WPF實(shí)現(xiàn)右鍵選定TreeView的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-06-06
C#中使用HttpDownLoadHelper下載文件實(shí)例
這篇文章主要介紹了C#中使用HttpDownLoadHelper下載文件的方法,并實(shí)例講述了在webfrom中與在mvc中的實(shí)現(xiàn)方法,需要的朋友可以參考下2014-10-10

