HOKKAPOKKA
@HOKKAPOKKA (HOKKA POKKA)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

ネットワークのポートが有効になっているかをコマンド等で知りたい

Q&A

解決したいこと

ネットワークのポートが有効になっているかをコマンド等で知りたい

自分のパソコンが接続されているLANで、特定のポートが通るようになっているかを、コマンドかユーティリティーで確認するにはどうすればよいのでしょうか。

ポート25番や587番をSMTPサーバー接続のために使いますが、何をやっても接続できない(メールが送れない)ので、
そもそもポートが有効になっているのかを確認したい。
普通はネットワーク管理者のような人に確認するのでしょうが、今回はそのプロセスが非常に複雑なので、
自分で確認してから相談しようと思っているのです。

自分で試したこと

pingコマンド

0

5Answer

Comments

  1. @HOKKAPOKKA

    Questioner

    どうやらこれが一番簡単なようですが、まずは試してみます。(ここには環境ないので)

Comments

  1. プロトコルアナライザー (WireShark など) を使って、 SmtpClient と SMTP サーバーのコマンド/レスポンスをキャプチャーして、どうなっているのか調べてみてはいかが。

    古い記事ですが、具体例は:

    Web アプリからメール送信
    http://surferonwww.info/Hobby/Computer/PcPage7.aspx

任意のポートへのセッションを確認する程度であれば、telnetコマンドでできます。

telnet 任意のオプション [host [port]]

(ちなみに、特殊な認証が暗号化が不要であれば、telnetコマンドでも、SMTPのルールに従って内容を送れば、メールを送信することもできます)

指定ポートへの接続ができた場合、
FWなどでブロックされて応答がない場合、
ポートが閉じられていて即座に応答が返ってくる場合と、

対向先の状態や、経路上のNW機器の状態によって、反応が異なってきますので、
その結果によって判断できるはずです。

ただし、接続できた場合は、メールサーバ側でログが記録されますので、ご注意ください。

それと同時並行して、別窓などでnetstat -anを実行し、
該当するセッションの状態を確認すると良いでしょう。

こちらも、ESTABLISHED, SYN_SENT, TIME_WAIT, CLOSE など、
対向先の状態によって、状態が異なるはずです。

0Like

gx3n-inueさん、ありがとうございます。
telnetという手があるんですね。
たとえば手元のパソコンからポート25でsmtp.gmail.comに到達できるかどうかを試すとしたら、
telnet smtp.gmail.com 25 とかを試せばよいのでしょうか?
でも、私が試したいことは、そもそもどこのIPに到達するにも25番ポートが空いているかどうかを見たいのですが、これってやってることはあってますでしょうか?

0Like

Comments

  1. @HOKKAPOKKAさん

    下記はmacOSでの実行例です。
    (WIndowsでもほぼ同様です。)

    smtp.gmail.com を名前解決した後、解決されたIPアドレス(IPv4, IPv6)の25番ポート宛に接続をかけていますが、タイムアウトするまで待った後、エラーメッセージが表示されてます。

    IPv6の方は(私が利用しているプロバイダからは)、経路がないようですね。

    ~/ telnet smtp.gmail.com 25
    Trying xxx.xxx.xxx.xxx...
    telnet: connect to address xxx.xxx.xxx.xxx: Operation timed out
    Trying xxxx:xxxx:xxxx:xxxx::xxxx...
    telnet: connect to address xxxx:xxxx:xxxx:xxxx::xxxx: No route to host
    telnet: Unable to connect to remote host
    

    下記は並行して実行したnetstat -anの実行結果例です。
    (netstatについても、Windowsでも同様です。)

    ~/ netstat -an | grep 25
    Active Internet connections (including servers)
    Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)
    ...
    ...
    tcp4       0      0  192.168.11.3.54392     108.177.97.109.25      SYN_SENT
    ...
    ...
    

    SYN_SENTと表示されていますが、その表示の通り、TCPの SYN_SENT は送られていますが、その応答 SYN_ACK が返っていない状態であることを表しています。

    この場合、途中のFW、もしくは対向先のホストで、25番ポートがブロックされている(25番ポートへの通信が許可されていない)と推測できます。

    続いて、SMTP(TLS)587番ポート宛で試してみました。

    587番ポートとのTCP Sessionnが確立し、応答が返って来ています。
    (この後、メールソフトが送っている通信内容同様に、送信コマンドを送れば、メール送信することも可能ですが、暗号化、認証などは、telnetではかなり面倒です)

    [yuza@MacBook-Air ~$ telnet smtp.gmail.com 587
    Trying xxx.xxx.xxx.xxx...
    Connected to smtp.gmail.com.
    Escape character is '^]'.
    220 smtp.gmail.com ESMTP u17-20020aa78491000000b006870ff20254sm3251336pfn.125 - gsmtp
    

    同じく、netstat -an の実行結果です。

    ESTABLISHED(セッションが確立した)と表示されています。
    つまり、587番ポートとの通信が開始されています。

    ~/ netstat -an | more
    Active Internet connections (including servers)
    Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)
    ...
    ...
    tcp4       0      0  192.168.11.3.54531     xxx.xxx.xxx.xxx.587    ESTABLISHED
    ...
    

    セッションを閉じたいときは、telnetの画面で、"quit"と送ってみてください。
    quitは、SMTPの接続終了のコマンドです。

    SMTP(TLS)のセッションがcloseされます。

    quit
    221 2.0.0 closing connection s1-20020a62e701000000b00687087d8bc3sm3907113pfh.141 - gsmtp
    Connection closed by foreign host.
    

確かに、コンピューター上で特定のポートが有効化されているかをチェックするために使用できるいくつかのコマンドがあります。

netstat:

netstatコマンドはネットワークの診断ツールで、ネットワーク接続に関するさまざまな情報を表示することができます。特定のポートが有効かをチェックするには、次のコマンドを使用します:

netstat -an | findstr ":<ポート番号>"

例えば、ポート25が有効かをチェックするには、次のコマンドを使用します:

netstat -an | findstr ":25"

ポートが有効な場合、出力にそのポート番号と接続の状態が表示されます。

telnet:

telnetコマンドはリモートサーバーに接続するために使用できます。ポートが有効かをチェックするには、そのポートのサーバーに接続を試みます。例えば、ポート25が有効かをチェックするには、次のコマンドを使用します:

telnet localhost 25

ポートが有効な場合、サーバーに接続できます。ポートが有効でない場合、エラーメッセージが表示されます。

nmap:

nmapコマンドはネットワークスキャナーで、オープンポートを検索するために使用できます。特定のポートが有効かをチェックするには、次のコマンドを使用します:

nmap -p <ポート番号> localhost

例えば、ポート25が有効かをチェックするには、次のコマンドを使用します:

nmap -p 25 localhost

ポートが有効な場合、出力にそのポート番号と接続の状態が表示されます。

0Like

Your answer might help someone💌