特定のポートへのPing


671

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

マシンの特定のポートにpingを実行できますか?もしそうであれば、例を提供できますか?

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


1
窓のためにこの質問を確認することができます
npocmaka

回答:


720

Pingはポートの概念を持たないICMPを使用しているため、ポートにpingすることはできません。ポートは、TCPやUDPなどのトランスポート層プロトコルに属します。ただし、nmapを使用してポートが開いているかどうかを確認できます。

nmap -p 80 example.com

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


15
-PN特定のポートをテストする前にnmapが通常行うホスト検出をスキップするために追加することができます。
flokra

27
一部の人々の手間を省くために:リンク(またはgoogle nmap windows)からWindowsにnmap / can /をインストールできますが、VPNでは機能しません。PaPingは、アドレスの範囲をスキャンできないようでした。以下のPythonスクリプトを投稿しました。このスクリプトは、VPNを介して動作し、アドレス範囲のポート範囲をスキャンします。

23
その他の場合:nmapはMac OS Xには存在せず、homebrew brew install nmapまたはMacPorts 経由でnmapをインストールできます。
ハイウェイオブライフ

17
npingはnmapよりもこのタスクに適しています。npingはnmapディストリビューションの一部です。
CMCDragonkai 14年

6
Mac OSXには、ポートスキャナータブがある「ネットワークユーティリティ」があります
Shanimal

192

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

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

セッションを閉じるには、Ctrl+ を押します]


23
netcatうまく機能し、冗長性も低くなります。
ペトリュス

3
ポートがTCPポートである場合、Telnetはこれに対してうまく機能します。
ファルコンモモット

6
netcatはUDPでも動作します(nc -u)
ツベトミールディミトロフ

1
Macユーザー向け- netcat現在、MacOS HighSierraが組み込まれています。HomeBrewからTelnetをインストールできますbrew install telnet
sandiejat

98
$ nc -vz google.com 80
Connection to google.com 80 port [tcp/http] succeeded!

10
timelike inで使用するとtime nc -vz www.example.com 80、RTTのようなものもあります。
xebeche

3
インストールせずにAmazon EC2インスタンスで動作する唯一のソリューション。
マサドウ

-zとは何ですか?rhel7のncat 6.40には不明なオプションがあります
Tagar

@TagarはUbuntuバージョンのヘルプによると、-zはゼロI / Oモードであり、スキャンに使用されます。
ベンモルデカイ

88

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

Test-NetConnection <host> -port <port>

例:Test-NetConnection example.com -port 80

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


80

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

1
または、papingの代わりに、はるかに長くなっており、ポートだけでなく一部のサービスのpingをサポートするcrypingを使用することもできます。

これを使用して、任意のポートまたは80のpingを実行できますか?
ルークププレット

@LukePuplettは、例の80を変更するだけです。paping.exe <ホスト名/ IP> -p <ポート番号> -c <試行回数>を入力して、それを実行します
デヴィッド・コスタ

これはうまく機能します。-c *定数papinging(?)に使用します。
-user2924019


26

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

$ curl host:port

例えば:

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

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


3
curlCentOSにはデフォルトで存在するため、これを気に入っているので、何もインストールする必要はありません。
-bdemarest

カールはラズベリーパイ(ラスピアンのディストリビューション)で働いていた
ジョンM

1
これは、最もエレガントで普遍的なソリューションです。私はそれをきちんとしたonelinerにするためにそれをわずかに微調整しました:IP="<ip>" ; PORT="<port>" ; curl -s "$IP:$PORT" > /dev/null && echo "Success connecting to $IP on port $PORT." || echo "Failed to connect to $IP on port $PORT."
レフティGバログ

21

PsPingを使用した簡単なソリューションを見つけました。

psping 192.168.2.2:5000

Windows Sysinternalsの一部です。

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


1
また、PsPingはMicrosoft SysInternalチームから提供されているため、他のMicrosoft指向の人々とやり取りする場合は、もう少し合法であると見なされる可能性があります。(非常に古い
PortQry

PSPingには、Test-NetConnectionが実行できないカスタムポートを使用するときに遅延測定を提供するという利点があります(ICMP応答時間のみを報告します)。
ジェフマイルズ

14

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

hping example.com -S -V -p 80

1
hping(私のubuntuのhping3)は優れています。pingのように定期的にプローブを繰り返しますが、ここで提案されている多くのツールとは異なります。また、パケットが通過するかどうか、およびポートが開いているかどうかもテストします。開いている場合はflags=SASYN ACKを取得し、閉じている場合はflags=SRSYN RST を取得します。-Vここでフラグはおそらく必要ないことに注意してください。ただし、hpingを実行するにはsudo / rootが必要です。
mc0e

優れた!他の多くの回答とは異なり、これはping停止するまでRTT遅延やpingを報告します。
エドワードアンダーソン

11

Pingは非常に具体的ですが、ポートが開いているかどうかを確認し、Windowsボックスを実行している場合、PortQryはあなたの友人です。

接続の問題についてドメインコントローラーをテストするためだけに使用しましたが、それはそれでうまくいきました。


1
PortQryは、元々1999/2000にMS Exchangeチームによってリリースされましたが、MSの最近のバージョンは、リモートポートを照会する機能(健康と安全性)を削除することにより、それを阻止しているようです。
ルークププレット

8

以下は、手早くて汚い.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();
        }
    }

5

番号。

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


4

Nagios check_tcpプローブがあなたが望むことをすることは確かです。これらはここにあり、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

これは、クライアントマシンがWindows VistaまたはWindows 7であるVPNで機能する唯一のソリューションです。リストされている他の回答は機能しないだけです。この回答は以前に削除されたものであり、削除されるべきではありません。これは、実際の一般的なケースに対する唯一の解決策です。削除するためのアピールがないため、他の回答を使用しようとしていたことに対するフラストレーションを他の人に保存するために、再投稿しています。

以下の例では、Windows 7で実行されているクライアントでVNC /ポート5900が開いているVPN上のIPを見つけます。

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で十分でした。


2
Win 7 XP Proクライアント/ Win Server 2008 R2で完全に動作し、閉じたポートを診断します。(30秒のタイムアウトしきい値を使用する必要がありましたが、特定のサーバー環境の問題ではなく、このコードの問題である可能性があります)
デビッドゼメンス


1

Bashシェルでは、TCP 疑似デバイスファイルを使用できます。例:

</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

0

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


ZenmapはWindowsでも使用できます。
ニックヤング
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.