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"