- 論壇徽章:
- 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 發(fā)出PORT命令,ftp help 函數竟沒有輸出任何東西,調試開關都已打開,奇怪。
請熟悉linux netfilter conntrack 的朋友幫忙釋疑!
|
|