サーバーがTelnetなしでCLIでリッスンしていることを確認してください。

サーバーがTelnetなしでCLIでリッスンしていることを確認してください。

一般に、アプリケーションサーバーが稼働していることを確認する簡単な診断方法は、ホストとポートでTelnetを再実行することです。

telnet somehost port

問題は、macOSなどの一部のオペレーティングシステムでは、デフォルトでこのツールを使用できないことです。それで、Telnetをインストールする方法を学ぶのではなく、特別な権限を必要とせずにサーバーがリッスンしていることを確認するための別のCLI方法があるかどうか疑問に思います。

明確にするために、私はすべてのシステムでTelnetと同じくらい速く動作し、わずか5秒かかるソリューションを探しています。ソリューションを作成しても、実際に高速アクセス方法が提供されるわけではありません。

答え1

特定のポートで何かがリッスンしているかどうかを確認する方法はいくつかあります。

そしてwget/curl

wget your_IP:port

そしてnetstat

netstat -an|grep LISTEN|grep :port

そしてlsof

lsof -i :port

そしてnetcat

nc -vz your_IP port

/procファイルシステムの使用(Linuxでのみ動作可能)(ここで説明されています)

そしてss

ss|grep LISTEN|grep :port

そしてnmap

nmap -sS -O -pport your_IP

編集1また、(ほぼ)すべてのssh、http、ftpクライアントが動作しますが、時にはポートがファイアウォールによって閉じられているか利用できないかを理解することは困難です。
編集2発見中このQ&Aタスクを使用しcatて完了するecho方法の例:

true &>/dev/null </dev/tcp/127.0.0.1/$PORT && echo open || echo closed

または、exec次のコマンドを使用します(エラーポートが開いていない場合)。

exec 6<>/dev/tcp/your_IP/port

私はawk仕事をする方法を見つけました(オリジナルここ):

awk -v port=your_port 'function hextodec(str,ret,n,i,k,c){
    ret = 0
    n = length(str)
    for (i = 1; i <= n; i++) {
        c = tolower(substr(str, i, 1))
        k = index("123456789abcdef", c)
        ret = ret * 16 + k
    }
    return ret
}
function getIP(str,ret){
    ret=hextodec(substr(str,index(str,":")-2,2)); 
    for (i=5; i>0; i-=2) {
        ret = ret"."hextodec(substr(str,i,2))
    }
    ret = ret":"hextodec(substr(str,index(str,":")+1,4))
    return ret
} 
NR > 1 {{local=getIP($2);remote=getIP($3) }{ if (remote ~ "0:0" && local ~ ":"port) print local}}' /proc/net/tcp 

編集3コメントで述べたように、いくつかのアプローチ、特に/devファイルシステムベースのアプローチはあなたの環境で機能するかもしれません。

編集4私が見つけたSolarisの場合優れたQ&Apfiles開いているポートを取得するために使用されます。

答え2

私はこの問題を解決するために書いたPerlスクリプト:

#!/usr/bin/perl -w

# tries to connect to the given IP and port (tcp)

use strict;
use IO::Socket;

my $desthost = shift or die "Usage: $0 host port\n";
my $destport = shift or die "Usage: $0 host port\n";

gethostbyname($desthost) || die "Invalid host given\n";

my $handle = IO::Socket::INET->new(
        PeerAddr => $desthost,
        PeerPort => $destport,
        Proto    => 'tcp')
    or die "can't connect to $desthost:$destport: $!\n";
close $handle;
print "Success!\n"

Telnet接続をシミュレートし(ハードコーディングを参照'tcp')、ホスト名とポートを入力し、そのポートへのリモート側の応答(受信)に基づいて成功または失敗を報告します。

答え3

telnet実際には、TCPソケットを開く以上のことを行い、場合によっては開いている接続を介してTELNETプロトコルを使用しようとするこのツールを使用しないことをお勧めします。 TCPソケットを開くために使用できる多くのツールがあり、特にすべてのクライアントツールがあります。その他FTPクライアントなどのTCPベースのプロトコル。繰り返しますが、telnetこれらは最終的に接続が開かれた後にそれぞれのプロトコルを話そうとするかもしれません。

TCP接続を確立し、接続を介してプロトコルを使用せずにすぐに接続を閉じる非常に基本的な作業のために、低レベルのツールを見てください。 ncその一つです。別の回答にお任せします。しかし他の人はみんな違うUCSPI-TCPおよびUCSPI-SSL職業をお持ちのお客様ホロ必要なものを正確に実行してください。接続を開きます。プログラムチェーンをロードして成功を報告する以外は何もしないでください。

  • tcp-socket-connect存在するスナックバッグ:
    tcp-socket-connect "${HOST}" "${PORT}" \
         sh -c 'echo ${TCPREMOTEIP}:${TCPREMOTEPORT} に正常に接続されました。 '
    IPv4とIPv6の両方に適用されます。
  • これtcpclient存在するdjbwaresパッケージ、Daniel J. Bernsteinのオリジナルを少し修正したバージョンです。tcpclient:
    tcpclient -H -R -l 0 "${HOST}" "${PORT}" \
         sh -c 'echo ${TCPREMOTEIP}:${TCPREMOTEPORT} に正常に接続されました。 '
    IPv6 もサポートするいくつかのパッチバージョンがありますが、これは IPv4 でのみ機能します。
  • ローランベルコs6-tcpclient~からs6ネットワーク:
    s6-tcpclient -N -H -R -l 0 "${HOST}" "${PORT}" \
         sh -c 'echo ${TCPREMOTEIP}:${TCPREMOTEPORT} に正常に接続されました。 '
    IPv4とIPv6の両方に適用されます。
  • ウィリアム・バックスターsslclient:
    sslclient -H -R -l 0 "${HOST}" "${PORT}" \
         sh -c 'echo ${SSLREMOTEIP}:${SSLREMOTEPORT} に正常に接続されました。 '
    これはSSL / TLSもネゴシエートします。 Felix von LeitnerはIPv6もサポートするパッチバージョンをリリースしましたが、IPv4のみをサポートしています。

詳しくはマニュアルページをご覧ください。ここで使用されているオプションは、接続テストに必要でないエンドポイントに関するさまざまな情報の検索を無効にします。入力ホストとポートはシンボリックにすることができます。印刷されるのは数字です。

これらのツールは移植可能であり、さまざまなシステムのソースから構築できます。実際には、これはいくつかのオペレーティングシステム用のバイナリで事前に構築およびパッケージ化されるか、またはこれらを含むがこれらに限定されないポートを介して提供されます。

答え4

リモートチェックの場合、Romeoの優れた答えに基づいてnmapとncが選択されたツールです。サーバー自体を使用している場合、FreeBSDとUbuntuにはsockstat完璧な最高のツールがあります。

sockstat -p 80 -4 -6

関連情報