gpt4 book ai didi

.net - 测试 TCP 端口是否在未连接的情况下打开

转载 作者:行者123 更新时间:2023-12-04 16:03:36 25 4
gpt4 key购买 nike

我被要求转换一个使用 nc -z 的 bash 脚本, 到 PowerShell。

This site告诉我 nc -z测试端口是否在“不连接的情况下”打开。有什么方法可以使用 .Net 做到这一点吗?

附加信息

通常要测试端口是否打开,我会使用 .Net 的 TcpClient创建连接;如果它连接,我也会报告所有内容。 MVE如下:

$isConnected = $false
$client = New-Object -TypeName 'System.Net.Sockets.TcpClient'
try {
$client.Connect($host, $port)
$isConnected = $client.Connected
$client.GetStream().Close(); # handle bug in .net 1.1
$client.Close();
} catch {
$isConnected = $false
} finally {
if ($client.Dispose) {$client.Dispose()} # dispose method not available in all versions, so check before calling
}

然而,虽然它不发送数据,但它确实连接了。

可能是 nc -z 的描述具有误导性/它只是意味着不发送数据......我无法以任何方式找到确认。

侧节点

根据最近的一些回复,我会指出 Test-NetConnection基本上使用相同的 TcpClient方法如上所述,“连接”也是如此。此外,它在 PS2 中不可用/仅在 Windows 8 及更高版本的 PSv4 中起作用。也就是说,对于没有本文中提到的独特要求的任何人来说,值得一提。

最佳答案

使用 测试网连接

Test-NetConnection -ComputerName $host -Port $port

输出如下所示:
ComputerName     : [computername]
RemoteAddress : [remoteipaddress]
RemotePort : 80
InterfaceAlias : Ethernet 2
SourceAddress : [sourceipaddress]
TcpTestSucceeded : True

Test-NetConnection Documentation

使用 Tcp 客户端类 (.Net):
 New-Object System.Net.Sockets.TcpClient($ip, $port)

输出:
Client              : System.Net.Sockets.Socket
Available : 0
Connected : True
ExclusiveAddressUse : False
ReceiveBufferSize : 65536
SendBufferSize : 64512
ReceiveTimeout : 0
SendTimeout : 0
LingerState : System.Net.Sockets.LingerOption
NoDelay : False

Tcp Client Documentation

关于.net - 测试 TCP 端口是否在未连接的情况下打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58320119/

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