一个端口操作类PortHelper
此操作类主要使用了系统命令行来实现的,详细的命令可参照微软文档《如何使用"netsh advfirewall firewall"上下文而非“netsh firewall”上下文来控制 Windows Server 2008 和 Windows Vista 中的 Windows 防火墙行为》,而检查端口部分则利用Socket判断端口是否被占用,但是在也会有判断失灵的时候。
public static class PortHelper
{
#region 命令原型
//netsh firewall delete allowedprogram [AppPath] //netsh firewall add allowedprogram [appPath] [portName] ENABLE //netsh firewall add portopening [ALL|TCP|UDP] [portID] [portName] //netsh firewall delete portopening [ALL|TCP|UDP] [portID]
#endregion /// <summary>
/// 判定指定端口号有否被占用
/// </summary>
/// <param name="portId">端口号</param>
/// <returns></returns>
public static bool IsAvaliable(int portId)
{
bool result;
IPEndPoint point = new IPEndPoint(IPAddress.Parse("127.0.0.1"), portId);
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
socket.Bind(point);
result = true;
}
catch (Exception ex)
{
result = false;
}
finally
{
socket.Close();
socket.Dispose();
socket = null;
}
return result;
} #region 指定端口号 /// <summary>
/// 开放指定端口
/// </summary>
/// <param name="portName">端口名称</param>
/// <param name="portId">端口号</param>
/// <param name="type">协议类型</param>
/// <returns></returns>
public static bool OpenPortByID(string portName, int portId,ProtocolTypeName type)
{
string arg = string.Format("firewall add portopening {0} {1} {2}", type, portId, portName);
string cmdResult = RunCMD("netsh", arg);
if (cmdResult.Contains("确定"))
return true;
return false;
} /// <summary>
/// 开放指定的所有类型端口
/// </summary>
/// <param name="portName">端口名称</param>
/// <param name="portId">端口号</param>
/// <returns></returns>
public static bool OpenPortByID(string portName, int portId)
{
return OpenPortByID(portName, portId, ProtocolTypeName.ALL);
} /// <summary>
/// 删除指定的所有类型端口
/// </summary>
/// <param name="portId">端口号</param>
/// <returns></returns>
public static bool DeletePortByID(int portId)
{
return DeletePortByID(portId, ProtocolTypeName.ALL);
} /// <summary>
/// 删除指定的端口
/// </summary>
/// <param name="portId">端口号</param>
/// <param name="type">协议类型</param>
/// <returns></returns>
public static bool DeletePortByID(int portId, ProtocolTypeName type)
{
string arg = string.Format("firewall delete portopening {0} {1}", type, portId);
string cmdResult = RunCMD("netsh", arg);
if (cmdResult.Contains("确定"))
return true;
return false;
} #endregion #region 指定应用程序 /// <summary>
/// 为指定应用程序开放端口
/// </summary>
/// <param name="appPath">应用程序路径</param>
/// <param name="portName">端口名称</param>
/// <returns></returns>
public static bool OpenPortAppName(string appPath,string portName)
{
string arg = string.Format("firewall add allowedprogram {0} {1} ENABLE",appPath,portName);
string cmdResult = RunCMD("netsh", arg);
if (cmdResult.Contains("确定"))
return true;
return false;
} /// <summary>
/// 删除指定应用程序的端口
/// </summary>
/// <param name="appPath">应用程序路径</param>
/// <returns></returns>
public static bool DeletePortByAppName(string appPath)
{
string arg = string.Format("firewall delete allowedprogram {0}",appPath);
string cmdResult = RunCMD("netsh", arg);
if (cmdResult.Contains("确定"))
return true;
return false;
} #endregion /// <summary>
/// 执行命令
/// </summary>
/// <param name="cmd">命令名称</param>
/// <param name="arg">参数</param>
/// <returns></returns>
private static string RunCMD(string cmd, string arg)
{
Process pro = new Process();
pro.StartInfo = new ProcessStartInfo(cmd, arg);
pro.StartInfo.UseShellExecute = false;
pro.StartInfo.RedirectStandardOutput = true;
pro.Start();
pro.WaitForExit();
string outputText = pro.StandardOutput.ReadToEnd();
return outputText;
}
} public enum ProtocolTypeName
{
ALL,
TCP,
UDP
}
一个端口操作类PortHelper的更多相关文章
- 一个数据库操作类,适用于Oracle,ACCESS,SQLSERVER
最近做了一个数据诊断的项目,里面自己写了一个数据库的操作类,包含:连接数据库.读数据表.执行SQL操作,释放数据库等组成,希望对大家有用,由于水平有限,若有错误或者代码不足地方欢迎指正,谢谢. ADO ...
- 51)PHP,一个数据库操作类的代码
<?php //类名,也习惯上(推荐)使用跟文件名相似的名字 //定义一个mysql连接类,该类可以连接mysql数据库 //并实现其单例模式 //该类的功能还能够完成如下基本mysql操作: ...
- Java-编写一个jdbc操作类
1.通过读取文件配置 package 数据库操作类; /* * Db.java Created on 2007年8月20日, 上午 8:37 */ import java.io.*; import j ...
- 封装一个redis操作类来操作hash格式
最近项目要用redis,依然是基于tp3.2. 发现thinkphp3.2自带的缓存类并不好使用,就自己封装了一个 目前只支持hash格式,其他数据类型的操作后面用到的时候再补充 <?php / ...
- C#封装的一个JSON操作类
using System; using System.Collections.Generic; using System.Collections; using System.Text; using S ...
- vba的一个File操作类
Option Explicit '-------------------------------------------------------- '[Class name]: clsTxtFile ...
- vba的一个DB操作类
Option Explicit '-------------------------------------------------------- '[Class Name]: DBHelper '[ ...
- Android打造属于自己的数据库操作类。
1.概述 开发Android的同学都知道sdk已经为我们提供了一个SQLiteOpenHelper类来创建和管理SQLite数据库,通过写一个子类去继承它,就可以方便的创建.管理数据库.但是当我们需要 ...
- XML Helper XML操作类
写的一个XML操作类,包括读取/插入/修改/删除. using System;using System.Data;using System.Configuration;using System.Web ...
随机推荐
- 开源Launcher - Wox 出炉了
Wox 是一款免费开源的信息快速获取软件.她的创作灵感来自于Mac上Alfred和Window上的Launchy. 目前Wox托管在Github (http://www.github.com/qian ...
- Windows调试学习笔记:(二)WinDBG调试.NET程序示例
好不容易把环境打好了,一定要试试牛刀.我创建了一个极其简单的程序(如下).让我们期待会有好的结果吧,阿门! using System; using System.Collections.Generic ...
- Embeding Python & Extending Python with FFPython
Introduction ffpython is a C++ lib, which is to simplify tasks that embed Python and extend Python. ...
- jQuery插件实现图片展开效果,jquery.gallery。仿腾讯QQ空间说说图片展示效果。
公司的项目http://www.umfun.com/,有个说说的页面(和腾讯QQ空间说说一样),里面有个发表图片功能,上传完图片,需要点击展开的效果. 当时手里面事情比较多(公司就我一个前端),忙不过 ...
- mysql主从复制原理
复制如何工作 整体上来说,复制有3个步骤: (1) master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events): ...
- C++中实现回调机制的几种方式[转]
(1)Callback方式Callback的本质是设置一个函数指针进去,然后在需要需要触发某个事件时调用该方法, 比如Windows的窗口消息处理函数就是这种类型. 比如下面的示例代码,我们在Do ...
- UFT\QTP 12 新特性
UFT\QTP 12 新特性 http://blog.csdn.net/testing_is_believing/article/details/22310297
- 使用jQuery开发一个带有密码强度检验的超酷注册页面
在今天的jQuery教程中,我们将介绍如何使用jQuery和其它相关的插件来生成一个漂亮的带有密码强度检验的注册页面,希望大家喜欢! 相关的插件和类库 complexify - 一个密码强度检验jQu ...
- Outer Join Query Over Dblink Can Fail With ORA-904 (Doc ID 730256.1)
Outer Join Query Over Dblink Can Fail With ORA-904 (Doc ID 730256.1) To Bottom Modified:03-May-2013T ...
- struts2 using kindeditor upload pictures (including jmagic compressed images)
Project uses a kindeditor3.4 UploadContentImgAction @SuppressWarnings("serial") @ParentPac ...