[FreeBSD-users-jp 95808] Re: nc(1)を使ってデータを送信しても完了にならない

Naomichi Nonaka nao @ enuenu.org
2016年 5月 14日 (土) 14:00:22 UTC


野中です。

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
> root at 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&sect=0
>
>
> Linux JM Projectのほうにはnc(1)の日本語訳はないようです。
> https://linuxjm.osdn.jp/
>
> ========================================================================
> (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 at freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-users-jp
> To unsubscribe, send any mail to "freebsd-users-jp-unsubscribe at freebsd.org"



freebsd-users-jp メーリングリストの案内