必見の記事

【初心者向け】各OSのTCP通信チェックコマンド入門

2015.03.25

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

最新版は以下となります。 https://dev.classmethod.jp/etc/ec2-tcp-port-check-command-2018/

こんにちはコカコーラ好きの梶です。

EC2では色々なOSが構築できますよね。構築後の通信確認はどのように実施してますか?

各OSで他のインスタンスへTCP通信確認のために、ツールをインストールしたり、ICMPなどの別なプロトコルで確認するためにSecurity Groupを一時解放していませんか?

構築直後の状態で、簡単にTCPポート疎通確認可能なコマンドをご紹介します。

Amazon Linux,Ubuntu,Windows2012R2,CentOSについて自分も忘れやすいのでまとめてみました。

どなたかのお役に立てれば幸いです。

 

Amazon Linux

動作確認AMI:amzn-ami-hvm-2014.09.2.x86_64-ebs (ami-18869819)

nc(netcat)コマンドを利用します。

単体ポート(80番HTTPの通信確認)

nc -zv <ipaddress> 80

複数ポート(22、80、8080の通信確認)

nc -zv <ipaddress> 22 80 8080

ポートレンジ指定

nc -zv <ipaddress> 20-30

成功時

[ec2-user@ip-10-10-10-218 ~]$ nc -zv <ipaddress> 22
Connection to <ipaddress> 22 port [tcp/ssh] succeeded!

失敗時

[ec2-user@ip-10-10-10-218 ~]$ nc -zv <ipaddress> 80
nc: connect to <ipaddress> port 80 (tcp) failed: Connection timed out

 

Ubuntu

動作確認AMI:ubuntu-trusty-14.04-amd64-server-20150123 (ami-20b6aa21)

Amazon Linuxと同様に nc(netcat)コマンドを利用します。

成功時

ubuntu@ip-10-10-10-34:~$ nc -zv <ipaddress> 22
Connection to <ipaddress> 22 port [tcp/ssh] succeeded!

失敗時

ubuntu@ip-10-10-10-34:~$ nc -zv <ipaddress> 80
nc: connect to <ipaddress> port 80 (tcp) failed: Connection timed out

Windows 2012R2

Windows_Server-2012-R2_RTM-English-64Bit-Base-2015.02.11 (ami-a79572a7)

定番だったTelnetコマンドがインストールされていないため、FTP コマンドを利用します。ポートを1個づつチェックします。

成功時

C:\>ftp
ftp> open <ip address> 80
Connected to <ip address>.
(ここで [Ctrl+C] を押下すると「Aborting any active data connections...」と表示されて中止できる。)
Connection closed by remote host.
ftp> bye

失敗時

C:\>ftp
ftp> open <ip address> 81
> ftp: connect :Connection time out
ftp> bye

CentOS6、CentOS7

Telnet,nc(Netcat)がインストールされていないので、curlコマンドを利用します。ポートを1個づつチェックします。

CentOS6

動作確認AMI:CentOS 6 x86_64 (2014_09_29) EBS HVM-74e73035-3435-48d6-88e0-89cc02ad83ee-ami-a8a117c0.2 (ami-13614b12)

成功時

[root@ip-10-10-10-200 ~]# curl -v telnet://<ip address>:22
* About to connect() to <ip address> port 22 (#0)
*   Trying <ip address>... connected
* Connected to <ip address> (<ip address>) port 22 (#0)
SSH-2.0-OpenSSH_6.4
(ここで [Enter] を押下する)
Protocol mismatch.
* Closing connection #0

失敗時

[root@ip-10-10-10-200 ~]# curl -v telnet://<ip address>:80
* About to connect() to <ip address> port 80 (#0)
*   Trying <ip address>...

接続がタイムアウトしました
* couldn't connect to host
* Closing connection #0
curl: (7) couldn't connect to host

CentOS7

動作確認AMI:CentOS 7 x86_64 (2014_09_29) EBS HVM-b7ee8a69-ee97-4a49-9e68-afaee216db2e-ami-d2a117ba.2 (ami-89634988)

成功時

[centos@ip-10-10-10-193 ~]$ curl -v telnet://<ip address>:22
* About to connect() to <ip address> port 22 (#0)
*   Trying <ip address>...
* Connected to <ip address> (<ip address>) port 22 (#0)
SSH-2.0-OpenSSH_5.3
(ここで [Enter] を押下する)
Protocol mismatch.
* Closing connection 0
[centos@ip-10-10-10-193 ~]$

失敗時

[centos@ip-10-10-10-193 ~]$ curl -v telnet://<ip address>:80
* About to connect() to <ip address> port 80 (#0)
*   Trying <ip address>...

* 接続がタイムアウトしました
* Failed connect to <ip address>:80; 接続がタイムアウトしました
* Closing connection 0
curl: (7) Failed connect to <ip address>:80; 接続がタイムアウトしました
[centos@ip-10-10-10-193 ~]$

参考元

CentOSのcurl部分は以下を参考にさせていただきました。

http://serverfault.com/questions/560081/check-port-open-without-telnet