telnet以外に、開いているポートをチェックするための代替手段は何ですか?


24

telnet VIAポートをテストするには、次を使用できます。次の例では、ポート6667をテストします。

[root@kafka03 ~]# telnet kafka02 6667
Trying 103.64.35.86...
Connected to kafka02.
Escape character is '^]'.
^CConnection closed by foreign host

一部のマシンでは(内部的な理由で)telnetを使用できないため、telnetとしてポートをチェックする代替手段は何ですか?


perlはオプションですか?
ジェフシャラー

5
これらの「内部的な理由」により、他のポートスキャンソフトウェアを使用できない場合があります。私は、銀行で働いていて、PCにnmapのコピーを持っているために契約を終了した男を知っていました。彼は仕事関連の目的のためにそれを使用していましたが、それは禁止リストに載っていたので、彼は建物から付き添われました。
ロジャーリップスコム

2
perlはオプションですか?–はい
yael

2
telnetは高度なプロトコルであることに注意してください。telnetポートは、コマンドラインで指定されている場合、ユーティリティは、プロトコルの動作をオフにします。次にnetcat、行末検出を使用して、のように動作します。
-rexkogitans

ポートをスキャンすることさえほのめかさない、よりオペレーティングシステムに依存しない質問は、unix.stackexchange.com / questions / 499694です。
JdeBP

回答:


23

Bashシェルを使用している場合、その機能を使用して、ポートが開いているか閉じているかを確認できます。

(timeout 1 bash -c '</dev/tcp/127.0.0.1/17500 && echo PORT OPEN || echo PORT CLOSED') 2>/dev/null
PORT OPEN

(timeout 1 bash -c '</dev/tcp/127.0.0.1/7500 && echo PORT OPEN || echo PORT CLOSED') 2>/dev/null
PORT CLOSED

サーバーが1秒後に応答しない場合、タイムアウトに達すると、コマンドが'中断されるため、何も出力されないことに注意してください。


5
おそらく、質問127.0.0.1ではなくホスト名を使用する必要があります(kafka02)の代わりに、ループバックでのみ機能するように見えます。
ドミトリーグリゴリエフ

1
(timeout 1 bash -c '</dev/tcp/www.google.com/444 && echo PORT OPEN || echo PORT CLOSED') 2>/dev/null私には何も印刷しません。(timeout 1 bash -c '</dev/tcp/www.google.com/444' && echo PORT OPEN || echo PORT CLOSED) 2>/dev/null期待どおりに動作しました(PORT CLOSEDを印刷)。の場所に注意してください'
-thecarpy

bash -c '</ dev / tcp / kafka01 / 6667'で得られるもの
yael

次にエコー$?(0の場合、ポートは開いている、)
yael

IIRCこのbash機能は、しばらく前にDebianで無効にされていました。巧妙なトリックですが、常に機能するとは限りません。
AnonymousLurker

32

netcatは1つのオプションです。

nc -zv kafka02 6667
  • -z =実際にデータを送信せずに、リスニングデーモンを単にスキャンするようにncを設定します
  • -v =詳細モードを有効にします

ncから標準出力を取得することは可能ですか?bashスクリプトで書き込みたいため
yael

2
ドキュメントを読んでください!オプションncがないと動作はとても似ていtelnetます。
ヘンリック-

はい、ドキュメントを読みましたが、-wフラグがタイムアウトとして機能しません
-yael

例-c -v -w 1 kafka01 6667(タイムアウトは発生しません)
-yael

nc -v -w 3 kafka01 6667 Ncat:バージョン6.40(nmap.org/ncat)Ncat:10.164.235.85:6667に接続されています。(これはまだハング)
-yael

23

ゴールドスタンダードは間違いなくnmapnmap.org)ですが、通常、「最良の結果」を得るにはルートが必要です。ただし、スタンドアロンのバイナリが利用可能であり、機能が低下しただけで、権限のないユーザーとして実行することは可能です。たとえば、ステルスsynスキャン(-sS)の代わりに、標準のTCP接続スキャン(-sT)にフォールバックします。これは機能的にnetcatと同等ですが、優れたマルチホスト、高速化機能を備えています。

例:

not-root$ nmap -sT google.com
Starting Nmap 7.70 ( https://nmap.org ) at 2018-11-04 21:01 GMT
Nmap scan report for google.com (172.217.23.14)
Host is up (0.12s latency).
rDNS record for 172.217.23.14: lhr35s01-in-f14.1e100.net
Not shown: 998 filtered ports
PORT    STATE SERVICE
80/tcp  open  http
443/tcp open  https

1
ほとんどの組織では、nmapはスキャンツールと見なされており、適切な許可なしにnmapを使用することはできません。EC2インスタンスの場合も、AWSからの承認も必要です。
アルマムン

4

Perlがオプションの場合、そのIO::Socketモジュールを使用して特定のホストとポートへの接続をテストできます。以下のスクリプトは、プロトコルとしてTCPをハードコードします(telnetが使用するものです)。

#!/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"

閉じたポートからのサンプル出力:

$ ./above-script kafka02 6667
can't connect to kafka02:6667: Connection refused

開いているポートからのサンプル出力:

$ ./above-script kafka02 4200
Success!

2

telnetの代わりに、デバイスファイル/ dev / tcpおよび/ dev / udpを使用できます。例:echo 0> /dev/tcp/103.64.35.86/6667。次に、#echo $?を使用して終了ステータスを確認します。。終了ステータスが0の場合、ポートは開いています。終了ステータスがゼロ以外の場合、ポートは閉じられています。udpパケットを確認するには、echo 0> /dev/udp/103.64.35.86/6667を使用します。


私のredhat 7の/ dev /には、tcpがありません
yael

ls / dev / tcp / ls:/ dev / tcp /にアクセスできません:そのようなファイルまたはディレクトリはありません
yael

どのOSでテストしますか?
-yael

@ yael、lsの間は/ dev / tcpまたは/ dev / udpを取得しません。シェルでまったく同じコマンドを実行すると、結果が得られます。ところで、私は頻繁にRHEL6,7にそれを使用する
アルmamun

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