C#獲取本地應用進程和端口號的實現(xiàn)示例
后臺調(diào)用命令行程序,通過分析netstat命令的返回結(jié)果獲取進程信息,主要使用的參數(shù)包括-a(顯示所有連接和偵聽端口)、-n(以數(shù)字形式顯示地址和端口號)、-o(顯示擁有的與每個連接關(guān)聯(lián)的進程 ID),其實-b(顯示在創(chuàng)建每個連接或偵聽端口時涉及的可執(zhí)行程序)也可以用,但是它的返回結(jié)果沒有和前幾個參數(shù)在一行,分析起來比較麻煩,就沒有用。另外,如果是查詢端口,還可以在命令行中附帶findstr命令從netstat命令的返回結(jié)果中篩選。最終的示例代碼如下:
List<SearchedProcessInfo> searchResult=new List<SearchedProcessInfo>();
Process pro = null;
try
{
pro = new Process();
pro.StartInfo.FileName = "cmd.exe";
pro.StartInfo.UseShellExecute = false;
pro.StartInfo.RedirectStandardInput = true;
pro.StartInfo.RedirectStandardOutput = true;
pro.StartInfo.RedirectStandardError = true;
pro.StartInfo.CreateNoWindow = true;
pro.Start();
pro.StandardInput.WriteLine(String.IsNullOrWhiteSpace(txtPPort.Text)?"netstat -ano":String.Format("netstat -ano | findstr :{0}", txtPPort.Text));
pro.StandardInput.WriteLine("exit");
Regex reg = new Regex("\\s+", RegexOptions.Compiled);
string line = null;
while ((line = pro.StandardOutput.ReadLine()) != null)
{
line = line.Trim();
if (!line.StartsWith("TCP") && !line.StartsWith("UDP"))
{
continue;
}
Console.WriteLine(line);
line = line.Trim();
SearchedProcessInfo info = new SearchedProcessInfo();
line = reg.Replace(line, ",");
string[] arr = line.Split(',');
string soc = arr[1];
int pos = soc.LastIndexOf(':');
info.UsePort = soc.Substring(pos + 1);
info.Protocol = arr[0];
if (line.StartsWith("TCP"))
{
info.ProcessID = Convert.ToInt32(arr[4]);
info.Status = arr[3];
}
else
{
info.ProcessID = Convert.ToInt32(arr[3]);
}
try
{
Process pTmp = Process.GetProcessById(Convert.ToInt32(info.ProcessID));
info.ProcessName = pTmp != null ? pTmp.ProcessName : String.Empty;
}
catch(Exception exx)
{
info.ProcessName = String.Empty;
}
searchResult.Add(info);
}
...
}
catch (Exception exp)
{
MessageBox.Show(exp.Message);
}
finally
{
if(pro != null)
{
pro.Close();
}
}到此這篇關(guān)于C#獲取本地應用進程和端口號的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)C#獲取進程和端口號內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#使用System.Threading.Timer實現(xiàn)計時器的示例詳解
以往一般都是用 System.Timers.Timer 來做計時器,其實 System.Threading.Timer 也可以實現(xiàn)計時器功能,下面就跟隨小編一起來學習一下如何使用System.Threading.Timer實現(xiàn)計時器功能吧2024-01-01
C#如何實現(xiàn)監(jiān)控手機屏幕(附源碼下載)
這篇文章主要介紹了C#如何實現(xiàn)監(jiān)控手機屏幕(附源碼下載),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-10-10
C#操作本地文件及保存文件到數(shù)據(jù)庫的基本方法總結(jié)
C#使用System.IO中的文件操作方法在Windows系統(tǒng)中處理本地文件相當順手,這里我們還總結(jié)了在Oracle中保存文件的方法,嗯,接下來就來看看整理的C#操作本地文件及保存文件到數(shù)據(jù)庫的基本方法總結(jié)2016-05-05
淺析c#范型中的特殊關(guān)鍵字where & default
以下是對c#范型中的特殊關(guān)鍵字where和default進行了詳細的介紹,需要的朋友可以過來參考下2013-09-09

