「ncatの基本的な使い方」の版間の差分
(同じ利用者による、間の4版が非表示) | |||
行13: | 行13: | ||
コネクトモードでは、[[ncat]] は、 listen しているサービスへ接続(もしくは [[UDP]]データの送信)を開始します。 | コネクトモードでは、[[ncat]] は、 listen しているサービスへ接続(もしくは [[UDP]]データの送信)を開始します。 | ||
− | [[socket]] | + | [[socket]]プログラミングでいえば、コネクトモードは、connectシステムコールを使うのと同じです。 |
listen モードでは、[[ncat]]は、bindとlisten システムコールを使って、接続要求(もしくは、データの到達)を待ちます。 | listen モードでは、[[ncat]]は、bindとlisten システムコールを使って、接続要求(もしくは、データの到達)を待ちます。 | ||
行23: | 行23: | ||
ncat <host> [<port>] | ncat <host> [<port>] | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | host | + | host は、ホスト名か[[IPアドレス]]、port には、[[ポート番号]] を指定します。 |
− | + | ||
listen モードは、 --listen オプション(エイリアス -l) を加えます。 | listen モードは、 --listen オプション(エイリアス -l) を加えます。 | ||
− | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
ncat --listen [<host>] [<port>] | ncat --listen [<host>] [<port>] | ||
行34: | 行32: | ||
listen モードでは、 host は、[[ncat]] が listen するアドレスです。 | listen モードでは、 host は、[[ncat]] が listen するアドレスです。 | ||
− | もし、省略すると [[ncat]] は、すべてのローカル | + | もし、省略すると [[ncat]] は、すべてのローカル インターフェース (INADDR_ANY) に対して bind します。 |
ポート番号を省略した場合、デフォルトでは 31337 ポートを使用します。 | ポート番号を省略した場合、デフォルトでは 31337 ポートを使用します。 | ||
− | 一般的に、特権階級ユーザ( [[root]] ) は、 1024 以下の [[ポート番号]] を | + | 一般的に、特権階級ユーザ( [[root]] ) は、 1024 以下の [[ポート番号]] を bind します。 |
− | listen している [[TCP]] サーバーは、通常、1つのコネクションだけを受け付け( | + | listen している [[TCP]] サーバーは、通常、1つのコネクションだけを受け付け(accept)、クライアントが切断したときに、終了します。 |
--keep-open オプションを使うときは、[[ncat]] は、コネクションの限界まで、複数の同時接続を受け付けます。--keep-open(もしくは、短縮形の -k)を使用するとき、サーバは、クライアントから送信されるすべてを受け取り、それらのすべてをサーバは、送り返します。 | --keep-open オプションを使うときは、[[ncat]] は、コネクションの限界まで、複数の同時接続を受け付けます。--keep-open(もしくは、短縮形の -k)を使用するとき、サーバは、クライアントから送信されるすべてを受け取り、それらのすべてをサーバは、送り返します。 | ||
[[UDP]] サーバは、1つのクライアント(データを送ってきた最初の1つ)とコミュニケーションします。なぜなら、[[UDP]] は、「接続された」クライアントのリストがありません。 | [[UDP]] サーバは、1つのクライアント(データを送ってきた最初の1つ)とコミュニケーションします。なぜなら、[[UDP]] は、「接続された」クライアントのリストがありません。 | ||
行43: | 行41: | ||
デフォルトでは、 [[ncat]] は、 [[TCP]] と [[IPv4]] を使用します。 | デフォルトでは、 [[ncat]] は、 [[TCP]] と [[IPv4]] を使用します。 | ||
--udp もしくは -u オプションは、[[UDP]] を有効にします。--sctp は、SCTPを有効にし、 -6 は、 [[IPv6]] を有効にします。 | --udp もしくは -u オプションは、[[UDP]] を有効にします。--sctp は、SCTPを有効にし、 -6 は、 [[IPv6]] を有効にします。 | ||
− | |||
== コネクトモードの例 == | == コネクトモードの例 == | ||
− | + | [[ncat]] (と一般的なネットワークプロトコル)を学ぶよい方法は、ネットワークサービスに接続し、サービスと話をすることです。この場合は、 [[ncat]] を使って、ブラウザでウェブページを訪れたときに、[[ウェブブラウザ]]がバックグラウンドで実行しているように、マニュアルで HTTP サーバーから ウェブページ を取得します。 | |
− | [[ncat]] (と一般的なネットワークプロトコル)を学ぶよい方法は、ネットワークサービスに接続し、サービスと話をすることです。この場合は、 [[ncat]] | + | |
タイプするのは、ここまで、です。 | タイプするのは、ここまで、です。 | ||
行81: | 行77: | ||
</pre> | </pre> | ||
− | -C オプションは、 [[CRLF]] を [[LF]]に置換するオプションです。行末の[[CRLF]]を置換します。[[ | + | -C オプションは、 [[CRLF]] を [[LF]]に置換するオプションです。行末の[[CRLF]]を置換します。[[CRLF]]の行末は、多くのプロトコルで要求されます。[[HTTP]]を含む、多くのサーバーは、プレイン改行(LF)を受け付けます。 |
− | + | ||
== listen モードの例 == | == listen モードの例 == | ||
hello.http を下記の内容で作成します。 | hello.http を下記の内容で作成します。 | ||
行96: | 行91: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | curl で localhost の 8080 で動作している [[ncat]] に問い合わせをします。 | |
[[ncat]] からドキュメントが返されます。 | [[ncat]] からドキュメントが返されます。 | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
行138: | 行133: | ||
認証をしないでコマンドの実行を許すような使い方は、するべきではありません。 | 認証をしないでコマンドの実行を許すような使い方は、するべきではありません。 | ||
− | |||
== コマンドラインオプション == | == コマンドラインオプション == | ||
=== Ncat 6.40 === | === Ncat 6.40 === | ||
行194: | 行188: | ||
See the ncat(1) manpage for full options, descriptions and usage examples | See the ncat(1) manpage for full options, descriptions and usage examples | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
=== Ncat 6.25 === | === Ncat 6.25 === | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
行248: | 行241: | ||
See the ncat(1) manpage for full options, descriptions and usage examples | See the ncat(1) manpage for full options, descriptions and usage examples | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
== 関連項目 == | == 関連項目 == | ||
* [[netcat]] | * [[netcat]] | ||
* [[nmap]] | * [[nmap]] | ||
− | <!-- | + | * [[トンネリング]] |
− | vim: filetype=mediawiki | + | <!-- vim: filetype=mediawiki |
--> | --> |
2015年9月23日 (水) 15:40時点における最新版
ncat の基本的な使い方を紹介します。ncatは、ネットワークアプリケーションのクライアントと使うことができます。また、ncatを使って、ネットワークアプリケーションではないアプリケーションを、inetdを利用するように簡易的にデーモンのように使うこともできます。ncatとbashのようなシェルを併用することで、リモートシェルを実現できます。sshdすらも不要です。
読み方
- ncat
- えぬきゃっと、ねっときゃっと
目次
概要
ncat の基本的な使い方を紹介します。
ncat は、2つのうちの1つの基本モードで使用します。
- コネクトモード
- listen モード
コネクトモードでは、ncat は、 listen しているサービスへ接続(もしくは UDPデータの送信)を開始します。 socketプログラミングでいえば、コネクトモードは、connectシステムコールを使うのと同じです。
listen モードでは、ncatは、bindとlisten システムコールを使って、接続要求(もしくは、データの到達)を待ちます。 コネクトモードは、「クライアント」モード、 listen モードは、「サーバ」モードであると考えることができます。
コネクトモードでncat を実行する方法は、以下の通りです。
ncat <host> [<port>]
host は、ホスト名かIPアドレス、port には、ポート番号 を指定します。
listen モードは、 --listen オプション(エイリアス -l) を加えます。
ncat --listen [<host>] [<port>] ncat -l [<host>] [<port>]
listen モードでは、 host は、ncat が listen するアドレスです。 もし、省略すると ncat は、すべてのローカル インターフェース (INADDR_ANY) に対して bind します。 ポート番号を省略した場合、デフォルトでは 31337 ポートを使用します。 一般的に、特権階級ユーザ( root ) は、 1024 以下の ポート番号 を bind します。 listen している TCP サーバーは、通常、1つのコネクションだけを受け付け(accept)、クライアントが切断したときに、終了します。 --keep-open オプションを使うときは、ncat は、コネクションの限界まで、複数の同時接続を受け付けます。--keep-open(もしくは、短縮形の -k)を使用するとき、サーバは、クライアントから送信されるすべてを受け取り、それらのすべてをサーバは、送り返します。 UDP サーバは、1つのクライアント(データを送ってきた最初の1つ)とコミュニケーションします。なぜなら、UDP は、「接続された」クライアントのリストがありません。
デフォルトでは、 ncat は、 TCP と IPv4 を使用します。 --udp もしくは -u オプションは、UDP を有効にします。--sctp は、SCTPを有効にし、 -6 は、 IPv6 を有効にします。
コネクトモードの例
ncat (と一般的なネットワークプロトコル)を学ぶよい方法は、ネットワークサービスに接続し、サービスと話をすることです。この場合は、 ncat を使って、ブラウザでウェブページを訪れたときに、ウェブブラウザがバックグラウンドで実行しているように、マニュアルで HTTP サーバーから ウェブページ を取得します。
タイプするのは、ここまで、です。
% ncat -C nmap.org 80 GET / HTTP/1.0
HTTP プロトコルは、改行が2つ必要です。
例 1. ウェブブラウザとしてのncat
% ncat -C nmap.org 80 GET / HTTP/1.0 HTTP/1.1 200 OK Date: Sat, 15 Jun 2013 06:52:20 GMT Server: Apache/2.2.15 (CentOS) Accept-Ranges: bytes Connection: close Content-Type: text/html; charset=UTF-8 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE>Nmap - Free Security Scanner For Network Exploration & Security Audits.</ TITLE> </HEAD> 省略 </HTML>
-C オプションは、 CRLF を LFに置換するオプションです。行末のCRLFを置換します。CRLFの行末は、多くのプロトコルで要求されます。HTTPを含む、多くのサーバーは、プレイン改行(LF)を受け付けます。
listen モードの例
hello.http を下記の内容で作成します。
HTTP/1.0 200 OKHello, world!
listen モードで ncat のサーバを起動します。
% ncat -l localhost 8080 < hello.http
curl で localhost の 8080 で動作している ncat に問い合わせをします。 ncat からドキュメントが返されます。
% curl http://localhost:8080/Hello, world!
ncat は、リクエストを表示し、レスポンスを返して、ncat 自信も終了します。
% ncat -l localhost 8080 < hello.http GET / HTTP/1.1 User-Agent: curl/7.24.0 (i386-portbld-freebsd9.0) libcurl/7.24.0 OpenSSL/0.9.8y zlib/1.2.7 Host: localhost:8080 Accept: */*
ncatでバックドアのようなリモートシェル
リモートシェルを起動するには、以下の様なコマンドラインを実行します。 -k オプションを指定しないので、一度、接続が切断されると、ncat は終了してしまします。
$ ncat -l -p 2222 -e /bin/sh
listenモードで複数の接続を受け付けるには、-kオプションを指定します。
$ ncat -l -p 2222 -e /bin/sh -k
ncatのリモートシェルに接続するクライアントは、リモートシェル用のポートに接続します。
$ ncat localhost 2222
プロンプトは返ってきませんが、実行したコマンドの出力が表示されます。
$ ncat localhost 2222 uname FreeBSD hostname a1.local
認証をしないでコマンドの実行を許すような使い方は、するべきではありません。
コマンドラインオプション
Ncat 6.40
% ncat -h Ncat 6.40 ( http://nmap.org/ncat ) Usage: ncat [options] [hostname] [port] Options taking a time assume seconds. Append 'ms' for milliseconds, 's' for seconds, 'm' for minutes, or 'h' for hours (e.g. 500ms). -4 Use IPv4 only -6 Use IPv6 only -U, --unixsock Use Unix domain sockets only -C, --crlf Use CRLF for EOL sequence -c, --sh-exec <command> Executes the given command via /bin/sh -e, --exec <command> Executes the given command --lua-exec <filename> Executes the given Lua script -g hop1[,hop2,...] Loose source routing hop points (8 max) -G <n> Loose source routing hop pointer (4, 8, 12, ...) -m, --max-conns <n> Maximum <n> simultaneous connections -h, --help Display this help screen -d, --delay <time> Wait between read/writes -o, --output <filename> Dump session data to a file -x, --hex-dump <filename> Dump session data as hex to a file -i, --idle-timeout <time> Idle read/write timeout -p, --source-port port Specify source port to use -s, --source addr Specify source address to use (doesn't affect -l) -l, --listen Bind and listen for incoming connections -k, --keep-open Accept multiple connections in listen mode -n, --nodns Do not resolve hostnames via DNS -t, --telnet Answer Telnet negotiations -u, --udp Use UDP instead of default TCP --sctp Use SCTP instead of default TCP -v, --verbose Set verbosity level (can be used several times) -w, --wait <time> Connect timeout --append-output Append rather than clobber specified output files --send-only Only send data, ignoring received; quit on EOF --recv-only Only receive data, never send anything --allow Allow only given hosts to connect to Ncat --allowfile A file of hosts allowed to connect to Ncat --deny Deny given hosts from connecting to Ncat --denyfile A file of hosts denied from connecting to Ncat --broker Enable Ncat's connection brokering mode --chat Start a simple Ncat chat server --proxy <addr[:port]> Specify address of host to proxy through --proxy-type <type> Specify proxy type ("http" or "socks4") --proxy-auth <auth> Authenticate with HTTP or SOCKS proxy server --ssl Connect or listen with SSL --ssl-cert Specify SSL certificate file (PEM) for listening --ssl-key Specify SSL private key (PEM) for listening --ssl-verify Verify trust and domain name of certificates --ssl-trustfile PEM file containing trusted SSL certificates --version Display Ncat's version information and exit See the ncat(1) manpage for full options, descriptions and usage examples
Ncat 6.25
% ncat -h Ncat 6.25 ( http://nmap.org/ncat ) Usage: ncat [options] [hostname] [port] Options taking a time assume seconds. Append 'ms' for milliseconds, 's' for seconds, 'm' for minutes, or 'h' for hours (e.g. 500ms). -4 Use IPv4 only -6 Use IPv6 only -U, --unixsock Use Unix domain sockets only -C, --crlf Use CRLF for EOL sequence -c, --sh-exec <command> Executes the given command via /bin/sh -e, --exec <command> Executes the given command -g hop1[,hop2,...] Loose source routing hop points (8 max) -G <n> Loose source routing hop pointer (4, 8, 12, ...) -m, --max-conns <n> Maximum <n> simultaneous connections -h, --help Display this help screen -d, --delay <time> Wait between read/writes -o, --output <filename> Dump session data to a file -x, --hex-dump <filename> Dump session data as hex to a file -i, --idle-timeout <time> Idle read/write timeout -p, --source-port port Specify source port to use -s, --source addr Specify source address to use (doesn't affect -l) -l, --listen Bind and listen for incoming connections -k, --keep-open Accept multiple connections in listen mode -n, --nodns Do not resolve hostnames via DNS -t, --telnet Answer Telnet negotiations -u, --udp Use UDP instead of default TCP --sctp Use SCTP instead of default TCP -v, --verbose Set verbosity level (can be used up to 3 times) -w, --wait <time> Connect timeout --append-output Append rather than clobber specified output files --send-only Only send data, ignoring received; quit on EOF --recv-only Only receive data, never send anything --allow Allow only given hosts to connect to Ncat --allowfile A file of hosts allowed to connect to Ncat --deny Deny given hosts from connecting to Ncat --denyfile A file of hosts denied from connecting to Ncat --broker Enable Ncat's connection brokering mode --chat Start a simple Ncat chat server --proxy <addr[:port]> Specify address of host to proxy through --proxy-type <type> Specify proxy type ("http" or "socks4") --proxy-auth <auth> Authenticate with HTTP or SOCKS proxy server --ssl Connect or listen with SSL --ssl-cert Specify SSL certificate file (PEM) for listening --ssl-key Specify SSL private key (PEM) for listening --ssl-verify Verify trust and domain name of certificates --ssl-trustfile PEM file containing trusted SSL certificates --version Display Ncat's version information and exit See the ncat(1) manpage for full options, descriptions and usage examples