リモートホストのポートステータスを確認できるコマンドラインが必要です。私はping xxx.xxx.xxx.xxx:161
を試しましたが、それは "Host"を認識しません。そのポートが開いていることがわかっているホストに対して同じコマンドを実行するまで、私はそれが「良い」答えだと思いました。これは、リモートポートのステータスをチェックし、そのリモートポートを使用して情報を取得するコマンドを実行し、次にリモートポートチェックコマンドを実行してから、次のサーバーのそのポートを使用して情報を取得するコマンドです。 、 等々。私はあちこちを見て、pingがそれを実行するかもしれないと考えました、しかしいろいろなバージョンのpingがあるに違いありません、私がこれをしているサーバーがそのオプションを示さないと思います。
ちょっと困ったことに、私はウェブサイトからウェブベースのリモートポートチェッカーを試してみました - そして結果は "問題のある"サーバーと正しいサーバーの両方に対して正しいものでした。ただし、500を超えるサーバーIPを使用してバッチ実行することはできません。
私にできることは簡単ですか?私のPerlのスキルは非常に錆びています(それを使うか失くします)、バッチ以外の他のWindowsベースの言語を知りません。 Unixが私のスキルですが、これはWidows Server 2003から実行する必要があります。
コマンドプロンプトでは、telnetコマンドを使用できます。たとえば、ポート80を使用してIP 192.168.10.1に接続するには、
telnet 192.168.10.1 80
Windows 7以降で telnetを有効にするには、 をクリックします。リンクされた記事から、コントロールパネル - >プログラムと機能 - > windows features - > telnetクライアントを通してtelnetを有効にするか、あるいは単にadminプロンプトでこれを実行してください。
dism /online /Enable-Feature /FeatureName:TelnetClient
スクリプトを作成する目的で、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
注:最大接続タイムアウトを5秒に設定するために-m5
を追加しました。
Hostが有効かどうかも確認したい場合は、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
を参照してください。
押す Windows + R cmd
と入力し、 Enter
コマンドプロンプト内
telnet "machine name/ip" "port number"
ポートが開いていない場合、このメッセージが表示されます。
"Connecting To "machine name"...Could not open connection to the Host, on port "port number":
さもなければあなたは開かれた港に連れて行かれるでしょう(空の画面が表示されます)
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
ncまたは 'netcat'にもスキャンモードがありますが、これは役に立ちます。
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.
詳細については、 を参照してください。高度なBashスクリプトガイド:第29章/dev
と/proc
。
関連: リモートシステム上のポートが(telnetなしで)到達可能かどうかをテストします 。
その他の例については、 bashシェルでTCP/UDPソケットを開く方法 (記事)を参照してください。
Windows版のHping( http://www.hping.org/ )を探していると思います。
「インターフェースはping(8)unixコマンドに影響を受けていますが、hpingはICMPエコー要求を送信できるだけではありません。TCP、UDP、ICMPをサポートしています...」
ICMPがそうではないかもしれないTCPポートが(ファイアウォールのように)ブロックされている経路上のどこを見たいのであれば、それは非常に役に立ちます。