- 论坛徽章:
- 0
|
本帖最后由 peruke 于 2013-07-12 10:32 编辑
查看了内核nf_conntrack_ftp.c,有注册ftp helper的代码:- static int __init nf_conntrack_ftp_init(void)
- {
- int i, j = -1, ret = 0;
- char *tmpname;
- ftp_buffer = kmalloc(65536, GFP_KERNEL);
- if (!ftp_buffer)
- return -ENOMEM;
- if (ports_c == 0)
- ports[ports_c++] = FTP_PORT;
- /* FIXME should be configurable whether IPv4 and IPv6 FTP connections
- are tracked or not - YK */
- for (i = 0; i < ports_c; i++) {
- ftp[i][0].tuple.src.l3num = PF_INET;
- ftp[i][1].tuple.src.l3num = PF_INET6;
- for (j = 0; j < 2; j++) {
- ftp[i][j].tuple.src.u.tcp.port = htons(ports[i]);
- ftp[i][j].tuple.dst.protonum = IPPROTO_TCP;
- ftp[i][j].mask.src.l3num = 0xFFFF;
- ftp[i][j].mask.src.u.tcp.port = htons(0xFFFF);
- ftp[i][j].mask.dst.protonum = 0xFF;
- ftp[i][j].max_expected = 1;
- ftp[i][j].timeout = 5 * 60; /* 5 Minutes */
- ftp[i][j].me = THIS_MODULE;
- ftp[i][j].help = help;
- tmpname = &ftp_names[i][j][0];
- if (ports[i] == FTP_PORT)
- sprintf(tmpname, "ftp");
- else
- sprintf(tmpname, "ftp-%d", ports[i]);
- ftp[i][j].name = tmpname;
- DEBUGP("nf_ct_ftp: registering helper for pf: %d "
- "port: %d\n",
- ftp[i][j].tuple.src.l3num, ports[i]);
- ret = nf_conntrack_helper_register(&ftp[i][j]);
- if (ret) {
- printk("nf_ct_ftp: failed to register helper "
- " for pf: %d port: %d\n",
- ftp[i][j].tuple.src.l3num, ports[i]);
- nf_conntrack_ftp_fini();
- return ret;
- }
- }
- }
- return 0;
- }
复制代码 并且在syslog中也有记录:
Netfilter messages via NETLINK v0.30.
nf_conntrack version 0.5.0 (256 buckets, 2048 max)
nf_ct_ftp: registering helper for pf: 2 port: 21
nf_ct_ftp: registering helper for pf: 10 port: 21
ip_tables: (C) 2000-2006 Netfilter Core Team, Type=Restricted Cone
ipt_time loading
说明ftp helper 确实被注册了,也没有出错。
但是,有LAN到WAN的ftp 连接时,且LAN端client 发出PORT命令,ftp help 函数竟没有输出任何东西,调试开关都已打开,奇怪。
请熟悉linux netfilter conntrack 的朋友帮忙释疑!!
|
|