野中です。 ncは使ったことが無いのですが、manを見た範囲ではクライアント側に -Nオプションを付けるとうまくいくかもしれません。
野中 On 2016/05/14 21:42, IIJIMA Hiromitsu wrote:
いいじま@東京・綾瀬です。 ImageMagickの脆弱性検証スクリプトを調べていて発見したのですが、 nc(1) で立てたサーバとクライアントの間で通信を行おうとすると、 いつまで経っても送信終了と認識してくれないようです。 ☆ ☆ ☆ 環境1(FreeBSD): sodans3:~> uname -a FreeBSD sodans3.funini.com 9.3-RELEASE-p24 FreeBSD 9.3-RELEASE-p24 #0: Sat Aug 22 01:54:44 UTC 2015 r...@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC amd64 環境2(Linux、ディストリビューション不明): m2:~$ uname -a Linux m2.valueserver.jp 2.6.32-573.18.1.el6.x86_64 #1 SMP Tue Feb 9 22:46:17 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux ☆ ☆ ☆ FreeBSDのホストで次のように操作すると、stdinからの入力が既に終わって いるのに、サーバが接続を切ってくれません。 sodans3:~> nc -l 8086 & [1] 55594 sodans3:~> echo ok | nc localhost 8086 ok (Ctrl+Cで停めるまでずっと入力待ちになる。Ctrl+Dを打ってもダメ。) ^C [1] + 中断(tty入力) nc -l 8086 sodans3:~> kill %1 [1] 終了 nc -l 8086 あるいは、クライアント側にncではなくtelnetを使うと、次のようになります。 sodans3:~> nc -l 8086 & [2] 55900 sodans3:~> telnet localhost 8086 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. ^C?? ←PuTTYの場合、半角の'?'が全角にひきのばされた文字が2つ表示される ^D (別のコンソールから killall telnet する) 終了 [2] + 中断(tty入力) nc -l 8086 sodans3:~> fg nc -l 8086 (↑上記の1行が表示されたあと、すぐにシェルプロンプトに戻る) sodans3:~> ps | grep nc (何も出てこない) ☆ ☆ ☆ 同じことをLinuxで実行すると、きちんと終わってくれます。 m2:~$ nc -l 8086 & [1] 23568 m2:~$ echo ok | nc localhost 8086 ok [1] + Done nc -l 8086 同じくtelnetの場合。 m2:~$ nc -l 8086 & [1] 24707 m2:~$ telnet localhost 8086 Trying ::1... telnet: connect to address ::1: Connection refused Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. ^C?? ←これも半角の '?' が全角幅にひきのばされた文字 (killall telnet) Terminated [1] + Suspended (tty input) nc -l 8086 m2:~$ fg nc -l 8086 ^C ←こちらはCtrl+CかCtrl+Dを打つまで待っている ☆ ☆ ☆ FreeBSDでも、クライアント側を nc -z にすればきちんと終わります。 sodans3:~> nc -l 8086 & [1] 55728 sodans3:~> nc -z localhost 8086 Connection to localhost 8086 port [tcp/*] succeeded! sodans3:~> [1] 終了 nc -l 8086 ☆ ☆ ☆ サーバがFreeBSD、クライアントがLinuxの場合はきちんと終わります。 sodans3:~> nc -l 8086 m2:~$ echo ok | nc sodans3.funini.com 8086 ☆ ☆ ☆ 逆に、サーバがLinux、クライアントがFreeBSDだと、今度は nc -z を使っても 終わってくれません。 m2:~$ nc -l 8086 sodans3:~> echo ok | nc m2.valueserver.jp 8086 (Linux側のコンソールには何も表示されない。) ^C sodans3:~> nc -z m2.valueserver.jp 8086 (これでもやはりサーバは終わってくれない。) ^C ☆ ☆ ☆ はてさて、どこから手をつければいいのでしょうか…。 私はTCPの原理を全く理解していないので、ソースを読もうにもお手上げです。 ☆ ☆ ☆ PS マニュアルの日本語訳もぜんぜん日本語になっていませんね…英語の原文を 読まないと全く意味が取れません。 http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&lc=1&cmd=&man=nc&dir=jpman-9.3.2%2Fman§=0 Linux JM Projectのほうにはnc(1)の日本語訳はないようです。 https://linuxjm.osdn.jp/ ======================================================================== (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"
_______________________________________________ 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"