ちょっと話題の記事

【初心者向け】各OSのTCP通信チェックコマンド入門(2018年 更新版)

2018.01.24

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

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

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

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

構築直後の状態で、簡単にTCPポート疎通確認可能なコマンドをご紹介します。自分も忘れやすいのでまとめてみました。

以前の記事から、3年が経過し、OSが追加されましたので、更新版です。更新概要はAmazon Linux2、ubuntu16.04、Windows Server 2016の追加、WindowsのPowershellでの調査方法を追記しました。 どなたかのお役に立てれば幸いです。

今回紹介するOSは以下となります。

  • Amazon Linux,Amazon Linux 2
  • Windows Server 2012R2,Windows Server 2016
  • ubuntu14.04LTS,ubuntu16.04LTS
  • CentOS6,CentOS7

Amazon Linux

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

動作確認AMI:amzn-ami-hvm-2017.09.1.20180115-x86_64-gp2 (ami-ceafcba8)

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

nc -zv <ip address> 80

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

nc -zv <ip address> 22 80 8080

ポートレンジ指定

nc -zv <ip address> 20-30

成功時

[ec2-user@ip-10-1-21-222 ~]$ nc -zv <ip address> 80
Connection to <ip address> 80 port [tcp/http] succeeded!

失敗時

[ec2-user@ip-10-1-21-222 ~]$ nc -zv <ip address> 8080
nc: connect to <ip address> port 8080 (tcp) failed: Connection timed out

Amazon Linux 2

Amazon Linux 2は、nc(netcat)コマンドを利用できません。そのため、curlコマンドを利用します。

動作確認AMI:amzn2-ami-hvm-2017.12.0.20180115-x86_64-gp2 (ami-c2680fa4)

成功時

[ec2-user@ip-10-1-21-113 ~]$ curl -v telnet://<ip address>:80
* Rebuilt URL to: telnet://<ip address>:80/
*   Trying <ip address>...
* TCP_NODELAY set
* Connected to <ip address> (<ip address>) port 80 (#0)
(ここで [Enter] を押下すると、そのまま押すとHTML表示され、やめたい場合は、Ctrl+Cで中止できます。)

失敗時

[ec2-user@ip-10-1-21-113 ~]$ curl -v telnet://<ip address>:8000
* Rebuilt URL to: telnet://<ip address>:8000/
*   Trying <ip address>...
* TCP_NODELAY set
* connect to <ip address> port 8000 failed: Connection timed out
* Failed to connect to <ip address> port 8000: Connection timed out
* Closing connection 0
curl: (7) Failed to connect to <ip address> port 8000: Connection timed out

Windows Server 2012R2、Windows Server 2016

定番だったTelnetコマンドがインストールされていないため、コマンドプロンプトからFTP コマンドを利用します。 Powershellの方法も追記しました。ポートを1個づつチェックします。

動作確認AMI:Windows_Server-2012-R2_RTM-Japanese-64Bit-Base-2018.01.12 (ami-b777edd1)

動作確認AMI:Windows_Server-2016-Japanese-Full-Base-2018.01.05 (ami-b40b94d2)

FTPコマンド

成功時

C:\>ftp
ftp> open <ip address> 80
Connected to <ip address>.
(ここで [Ctrl+C] を押下すると「アクティブなすべてのデータ接続を中止しています...」と表示されて中止できる。)
Connection closed by remote host.
ftp> bye

失敗時

C:\>ftp
ftp> open <ip address> 8080
> ftp: connect :接続がタイムアウトしました
ftp> bye

Powershell

Powershellで行う場合は、「Test-NetConnection」を利用します。

成功時

「TcpTestSucceeded : True」になっていることを確認します。

PS C:\Users\Administrator> Test-NetConnection <ip address> -Port 80


ComputerName     : <ip address>
RemoteAddress    : <ip address>
RemotePort       : 80
InterfaceAlias   : イーサネット 2
SourceAddress    : 10.1.21.187
TcpTestSucceeded : True

失敗時

通信確認中にコンソールに緑色の「Waiting for response」がしばらく表示されます。 「TcpTestSucceeded : False」になっていることを確認します。

PS C:\Users\Administrator> Test-NetConnection <ip address> -Port 8080
警告: TCP connect to <ip address>:8080 failed


ComputerName           : <ip address>
RemoteAddress          : <ip address>
RemotePort             : 8080
InterfaceAlias         : イーサネット 2
SourceAddress          : 10.1.21.187
PingSucceeded          : True
PingReplyDetails (RTT) : 1 ms
TcpTestSucceeded       : False

ubuntu 16.04 LTS、ubuntu 14.04 LTS

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

動作確認AMI:ubuntu/images/hvm-ssd/ubuntu-xenial-16.04-amd64-server-20180109 (ami-d39a02b5)

動作確認AMI:ubuntu/images/hvm-ssd/ubuntu-trusty-14.04-amd64-server-20180110 (ami-816cf4e7)

成功時

ubuntu@ip-10-1-21-109:~$ nc -zv <ip address> 80
Connection to <ip address> 80 port [tcp/http] succeeded!

失敗時

ubuntu@ip-10-1-21-109:~$ nc -zv <ip address> 8080
nc: connect to <ip address> port 8080 (tcp) failed: Connection timed out

CentOS6、CentOS7

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

動作確認AMI:CentOS Linux 6 x86_64 HVM EBS 1801_01-74e73035-3435-48d6-88e0-89cc02ad83ee-ami-5d381c27.4 (ami-88b923ee)

動作確認AMI:CentOS Linux 7 x86_64 HVM EBS 1801_01-b7ee8a69-ee97-4a49-9e68-afaee216db2e-ami-0a537770.4 (ami-25bd2743)

成功時

[centos@ip-10-1-21-46 ~]$ curl -v telnet://<ip address>:80
* About to connect() to <ip address> port 80 (#0)
*   Trying <ip address>... connected
* Connected to <ip address> (<ip address>) port 80 (#0)
(ここで [Enter] を押下すると、そのまま押すとHTML表示され、やめたい場合は、Ctrl+Cで中止できます。)
* Closing connection #0

失敗時

[centos@ip-10-1-21-46 ~]$ curl -v telnet://<ip address>:8080
* About to connect() to <ip address> port 8080 (#0)
*   Trying <ip address>...  Connection timed out
* couldn't connect to host
* Closing connection #0
curl: (7) couldn't connect to host

参考元

Test-NetConnectionについて以下のページを参考にさせて頂きました。

PowerShell で特定 TCP ポートが開いているか確認する

Microsoft Test-NetConnection