リモートホストの1つのポートのステータスをチェックする[クローズ]


158

リモートホストのポートステータスを確認できるコマンドラインが必要です。試しましたping xxx.xxx.xxx.xxx:161が、「ホスト」が認識されません。そのポートが開いていることがわかっているホストに対して同じコマンドを実行するまでは、「良い」答えだと思いました。これは、リモートポートのステータスを確認し、そのリモートポートを使用してコマンドを実行し、次にリモートポートチェックコマンドを再度実行してから、次のサーバーのそのポートを使用してコマンドを実行するWindowsのバッチファイル用です。 、 等々。私はどこを見てもpingでそれができると思っていましたが、pingにはさまざまなバージョンがあるはずです。これを実行しているサーバーにはそのオプションが表示されていないためです。

ちょっと笑うために、私はWebサイトからWebベースのリモートポートチェッカーを試しました-結果は、「問題のある」サーバーと正しいサーバーの両方に対して正しいものでした。ただし、500以上のサーバーIPが含まれるバッチ実行では使用できません。

簡単なことはありますか?私のPerlのスキルは非常に錆びています(使用するか失うか)。バッチ以外のWindowsベースの言語は知りません。Unixが私のスキルですが、これはWidows Server 2003から実行する必要があります。




1
この質問は締め切られたので、ここで
npocmaka


ps> tnc xxx.xxx.xxx.xxx -port 161
Moslem Shahsavan

回答:


151

nmapnetcatなどのポートスキャナーを探しているようです。どちらもWindows、Linux、Mac OS Xで利用できます。

たとえば、既知のIPでtelnetを確認します。

nmap -A 192.168.0.5/32 -p 23

たとえば、host.example.comで20から30までの開いているポートを探します。

nc -z host.example.com 20-30

これらはどちらもWindowsで使用できます。
グレン

1
nmapコマンドは、スペースなしで「-p23」を実際に実行する必要があります。nmapは、フラグのすぐ前にない各ユニットを個別のスキャン宛先として扱います
Brandon Lebedev

14
する必要がありますnc -zv host.example.com 20-30。それ以外の場合、出力はありません
Aryeh Beitz

1
オプション-zについては、ncLinux上では使用できません。
valentin_nasta 2017年

1
@valentin_nastaはい、おそらく、使用しているnetcatのバージョン(gnuまたはopenbsd)によって異なります。以下は、私のArch linuxシステムのnc(openbsdバージョン)のmanページからの関連する行です。このオプションを-lオプションと組み合わせて使用​​するとエラーになります
pgoetz

126

コマンドプロンプトでは、コマンドtelnetを使用できます。たとえば、ポート80でIP 192.168.10.1に接続するには、

telnet 192.168.10.1 80

Windows 7以降でTelnetを有効にするには、をクリックします。リンクされた記事から、コントロールパネル->プログラムと機能-> Windows機能-> telnetクライアントからtelnetを有効にするか、管理プロンプトでこれを実行します。

dism /online /Enable-Feature /FeatureName:TelnetClient

3
これは、Windowsデバイスにtelnetがインストールされている場合、最も簡単な方法です
shonky linux user

30
...そして、ウィンドウに追加するのに2秒かかります(私の場合は8.1)>コントロールパネル>プログラムの追加>ウィンドウ機能をオンにする
Chris Moutray 14

14
参考までに:ポートが開いていない場合:#####への接続...ホストへの接続を開くことができませんでした、ポート####で接続に失敗しました。そして、ポートが開いている場合は、Telnet(CTRL +]から「終了」)になります
blackstrype

27

スクリプト作成の目的で、curlコマンドがそれを実行できることがわかりました。次に例を示します。

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

curl場合によっては(コメントごとに)異なるエラーコードを返す可能性があるため、すべてのサービスで機能しない可能性があるため、次の条件を追加すると信頼できる方法で機能する可能性があります。

[ "$(curl -sm5 localhost:8080 >/dev/null; echo $?)" != 7 ] && echo OK || echo FAIL

