有没有 FTP 大佬,请帮我看下为什么会报 425 错误

3 天前
 unt
用的是 vsftp ,pasv_promiscuous 是默认关闭的。
源地址是 4G 物联网模组发起的,sim 卡是海外漫游卡。
下面是抓包结果,全程 ip 和端口都是没变的呀。
谢谢各位老板

1353 次点击
所在节点    程序员
12 条回复
ntedshen
3 天前
所以客户端传 pasv 了吗?
我只自己写过不晓得 vsftp 怎么个实现。。。
unt
3 天前
@ntedshen 传 pasv 了
unt
3 天前
@ntedshen 不晓得 vsftp 的 bad ip 是怎么判定的。 网上说是因为建立连接的时候和传输数据的时候两者 ip 端口发生了变化,但是我抓包看到是一样的,没有变化。 然后详细的日志我也看了,每个步骤也都不少
ntedshen
3 天前
remote_fd == -2

/* SECURITY:
* Reject the connection if it wasn't from the same IP as the
* control connection. */
if (!tunable_pasv_promiscuous)
if (!vsf_sysutil_sockaddr_addr_equal(p_sess->p_remote_addr, p_accept_addr))
return -2;

还是得开。。。
unt
3 天前
@ntedshen 大佬,直接源码分析,厉害了。。。但是我对了抓包数据,从始至终,ip 和端口就没有变过呀
ntedshen
3 天前
@unt 中间经过 nat 或者什么转发导致了 ip 判断的不对吧。。。我不太确定,感觉只能本地先试一下了。。。
客户端发送 pasv 请求的话是进入了被动模式,应该不会判断这个,传 port 的话倒是有可能(主动模式下是客户端自己传地址的)。。。
xiangyuecn
3 天前
ftp 这个古董协议也是奇葩,你说他简单吧,70 年代设计的用 2 条连接来做控制和传数据。传数据这条连接的建立应该没有主动模式了( PORT 服务器发起连接,连个鬼),全是被动模式( PASV 客户端发起连接)
laminux29
3 天前
不要用 FTP 协议,太老了又麻烦,换基于 SSH 的 SFTP ,SSH 这套协议才是最强的,安全 + 网络兼容性都拉满。
unt
3 天前
@laminux29 做嵌入式的,可能 FTP 更熟悉吧
unt
3 天前
@ntedshen 不是,是 pasv 模式下触发的这个判断,所以叫 pasv_promiscuous
ntedshen
3 天前
@unt p_remote_addr -> getpeername()

p_accept_addr
-> vsf_sysutil_accept_timeout
-> remote_addr.u.u_sockaddr_in
-> vsf_sysutil_sockaddr_set_ipv4addr
-> handle_port
str_equal_text(&p_sess->ftp_cmd_str, "PORT")

emm 。。。
现在应该就是在主动模式,传了 pasv 但是可能没生效。。。
pasv_promiscuous 这个能开就开吧
xqzr
3 天前
NAT ALG:FTP

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1156058

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX