Networking C#检测本地主机端口使用情况

Networking C#检测本地主机端口使用情况,networking,network-programming,c#-4.0,network-protocols,Networking,Network Programming,C# 4.0,Network Protocols,首先,感谢您的建议 我目前正在开发一个程序,该程序使用Putty创建与服务器的SSH连接,该服务器使用本地端口转发,使运行我的软件的客户端能够通过本地主机访问SSH服务器后面的服务 IE:client:20100->Internet->通过路由器/防火墙暴露的远程SSH服务器->本地Intranet->Intranet Web POP3服务器:110 命令行:“putty-ssh-2-p22-C-l20100:intranteIP:110-pw sshpasswordsshusername@ss

首先,感谢您的建议

我目前正在开发一个程序,该程序使用Putty创建与服务器的SSH连接,该服务器使用本地端口转发,使运行我的软件的客户端能够通过本地主机访问SSH服务器后面的服务

IE:client:20100->Internet->通过路由器/防火墙暴露的远程SSH服务器->本地Intranet->Intranet Web POP3服务器:110

命令行:“putty-ssh-2-p22-C-l20100:intranteIP:110-pw sshpasswordsshusername@sshserver"

客户端将使用putty创建一个SSH连接,SSH服务器在连接字符串中指定要将内部网POP3服务器的端口110连接到客户端系统上的端口20100。因此,客户端将能够打开一个到localhost:20100的邮件客户端,并通过SSH隧道与内部POP3服务器交互。以上是一般说明。我已经知道我正在努力做的事情将不会有任何问题,所以我不期待就上述问题进行辩论

问题是……我如何确保localhost上的本地端口(我不能使用动态端口,所以它必须是静态的)没有被任何其他应用程序使用或侦听

我目前正在我的C#应用程序中执行以下代码:

我当前从for循环中的特定端口开始调用此函数,以在第一个可用端口处获取“false”返回。我尝试的第一个端口实际上是由uTorrent监听的。上面的代码没有捕捉到这一点,我的连接失败

确保端口真正免费的最佳方法是什么?我知道在我测试期间/之后,其他程序可能会占用端口。我只需要找到一些东西,确保在执行测试时,它当前根本没有被使用

如果有一种方法可以在测试过程中真正保留本地主机端口,我很想听听。

如何检查本地端口是否可用的答案

我建议这样做:

bool IsBusy(int port)
{
    IPGlobalProperties ipGP = IPGlobalProperties.GetIPGlobalProperties();
    IPEndPoint[] endpoints = ipGP.GetActiveTcpListeners();
    if ( endpoints == null || endpoints.Length == 0 ) return false;
    for(int i = 0; i < endpoints.Length; i++)
        if ( endpoints[i].Port == port )
            return true;
    return false;          
}
bool正忙(int端口)
{
IPGlobalProperties ipGP=IPGlobalProperties.GetIPGlobalProperties();
IPEndPoint[]端点=ipGP.GetActiveTcpListeners();
if(endpoints==null | | endpoints.Length==0)返回false;
for(int i=0;i
如何检查本地端口是否可用的答案

我建议这样做:

bool IsBusy(int port)
{
    IPGlobalProperties ipGP = IPGlobalProperties.GetIPGlobalProperties();
    IPEndPoint[] endpoints = ipGP.GetActiveTcpListeners();
    if ( endpoints == null || endpoints.Length == 0 ) return false;
    for(int i = 0; i < endpoints.Length; i++)
        if ( endpoints[i].Port == port )
            return true;
    return false;          
}
bool正忙(int端口)
{
IPGlobalProperties ipGP=IPGlobalProperties.GetIPGlobalProperties();
IPEndPoint[]端点=ipGP.GetActiveTcpListeners();
if(endpoints==null | | endpoints.Length==0)返回false;
for(int i=0;i
我想知道我是否应该从Putty开始做这件事,或者使用SharpSSH。还有其他关于c#/vb的好的SSH源代码吗?我想知道我是否应该从Putty开始,使用SharpSSH。还有其他适合c#/vb的SSH源代码吗?不幸的是,该站点上的所有三个示例都未能在起始端口上检测到uTorrent侦听。真奇怪。还有其他想法吗?你能显示命令“netstat-anbptcp”的输出吗。我对uTorrent.exe的行很感兴趣,这里有一个使用LINQ编写的简短方法。IPGlobalProperties ipGp=IPGlobalProperties.GetIPGlobalProperties();IPEndPoint[]端点=ipGp.GetActiveTcpListeners();if(endpoints.Length==0){return false;}返回endpoints.Any(t=>t.Port==Port);如何获取处于“已建立”状态的端口不幸的是,该站点上的所有三个示例都未能检测到启动端口上的自动当前侦听。真奇怪。还有其他想法吗?你能显示命令“netstat-anbptcp”的输出吗。我对uTorrent.exe的行很感兴趣,这里有一个使用LINQ编写的简短方法。IPGlobalProperties ipGp=IPGlobalProperties.GetIPGlobalProperties();IPEndPoint[]端点=ipGp.GetActiveTcpListeners();if(endpoints.Length==0){return false;}返回endpoints.Any(t=>t.Port==Port);如何获取处于“已建立”状态的端口