注:-m5最大接続タイムアウトを5秒に設定するために追加されました。

ホストが有効かどうかも確認したい場合は、6終了コードも確認する必要があります。

$ curl -m5 foo:123; [ $? != 6 -a $? != 7 ] && echo OK || echo FAIL
curl: (6) Could not resolve host: foo
FAIL

返されたエラーコードのトラブルシューティングを行うには、次のコマンドを実行しますcurl host:port

$ curl localhost:80
curl: (7) Failed to connect to localhost port 80: Connection refused

man curl終了コードの完全なリストについては、以下を参照してください。


残念ながら、これは私には機能しません(少なくともOS Xのbashでは)。
Mike Atlas

1
カスタムサービス。FWIWそれは一種の働きをします:curl $IP:$PORT収量:(curl: (52) Empty reply from servercurl: (7) Failed to connect)ですが、のようにnc| grep Empty期待されるようなこれらの出力ステートメント(改行または即時出力の欠如について)はできません。あなたの行は終了コードに基づく条件付きであると思いますよね?私はエルキャップにいます。おそらく他のバージョンまたはOSでは、障害状態は-1ではなく終了します52か?
Mike Atlas、

そうだね。curl -s $IP:$PORT >/dev/null; if [ $? -eq 52 ]; then echo "Connected."; else echo "Fail."; fi
Mike Atlas

問題はWindowsで、たとえば/ dev / nullがないことは明らかでした
Arthur Tacca

@ArthurTacca Linux(WSL)用のWindowsサブシステムはいつでも使用できます。
ケノーブ

23

プレスWindows+ RタイプcmdEnter

コマンドプロンプトで

telnet "machine name/ip" "port number"

ポートが開いていない場合、次のメッセージが表示されます。

"Connecting To "machine name"...Could not open connection to the host, on port "port number":

それ以外の場合は、開いているポートに取り込まれます(空の画面が表示されます)


7
最新のWindowsシステムでは、Telnetはデフォルトではインストールされないことに注意してください。Windowsの機能の追加と削除コントロールパネルからインストールする必要があります。
グレッグ、

1
@グレッグまたはオンラインツールなど使用してtelnet-online.net
オンス

2
@oz true、内部サーバーのステータスをチェックしている場合を除く
Greg

Windows10で動作します
gaurav 2018年

19

ncコマンドを使用し、

nc -zv <hostname/ip> <port/port range>

For example,
nc -zv localhost 27017-27019
or
nc -zv localhost 27017

telnetコマンドを使用することもできます

telnet <ip/host> port


2

Windows版のHping(http://www.hping.org/)を探していると思います。

「インターフェースはping(8)unixコマンドに影響を受けていますが、hpingはICMPエコー要求を送信できるだけではありません。TCP、UDP、ICMP ...をサポートしています。」

また、経路に沿って(ファイアウォールなどにより)TCPポートがブロックされており、ICMPがブロックされていない可能性がある場所を確認する場合にも非常に役立ちます。


2

Bashでは、関連するソケットへのTCP接続を開くことができる疑似デバイスファイルを使用できます。構文は/dev/$tcp_udp/$host_ip/$portです。

Memcachedが実行されているかどうかをテストする簡単な例を次に示します。

</dev/tcp/localhost/11211 && echo Port open || echo Port closed

特定のWebサイトにアクセスできるかどうかを確認する別のテストを次に示します。

$ echo "HEAD / HTTP/1.0" > /dev/tcp/example.com/80 && echo Connection successful.
Connection successful.

詳細については、次を確認してください:Advanced Bash-Scripting Guide:Chapter 29. /devand/proc

関連:SuperUserでリモートシステムのポートが(Telnetなしで)到達可能かどうかをテストします。

その他の例については、「bashシェルでTCP / UDPソケットを開く方法(記事)」を参照してください。


1
わあ、これは天才です!これがbashだけで可能かどうかはわかりません。git bashだけをWindowsにインストールしていて、別のサービスをインストールしたくない私のような人にはとても便利です。
dotlashlu 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.