首页 新闻 会员 周边 捐助

如何知道某个套接字关联的应用程序

0
悬赏园豆:40 [已解决问题] 解决于 2011-11-11 14:11

比如说我们知道现在有程序在本机4004端口对外发送TCP数据包,我们要如何才能知道是哪个程序在发包呢?

Hailoong的主页 Hailoong | 初学一级 | 园豆:164
提问于:2011-11-03 21:21
< >
分享
最佳答案
0

我简单地这样写了一下,不过肯定可以查出某个端口所占用的程序路径。

string port = "4004";

Process 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;
// 启动CMD
pro.Start();
// 运行端口检查命令
pro.StandardInput.WriteLine("netstat -ano");
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", StringComparison.OrdinalIgnoreCase))
{
line = reg.Replace(line, ",");

string[] arr = line.Split(',');
if (arr[1].EndsWith(":" + port))
{
int pId = int.Parse(arr[4]);
Console.WriteLine(port+"端口的进程ID:{0}",pId);

int pid = Int32.Parse(arr[4]);
Process pro80 = Process.GetProcessById(pid);
// 处理该进程
Console.WriteLine(port + "端口的程序名:" + Process.GetProcessById(pId).MainModule.FileName);
break;
}
}
}

pro.Close();
收获园豆:20
LCM | 大侠五级 |园豆:6876 | 2011-11-04 09:12
其他回答(1)
0

在命令提示符下执行:

netstat -ano

可以看到占用某个端口号的程序的PID,然后通过任务管理器看下是哪个程序就可以了

收获园豆:20
丁学 | 园豆:18730 (专家六级) | 2011-11-03 21:51

可是 我程序要怎么写,要调用什么样的API才能知道呢?

支持(0) 反对(0) Hailoong | 园豆:164 (初学一级) | 2011-11-03 21:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册