便利なNcatコマンド

nc コマンドは正式名称は netcat コマンド。 その派生に ncat コマンドというのがある。紛らわしい。 この ncat の正式名称は NcatNmap に付属したサブプロジェクト。 こちらの方が新しいし便利だ。

–ssl オプションを指定してTLSを導入したりできる。また –allow で接続元ホストを限定できる

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
## host
$ sudo ncat -vl 1100 --allow 192.168.1.125
Ncat: Version 7.70 ( https://nmap.org/ncat )
Ncat: Listening on :::1100
Ncat: Listening on 0.0.0.0:1100
Ncat: Connection from 192.168.1.125.
Ncat: Connection from 192.168.1.125:59320.
fufufu

## vagrant
$ ifconfig | grep inet
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::6c:72ff:fe8e:2ff/64 Scope:Link
          inet addr:192.168.1.125  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe46:aa26/64 Scope:Link
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
$ nc 192.168.1.164 1100
fufufu

下みたいにTLS上で通信もできる。

1
2
3
4
5
6
7
8
9
$ ncat -vl 1443 --ssl --allow 192.168.1.125
Ncat: Version 7.70 ( https://nmap.org/ncat )
Ncat: Generating a temporary 1024-bit RSA key. Use --ssl-key and --ssl-cert to use a permanent one.
Ncat: SHA-1 fingerprint: EC25 3B47 28D5 DC32 0711 0438 0541 AD3F A17A 96DC
Ncat: Listening on :::1443
Ncat: Listening on 0.0.0.0:1443
Ncat: Connection from 192.168.1.125.
Ncat: Connection from 192.168.1.125:48216.
GET /example/https HTTP/1.1

自己署名が使われていることがわかる。 –ssl-cert, –ssl-key で指定できる。 他の ncat のオプションを見てみたところ、ちゃんと ALPN オプションを有効化したり利用する暗号スイートを指定したりもできる。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
cat <<EOF | openssl s_client -connect 192.168.1.164:1443
GET /example/https HTTP/1.1

EOF
CONNECTED(00000003)
depth=0 CN = localhost
verify error:num=18:self signed certificate
verify return:1
depth=0 CN = localhost
verify return:1
---
Certificate chain
 0 s:/CN=localhost
   i:/CN=localhost
---
Server certificate
-----BEGIN CERTIFICATE-----
.....

ref. nc(Ncat)コマンドで覚えておきたい使い方3個(ncコマンドCentOS 7版) | 俺的備忘録 〜なんかいろいろ〜

comments powered by Disqus