Unixライクなオペレーティングシステムでは、ncコマンドはネットワーク接続を介して生データを送信するためのユーティリティであるNetcatを実行します。
このドキュメントでは、ncのLinuxバージョンについて説明します。
説明
Netcatは、TCPまたはUDPプロトコルを使用して、ネットワーク接続を介してデータを読み書きするユーティリティです。 で信頼される”後の”ツールで使える直接駆動するその他のプログラムやイントロダクションです。, 同時に、必要なほぼすべての種類の接続を作成でき、いくつかの興味深い組み込み機能を備えているため、豊富な機能を備えたネットワークデバッグおよび探索ツールです。 Ssh用のSocksまたはHTTPプロキシコマンド
構文
オプション
-4 | ncはIPv4アドレスのみを使用します。 |
-6 | ncはIPv6アドレスのみを使用します。, |
-b | ブロードキャストを許可します。 |
-C | CRLFを行末として送信します。 |
-D | ソケットのデバッグを有効にします。 |
-d | 標準入力からの読み込みを試みないでください。 |
-h | ncヘルプを出力します。 |
-I length | TCP受信バッファのサイズを指定します。 |
-i間隔 | 送信されたテキスト行と受信されたテキスト行の間の遅延時間間隔を指定します。 また、複数のポートへの接続間の遅延時間を引き起こします。, |
-k | 現在の接続が完了した後、ncは別の接続をリッスンしたままにします。 このオプションを-lオプションなしで使用するとエラーになります。 |
-l | ncがリモートホストへの接続を開始するのではなく、着信接続をリッスンするように指定するために使用されます。 このオプションを-p、-s、または-zオプションと組み合わせて使用すると、エラーになります。 さらに、-wオプションで指定されたタイムアウトは無視されます。 |
-n | 指定されたアドレス、ホスト名、またはポートに対してDNSまたはサービスルックアップを行わないでください。, |
-O length | TCP送信バッファのサイズを指定します。 |
-P proxy_username | 認証を必要とするプロキシサーバーに提示するユーザー名を指定します。 ユーザ名が指定されていない場合、認証は試行されません。 プロキシ認証をサポートされる唯一のためのHTTP接続の代理人が現状です。 |
-p source_port | 特権の制限と可用性に応じて、ncが使用するソースポートを指定します。, |
-q秒 | 標準入力のEOFの後、指定された秒数を待ってから終了します。 秒が負の場合は、永遠に待ちます。 |
-r | 送信元ポートまたは宛先ポートを、範囲内またはシステムが割り当てる順序で順番に選択するのではなく、ランダムに選択することを指定します。 |
-S | RFC2385TCP MD5署名オプションを有効にします。 |
-s source | パケットを送信するために使用されるインターフェイスのIPを指定します。, UNIXドメイ このオプションを-lオプションと組み合わせて使用するのはエラーです。 |
-T toskeyword | IPv4TOS値を変更します。 toskeywordには、critical、inetcontrol、lowcost、lowdelay、netcontrol、throughput、reliabilityのいずれか、またはDiffServコードポイントef、af11のいずれかを指定できます。.. af43、cs0。.. cs7;またはhexまたはdecimalのいずれかの数値。 |
-t | ncはRFC854DOおよびWILLリクエストに対して応答しないRFC854を送信します。, この使用が可能とncるスクリプトtelnetます。 |
-U | UNIXドメインソケットを使用するように指定します。 |
-u | TCPのデフォルトオプションの代わりにUDPを使用します。 UNIXドメイ UNIXドメインソケットが使用されている場合、-sフラグが指定されていない限り、一時的な受信ソケットが/tmpに作成されます。 |
-V rtable | 使用するルーティングテーブルを設定します。 デフォルトは0です。tr> |
-v | ncはより冗長な出力を与えます。, |
-w timeout | タイムアウト秒後に確立できないか、アイドルタイムアウトである接続。 つまり、ncは-wフラグの有無にかかわらず、接続のために永遠にリッスンします。 デフォルトはno timeoutです。 |
-X proxy_protocol | プロキシサーバーと通信するときにncが指定されたプロトコルを使用するように要求します。 サポートされているプロトコルは、”4″(SOCKS v.4)、”5″(SOCKS v.5)、および”connect”(HTTPSプロキシ)です。 プロトコルが指定されない場合、SOCKSバージョン5が使用されます。, |
-x proxy_address | ncがproxy_addressとportのプロキシを使用してdestinationに接続するように要求します。 Portが指定されていない場合、プロキシプロトコルの既知のポートが使用されます(SOCKSの場合は1080、HTTPSの場合は3128)。-Z DCCPモードです。 |
-z | ncがリスニングデーモンのみをスキャンし、データを送信しないように指定します。 このオプションを-lオプションと組み合わせて使用するのはエラーです。, |
destinationには、数値IPアドレスまたはシンボリックホスト名を指定できます(-nオプションが指定されていない限り)。 一般に、-lオプションが指定されていない限り、宛先を指定する必要があります(この場合、ローカルホストが使用されます)。 UNIXドメインソケットの場合、宛先は必須であり、接続する(または-lオプションが指定されている場合はlisten on)ソケットパスです。
portは、単一の整数またはポートの範囲にすることができます。 範囲はnn-mmの形式です。-Uオプションが指定されていない限り、一般に宛先ポートを指定する必要があります。,
クライアント/サーバーモデル
ncを使用して非常に基本的なクライアント/サーバーモデルを構築するのは非常に簡単です。 あるコンソールで、接続の特定のポートでncリッスンを開始します。 たとえば、
nc -l 1234
ncはポート1234で接続をリッスンしています。 第二のコンソール(または第二のマシン)で、マシンとポートに接続してリッスンします。
nc 127.0.0.1 1234
ポート間に接続があるはずです。 第二のコンソールで入力されたものはすべて最初のコンソールに連結され、その逆もまた同様です。, 接続がセットアップされた後、ncはどちら側が”サーバー”として使用され、どちら側が”クライアント”として使用されているかを実際に気にしません。 接続はEOF(‘^D’)を使用して終了することができます。最新のnetcatには-cまたは-eオプションはありませんが、ファイル記述子をリダイレクトすることで接続が確立された後でもコマンドを実行できます。 ポートを開いて、接続されている誰かがあなたのサイト上で任意のコマンドを実行させるのは危険です。, あなたが本当にこれを行う必要がある場合は、例を次に示します。
‘server’側:
rm -f /tmp/f; mkfifo /tmp/f
cat /tmp/f | /bin/sh -i 2>&1 | nc -l 127.0.0.1 1234 > /tmp/f
‘client’側:
nc host.example.com 1234
(シェルプロンプトhost.example.comこれにより、/tmp/fにfifoを作成し、’server’側のポート1234のアドレス127.0.0.1でncをリッスンさせ、’client’がそのポートへの接続を正常に確立すると、/bin/shが’server’側で実行され、シェルプロンプトが’client’側に与えられます。
接続が終了すると、ncも終了します。, リッスンを続けたい場合は-kを使用しますが、コマンドが終了した場合、このオプションは再起動せず、ncを実行し続けません。 また、必要がなくなったらファイル記述子を削除することを忘れないでください。
rm -f /tmp/f
Data transfer
前のセクションの例を拡張して、基本データ転送モデルを構築できます。 接続の一方の端に入力された情報はもう一方の端に出力され、入出力を簡単にキャプチャしてファイル転送をエミュレートすることができます。,
ncを使用して特定のポートをリッスンし、出力をファイルにキャプチャします。
nc -l 1234 > filename.out
別のマシンを使用して、リッスンncプロセスに接続し、転送するファイルを供給します。
nc host.example.com 1234 < filename.in
ファイルが転送されると、接続は自動的に閉じます。
サーバーとの通信
ユーザーインターフェイスを介するのではなく、”手動”でサーバーと通信すると便利な場合があります。, クライアントが発行したコマンドに応答してサーバーが送信しているデータを確認する必要がある場合、トラブルシューティングに役立ちます。 たとえば、webサイトのホームページを取得するには、次のようにします。
printf "GET / HTTP/1.0\r\n\r\n" | nc host.example.com 80
これには、webサーバーによって送信されたヘッダーも表示されます。 必要に応じて、sedなどのツールを使用してフィルタリングすることができます。
ユーザーがサーバーによって必要とされる要求の形式を知っている場合、より複雑な例を構築することができます。, 別の例として、電子メールは次のようにSMTPサーバに送信されます。
ポートスキャン
どのポートが開いていて、ターゲットマシン上でサービスを実行しているかを知ることは有用であるかもしれません。 -Zフラグを使用すると、接続を開始するのではなく、開いているポートを報告するようにncに指示できます。 通常、このオプションを-vオプションと組み合わせて使用することで、stderrへの詳細出力をオンにすると便利です。
例:
nc -zv host.example.com 20-30
Connection to host.example.com 22 port succeeded!Connection to host.example.com 25 port succeeded!
ポート範囲は、検索をポート20-30に制限するように指定されており、昇順でスキャンされます。,
スキャンするポートのリストを指定することもできます。
nc -zv host.example.com 80 20 22
ポートは指定した順序でスキャンされます。
または、なんのサーバーソフトウェアでは、バージョン この情報は、多くの場合、挨拶バナーに含まれています。 これらを取得するには、まず接続を行い、バナーが取得されたときに接続を切断する必要があります。, これは、-wフラグで小さなタイムアウトを指定するか、サーバーに”QUIT”コマンドを発行することによって実現できます。
echo "QUIT" | nc host.example.com 20-30
SSH-1.99-OpenSSH_3.6.1p2 Protocol mismatch. 220 host.example.com IMS SMTP Receiver Version 0.84 Ready
例
nc -p 31337 -w 5 host.example.com 42
ポート42へのTCP接続を開きます。host.example.comポート31337をソースポートとして使用し、タイムアウトは5秒です。
nc -u host.example.com 53
のポート53へのUDP接続を開きますhost.example.com.
nc -s 10.1.2.3 host.example.com 42
のポート42へのTCP接続を開きますhost.example.com 接続のローカル端のIPとして10.1.2.3を使用します。,
nc -lU /var/tmp/dsocket
UNIXドメインストリームソケットで作成およびリッスンします。
nc -x10.2.3.4:8080 -Xconnect host.example.com 42
のポート42に接続しますhost.example.com 10.2.3.4のHTTPプロキシを介して、ポート8080。 この例はsshでも使用できます。
nc -x10.2.3.4:8080 -Xconnect -Pruser host.example.com 42
上記の例と同じですが、今回はプロキシが必要な場合はユーザ名”ruser”でプロキシ認証を有効にします。
ifconfig-ネットワークインターフェイスの構成を表示または変更します。