web-dev-qa-db-ja.com

特定のポートにpingする

ここで簡単な健全性チェックを行ってください。

マシンの特定のポートにpingできますか。その場合、例を提供できますか?

ping ip address portNumのようなものを探しています。

701
Davie

Pingは [〜#〜] icmp [〜#〜] を使用しているため、ポートにpingすることはできません。これにはポートの概念がありません。ポートは トランスポートレイヤープロトコル に属しますTCPおよびUDPのようです。ただし、 nmap を使用して、ポートが開いているかどうかを確認できます。

nmap -p 80 example.com

編集:flokraが述べたように、nmapは単なるping-for-ports-thingyだけではありません。それはセキュリティ監査人とハッカーの親友であり、たくさんのクールなオプションが付属しています。すべての可能なフラグについてドキュメントを確認してください。

741
sfussenegger

特定のポートへのTelnetセッションを開きます。次に例を示します。

# telnet google.com 80
Trying 74.125.226.48...
Connected to google.com.
Escape character is '^]'.

セッションを閉じるには、 Ctrl+]

197
Pipo
$ nc -vz google.com 80
Connection to google.com 80 port [tcp/http] succeeded!
106
Rahul Patil

Powershell v4以降のWindowsインストールを使用している場合は、test-netconnection powershellモジュールを使用できます。

Test-NetConnection <Host> -port <port>

例:Test-NetConnection example.com -port 80

このコマンドレットには、エイリアスtncもあります。例tnc example.com -port 80

102
Kjetil Limkjær

PaPingを使用できます。

http://code.google.com/p/paping

C:\>paping.exe www.google.com -p 80 -c 4
paping v1.5.1 - Copyright (c) 2010 Mike Lovell

Connecting to www.l.google.com [209.85.225.147] on TCP 80:

Connected to 209.85.225.147: time=24.00ms protocol=TCP port=80
Connected to 209.85.225.147: time=25.00ms protocol=TCP port=80
Connected to 209.85.225.147: time=24.00ms protocol=TCP port=80
Connected to 209.85.225.147: time=24.00ms protocol=TCP port=80

Connection statistics:
        Attempted = 4, Connected = 4, Failed = 0 (0.00%)
Approximate connection times:
        Minimum = 24.00ms, Maximum = 25.00ms, Average = 24.25ms
80
CodhubIV

いいえ、できません。pingICMPプロトコルを使用するため、ポートの概念。

26
Martin B

次のようなcurlコマンドを試してください。

$ curl Host:port

例えば:

$ curl -s localhost:80 >/dev/null && echo Success. || echo Fail.
Success.

上記のコマンドは、ゼロ以外の終了ステータスコードでFailを返します。空または不正な形式の応答などの特定のケース(man curl)、特定の終了コードを正常に処理する必要がある場合があります。詳細については、こちら post を確認してください。

26
kenorb

私はPsPingを使用したより簡単な解決策を見つけました:

psping 192.168.2.2:5000

Windows Sysinternals の一部です。

PsPingはPing機能を実装しています。TCP ping、遅延、帯域幅測定。

22
Ayan Mullick

Linuxでは hping を使用できますが、ICMPではなくTCPを使用します。

hping example.com -S -V -p 80
15
c4f4t0r

Pingは非常に具体的ですが、ポートが開いているかどうかを確認し、Windowsボックスを実行している場合は、 PortQry が役立ちます。

私は、接続の問題についてドメインコントローラーをテストするためにのみ使用しましたが、それは問題なく動作したので、動作するはずです。

11
Rob

以下は、素早く汚れた.NETコンソールアプリです。

    static void Main(string[] args)
    {
        string addressArgument = null, portArgument = null;

        System.Net.Sockets.TcpClient tcpClient = null;

        try
        {
            addressArgument = args[0];
            portArgument = args[1];

            int portNumber;
            portNumber = Int32.Parse(portArgument);

            tcpClient = new System.Net.Sockets.TcpClient();
            tcpClient.ReceiveTimeout = tcpClient.SendTimeout = 2000;


            IPAddress address;
            if (IPAddress.TryParse(args[0], out address))
            {
                var endPoint = new System.Net.IPEndPoint(address, portNumber);
                tcpClient.Connect(endPoint);
            }
            else
            {
                tcpClient.Connect(addressArgument, portNumber);
            }

            Console.WriteLine("Port {0} is listening.", portArgument);
        }
        catch (Exception e)
        {
            if (e is SocketException || e is TimeoutException)
            {
                Console.WriteLine("Not listening on port {0}.", portArgument);
            }
            else
            {
                Console.WriteLine("Usage:");
                Console.WriteLine("    portquery [Host|ip] [port]");
            }
        }
        finally
        {
            if (tcpClient != null)
                tcpClient.Close();
        }
    }
