At Sun, 15 May 2016 04:24:02 +0900,
IIJIMA Hiromitsu wrote:
> 
> いいじまです。
> 
> > 野中です。
> > 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になります。

えーと,全てのソースは見てないので憶測に過ぎませんが,基本的
に *BSD* ではもともと -h や --help なんて洒落たオプションは
なく,間違ったのを指定すると常に usage を返す仕様になってい
るのでは? nc は -h がありましたが,でも基本 1 を返している
のでは? sh で見ると,

$ uname -a
FreeBSD freebsd-11c 11.0-CURRENT FreeBSD 11.0-CURRENT #3 r298951: Wed May  4 
06:50:18 JST 2016     admin@freebsd-11c:/usr/obj/usr/src/sys/GENERIC  amd64
$ if nc -h > /dev/null 2>&1; then
> echo true
> else
> echo false
> fi
false
$ 

ということで,やはり -h は 1 を返してます.

> 
> 結局のところ、nc -N が使えるかどうかの判定には
>     % test -n "`nc -h |& egrep '[-]N[^[:alnum:]]'`"
> あたりを使う必要があります。

sh ですが,直接,

if nc -N foo 1234 < bar; then
...

とかすれば良いような...

> 
> ☆ ☆ ☆
> 
> あと、一つだけ訂正です。
> 今回の実験で 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 <delmo...@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@freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-users-jp
> To unsubscribe, send any mail to "freebsd-users-jp-unsubscr...@freebsd.org"
> 

---
KIRIYAMA Kazuhiko
_______________________________________________
freebsd-users-jp@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-users-jp
To unsubscribe, send any mail to "freebsd-users-jp-unsubscr...@freebsd.org"

メールによる返信