Joh*_*van 6 .net powershell tcpclient powershell-2.0
我被要求将使用的bash脚本转换nc -z为PowerShell。
该站点告诉我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
}
Run Code Online (Sandbox Code Playgroud)
但是,尽管不发送任何数据,但它确实可以连接。
可能是由于的描述具有nc -z误导性/只是意味着没有发送数据...我无法以任何方式找到确认。
使用测试网络连接
Test-NetConnection -ComputerName $host -Port $port
Run Code Online (Sandbox Code Playgroud)
输出看起来像这样:
ComputerName : [computername]
RemoteAddress : [remoteipaddress]
RemotePort : 80
InterfaceAlias : Ethernet 2
SourceAddress : [sourceipaddress]
TcpTestSucceeded : True
Run Code Online (Sandbox Code Playgroud)
使用 Tcp 客户端类 (.Net):
New-Object System.Net.Sockets.TcpClient($ip, $port)
Run Code Online (Sandbox Code Playgroud)
输出:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |