gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 15:41:58 27 4
gpt4 key购买 nike

预先感谢您的建议。

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

IE:客户端:20100 -> 互联网 -> 通过路由器/防火墙暴露的远程 SSH 服务器 -> 本地 Intranet -> Intranet Web POP3 服务器:110。

命令行:“putty -ssh -2 -P 22 -C -L 20100:intranteIP:110 -pw sshpassword sshusername@sshserver”

客户端将使用 putty 创建与 SSH 服务器的 SSH 连接,并在连接字符串中指定它希望将 Intranet POP3 服务器的端口 110 连接到客户端系统上的端口 20100。因此,客户端将能够打开一个到 localhost:20100 的邮件客户端,并通过 SSH 隧道与内部 POP3 服务器交互。以上是一般说明。我已经知道我正在尝试做的事情会毫无问题地工作,所以我不想就上述问题进行辩论。

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

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

private bool checkPort(int port)
{
try
{
//Create a socket on the current IPv4 address
Socket TestSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

// Create an IP end point
IPEndPoint localIP = new IPEndPoint(IPAddress.Parse("127.0.0.1"), port);

// Bind that port
TestSocket.Bind(localIP);

// Cleanup
TestSocket.Close();

return false;
}
catch (Exception e)
{
// Exception occurred. Port is already bound.
return true;
}
}

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

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

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

最佳答案

Here's答案如何检查本地端口是否空闲。

我会推荐这种方式:

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;
}

关于networking - C# 检测本地主机端口使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3059260/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com