一般に、アプリケーションサーバーが稼働していることを確認する簡単な診断方法は、ホストとポートで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