8
Luke Puplett

番号。

ポートで実行されているサービスがpingを理解するという保証はありません。 TCPまたはUDP?)pingを実行するポートの「フレーバー」の質問も開きます。pingの「プロトコル」はどちらも使用しないため(pingは [〜 #〜] icmp [〜#〜] )、それはあまり意味がありません。

5
unwind

これはクライアントマシンがWindows VistaまたはWindows 7であるVPNで機能する唯一のソリューションです。他のリストされている回答は単に機能しないためです。この回答は以前に削除されており、実際の一般的なケースに対する唯一のソリューションであるため、削除すべきではありませんでした。削除に利用できる申し立てがないため、他の回答を使用しようとしたときの不満を他のユーザーに知らせるために、再投稿しています。

次の例では、VNC /ポート5900が開いているVPN上のどのIPが、クライアントがWindows 7で実行されているかを確認します。

与えられたIPとポートのリストをスキャンする短いPython(v2.6.6)スクリプト:

from socket import *

fTimeOutSec = 5.0
sNetworkAddress = '192.168.1'
aiHostAddresses = range(1,255)
aiPorts = [5900]

setdefaulttimeout(fTimeOutSec)
print "Starting Scan..."
for h in aiHostAddresses:
    for p in aiPorts:
        s = socket(AF_INET, SOCK_STREAM)
        address = ('%s.%d' % (sNetworkAddress, h))
        result = s.connect_ex((address,p))
        if ( 0 == result ):
            print "%s:%d - OPEN" % (address,p)
        Elif ( 10035 == result ):
            #do nothing, was a timeout, probably Host doesn't exist
            pass
        else:
            print "%s:%d - closed (%d)" % (address,p,result)

        s.close()
print "Scan Completed."

結果は次のようになりました。

Starting Scan...
192.168.1.1:5900 - closed (10061)
192.168.1.7:5900 - closed (10061)
192.168.1.170:5900 - OPEN
192.168.1.170:5900 - closed (10061)
Scan Completed.

上部の4つの変数は、必要なタイムアウト、ネットワーク、ホスト、およびポートに適切になるように変更する必要があります。私のVPNでの5.0秒は、一貫して適切に機能するのに十分であるように思われ、(常に)正確な結果を提供しなかった。私のローカルネットワークでは、0.5で十分です。

4
Mark Ribau

Nagiosのcheck_tcpプローブがあなたの望みどおりの動作をすることは間違いありません。それらは here で見つかり、Nagiosコンテキストで使用するように設計されていますが、すべてスタンドアロンプ​​ログラムです。

$ ./check_tcp -H Host -p 22
TCP OK - 0.010 second response time on port 22|time=0.009946s;0.000000;0.000000;0.000000;10.000000
4
fvu

Bashシェルでは、TCP pseudo-device file を使用できます。例:

</dev/tcp/serverfault.com/80 && echo Port open || echo Port closed

1秒のタイムアウトを実装するバージョンは次のとおりです。

timeout 1 bash -c "</dev/tcp/serverfault.com/81" && echo Port open || echo Port closed
2
kenorb

Tcpingと呼ばれる、そのためのlightweigthツールがあります。 http://www.linuxco.de/tcping/tcping.html

2
Craig

私はグーグルで「特定のポートにpingを実行」してラッキーだと感じています: http://philwilks.blogspot.com/2008/01/ping-specific-port.html です。特定のポート

nmapを使用することもできます:nmap -p <port> <Host>

0
knittl

* nixオペレーティングシステムを実行している場合、「zenmap」をインストールして使用してみてください。これはnmapのGUIであり、新しいユーザーにとって非常に役立ついくつかの有用なスキャンプロファイルがあります。

0
user604952