home wiki.fukuchiharuki.me
Menu

キーワード

  • FTPClient
  • PASV
  • パッシブモード

現象

FTPClientでFTP/putできない。環境は、ファイアウォールの都合上パッシブモードでしか送信できない。

エラーになるのは次のコード。

client.storeFile(remote, local)

原因

次のコードでパッシブモードにしたつもりだができていない。

client.pasv()

対策

こうすべきだったようです。

client.enterLocalPassiveMode()

備考

tcpdumpすると確かにPORTコマンドを発行してるようでした。(というかPASVもdenyされてたんだけど)

# tcpdump -i lo -A port ftp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 96 bytes

client → server

<%.x<%.xPASV

client ← server あれ?

<%.x<%.x550 Permission denied.

client → server

<%.y<%.xTYPE I

client ← server

<%.y<%.y200 Switching to Binary mode.

client → server ここです!

<%.y<%.yPORT 127,0,0,1,231,155

client ← server 受け入れられてしまった!

<%.y<%.y200 PORT command successful. C

client → server アクティブモード?

<%.y<%.ySTOR /path/to/file

参考