[FreeBSD-users-jp 95809] Re: nc(1)を使ってデータを送信しても完了にならない
IIJIMA Hiromitsu
delmonta @ dennougedougakkai-ndd.org
2016年 5月 14日 (土) 19:24:04 UTC
いいじまです。
> 野中です。
> ncは使ったことが無いのですが、manを見た範囲ではクライアント側に
> -Nオプションを付けるとうまくいくかもしれません。
はい。今回のテストケースはではこれでうまくいきました。
念のためいくつか調べてみましたので、以下つらつらとメモしておきます。
☆ ☆ ☆
まず、https://www.freebsd.org/cgi/man.cgi で参照できる各種OSの中では、
CentOS、Darwin、RedHat、SuSE Linuxのncには-Nがありません。
https://www.freebsd.org/cgi/man.cgi?query=nc&manpath=CentOS+7.1
https://www.freebsd.org/cgi/man.cgi?query=nc&manpath=Darwin+8.0.1%2Fppc
https://www.freebsd.org/cgi/man.cgi?query=nc&manpath=Red+Hat+Linux%2Fi386+9
https://www.freebsd.org/cgi/man.cgi?query=nc&manpath=SuSE+Linux%2Fi386+11.3
Debian、HP-UX、NetBSD、Solaris、UNTRIXにはそもそもnc自体がないようです。
(ベースシステムとは別パッケージになっているだけ?)
https://www.freebsd.org/cgi/man.cgi?query=nc&manpath=Debian+8.1.0
https://www.freebsd.org/cgi/man.cgi?query=nc&manpath=HP-UX+11.22
https://www.freebsd.org/cgi/man.cgi?query=nc&manpath=NetBSD+7.0
https://www.freebsd.org/cgi/man.cgi?query=nc&manpath=SunOS+5.10
https://www.freebsd.org/cgi/man.cgi?query=nc&manpath=ULTRIX+4.2
手元にUbuntuのバーチャルマシンがあるのでそちらでも試してみましたが、
やはり -N はありません。
☆ ☆ ☆
それから、これは釈迦に説法ですが、nc -N が使えるかどうかの判定に
% nc -h |& egrep '[-]N[^[:alnum:]] >& /dev/null
を実行して終了コード $? で判別しようとすると罠にはまります。
FreeBSDの場合、nc -h は1を返し、egrepは0を返します。
で、このパイプをbashで実行すると $? は0になります。
ところが、同じコマンドをtcshで実行すると $? は1になります。
同じことをUbuntuでもやってみたのですが、こちらの場合、nc -h は
0を返し、egrepは1を返すので、$? はbashでもtcshでも1になります。
結局のところ、nc -N が使えるかどうかの判定には
% test -n "`nc -h |& egrep '[-]N[^[:alnum:]]'`"
あたりを使う必要があります。
☆ ☆ ☆
あと、一つだけ訂正です。
今回の実験で FreeBSD→Linux の接続がうまくいかなかった犯人は、
FreeBSDのncコマンドではなく、Linux側のファイヤーウォールのようです。
まず、Linux側で
% echo WELCOME | nc -l 8086 &
としてサーバを立てます。
で、FreeBSDから
% echo GET | nc -N m2.valueserver.jp 8086
とすると、いつまでもだんまりです。
そこでCtrl+Cで強制終了して、次に
% telnet m2.valueserver.jp 8086
とすると
Trying 157.7.184.32...
(しばらく待たされる)
telnet: connect to address 157.7.184.32: Operation timed out
telnet: Unable to connect to remote host
だそうで、要するにTCPの接続がブラックホールに吸い込まれています。
念のため、同じFreeBSDクライアントの上で
% telnet localhost 8087
としてみると、こちらは即座に
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused
Trying ::1...
telnet: connect to address ::1: Connection refused
telnet: Unable to connect to remote host
と返ってきます。
…徒労でした。
========================================================================
(Mr.) IIJIMA Hiromitsu aka Delmonta <delmonta at dennougedougakkai-ndd.org>
飯嶋 浩光 / でるもんた・いいじま ; (任同)電脳外道学会 代表取締役椅子人
------------------------------------------------------------------------
Web (Japanese): http://www.dennougedougakkai-ndd.org/
Twitter: @delmonta_iijima, @kabu_agare, #放送大学, #OUJ
Yahoo! Japan: delmonta_iijima
------------------------------------------------------------------------
マニアツクで綾しいクイヅbot、運用開始!現在、購読者・出題者とも募集中。
※購読はこちらから → https://twitter.com/AyaC_KaltQ
※出題希望のかたは → http://kaltq.wicurio.com/
========================================================================
freebsd-users-jp メーリングリストの案内