首页 不用telnet,powershell快速ping端口
文章
取消

不用telnet,powershell快速ping端口

在Windows中,测试一个目标地址的端口是否通断,常用办法是使用telnet。

但是这工具的问题在于不随系统安装,且对端目标端口失败的时候,超时时间很长

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#找到一个大佬分享的方法

$address = "192.168.1.10"

$port = 80

$tcp = new-object Net.Sockets.TcpClient

$tcp.Connect($address,$port)

If ($? -ne "True")

   {Write-Host $address"的端口"$port"连接失败"}

Else {$tcp.Close()}
#原作者
#https://blog.51cto.com/beanxyz/1784596

这里有个问题就是,如果连接失败,超时时间特别长,而且会有红色报错,根据关键字Net.Sockets.TcpClient继续查找资料

去官方网站看看这个方法 https://docs.microsoft.com/en-us/dotnet/api/system.net.sockets.tcpclient?view=netframework-4.8

这里介绍的很详细,不过主要问题是可以使用的方法太多,不知道用哪一个。

在Stackoverflow找到最合适的一个例子 这里

1
2
3
4
5
6
7
8
9
10
11
#原C#逻辑

bool IsPortOpen(string host, int port, TimeSpan timeout)
{
    try
    {
        using(var client = new TcpClient())
        {
            var result = client.BeginConnect(host, port, null, null);
            var success = result.AsyncWaitHandle.WaitOne(timeout);
###下文省略

翻译一下,变成我们PowerShell的写法,问题解决,还可以设置超时时间,速度非常快

1
2
3
4
$tcp = new-object Net.Sockets.TcpClient
$result = $tcp.BeginConnect("baidu.com", "80", $null,$null)
$result.AsyncWaitHandle.WaitOne(200)
$tcp.Close()
本文由作者按照 CC BY 4.0 进行授权

Ad时间同步,需要配置多时间源的环境

如何编写完全无法维护的powershell脚本