Linuxコマンド辞典 ncコマンド(ネットワーク)
サーバまたはクライアントとして起動し、データを送受信する「nc」コマンドの概要と使い方を記載しています。
RHEL Fedora CentOS Vine Deblan Ubuntu Plamo
目次
概要・使用方法
書式
$ nc [オプション] [ホスト名] [ポート番号]
TCP/UDPプロトコルを使ってネットワーク接続からデータを読み書きします。簡単な使い方は、接続先ホストとポート番号をオプションに指定してTCP接続を作ります。標準入力を相手ホストに送り、相手からの返事は標準出力に出力されます。これは接続が切るまで、もしくは自分で切断するまで継続します。またサーバやクライアントとしても起動でき、特定のポートを接続されるように待ち受けて、データを読み書きすることでサーバモードとして動作させることができます。
オプション
-4 | IPv4で利用する |
-6 | IPv6で利用する |
-U –unixsock | UNIXドメインソケットで利用する |
-c コマンド –sh-exec コマンド | 指定したコマンドを実行する |
-e コマンド –exec コマンド | 入力を指定したコマンドにリダイレクトする |
-o ファイル名 –output ファイル名 | 出力を指定したファイルに書き出す |
-l –listen | LISTENモード。待ち受けする |
-x ファイル名 –hex-dump ファイル名 | セッションデータを8進数でファイルに書き出す |
-p ポート –source-port ポート | ポート番号を指定する |
-s アドレス –source アドレス | ソースアドレスを指定する |
-u –udp | TCPの代わりにUDPを利用する |
-w 秒数 | 接続タイムアウトを指定した秒数で設定する |
-z | ポートスキャンに利用する |
HTTPクライアントとしてホストに接続する
$ nc IPアドレス or URL ポート番号
実行結果
[rin@centos ~]$ nc kcfran.com 443
GET / HTTP/1.1
HTTP/1.1 400 Bad Request
Date: Wed, 25 Jan 2023 02:19:55 GMT
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/7.4.14
Content-Length: 362
Connection: close
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
Reason: You're speaking plain HTTP to an SSL-enabled server port.<br />
Instead use the HTTPS scheme to access this URL, please.<br />
</p>
</body></html>
ポートスキャンして結果を出力する
$ nc -z -v IPアドレス or URL ポート番号 ポート番号開始-終了
サーバとクライアントでメッセージのやりとり
サーバー側
$ nc -l -p 待ち受けポート番号
クライアント側
$ echo "メッセージ" | nc IPアドレス or ホスト名 ポート番号
実行結果
[rin@centos ~]$ nc -l -p 2222
test #<クライアント側から送った文字列が表示(2)
[rin@centos ~]$
[roi@centos ~]$ echo "test" | nc 192.168.0.60 2222 #<2:クライアント側から文字列をサーバに送信
サーバでポートを開けて、クライアントからのファイル転送を待つ
サーバー側
$ nc -l -p 待ち受けポート番号 > ファイルパス
クライアント側
$ nc サーバーのIPアドレス ポート番号 < ファイルパス
実行結果
[rin@centos tmp]$ nc -l -p 2222 > /tmp/test.txt #サーバーとして2222/tcpに来たデータを/tmp/test.txtに書き込む(1)
[roi@centos ~]$ nc 192.168.0.60 2222 < ./test.txt #ファイルをサーバに転送する(2)
[rin@centos tmp]$ ls test.txt #(2)で転送したファイルがあるかどうか確認
test.txt
[rin@centos tmp]$
クライアントから接続された時に指定したコマンドを実行する
サーバー側
$ nc -l -p 待ち受けポート番号 -c コマンド
クライアント側
$ nc サーバーのIPアドレス ポート番号
実行結果
[rin@centos tmp]$ nc -l -p 2222 -c uptime #サーバは接続されたらuptimeコマンドを実行する
[roi@centos ~]$ nc 192.168.0.60 2222 #クライアントから接続する
12:00:32 up 16 days, 9:11, 2 users, load average: 0.00, 0.00, 0.00
クライアントからの入力を他のプログラムにリダイレクトする
ここではシェルにリダイレクトします。
サーバー側
$ nc -l -p 待ち受けポート番号 -e コマンド
クライアント側
$ nc サーバーのIPアドレス ポート番号
実行結果
[rin@centos tmp]$ nc -l -p 2222 -e /bin/sh #サーバ側で実行。シェルにリダイレクトする
[roi@centos ~]$ nc 192.168.0.60 2222 #クライアント側で実行
hostname
centos
uname -a
Linux centos 4.18.0-372.32.1.el8_6.x86_64 #1 SMP Thu Oct 27 15:18:36 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux