[PS1] Powershell で TCPing もどき

2014年12月17日

 Ping だと遮断されていたり、遮断されていなくても当該ポートへ到達できるかどうかというのはわからなかったりします。

 そういうとき、TCPing というツールがあるようで、これを使うとTCPのポートが開いているかどうかを確認できます。
 http://www.elifulkerson.com/projects/tcping.php
 Microsoft 純正だと、PortQry というツールがあるらしいです。
 http://support.microsoft.com/kb/310099/ja

 ただ、外部ツールのインストールは難しい… という場合が多々あります。その場合には、Powershell を使うと似たようなことができます。たとえば以下のような感じ。

# ipv4,ipv6 共通処理
Function executeTCPing($tcp) {

    $sw = New-Object System.Diagnostics.Stopwatch

    $sw.Start()
    try {
        $tcp.Connect($target, $port)
        $sw.Stop()
        Write-Output ("{0} port={1} ({2}) への接続: 時間 ={3:0.00}ms" -f $target, $port, $tcp.Client.RemoteEndPoint, ($sw.Elapsed).TotalMilliseconds)

    } catch {
        $sw.Stop()
        Write-Output ("{0} port={1} への接続: 応答が確認できません" -f $target, $port, ($sw.Elapsed).TotalMilliseconds)

    } finally {
        $tcp.Close()
        $tcp.Dispose()   # エラーが出る場合は無くても良い

    }
}

# ipv4 用
Function TCPing($target, $port) {
    $tcp = New-Object System.Net.Sockets.TcpClient
    executeTCPing $tcp
}

# ipv6 用
Function TCPing6($target, $port) {
    $ipv6 = [System.Net.Sockets.AddressFamily]::InterNetworkV6 
    $tcp = New-Object System.Net.Sockets.TcpClient $ipv6
    executeTCPing $tcp
}

 使い方はこんな感じ

PS > TCPing localhost 445
localhost port=445 (127.0.0.1:445) への接続: 時間 =0.81ms

PS > TCPing localhost 80
localhost port=80 への接続: 応答が確認できません

PS > TCPing6 localhost 445
localhost port=445 ([::1]:445) への接続: 時間 =0.91ms





カテゴリー: OS, PowerShell, Windows

Follow comments via the RSS Feed | Leave a comment | Trackback URL

コメントを投稿する

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


«   »
 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org