- 论坛徽章:
- 0
|
NAT服务器上想跟踪icmp的连接
ping x.x.x.x//从内网ping本地外网服务器
grep ^icmp /proc/net/ip_conntrack总是没有连接记录
grep conn /proc/slabinfo也不见对象数量有任何改变
开始怀疑是没有生成连接,但是在NAT上是不可能,排除
ping www.sohu.com却能看到记录,不过不是每次都能
经过一番折腾,查看代码后才知原因所在
static int icmp_packet(struct ip_conntrack *ct,
struct iphdr *iph, size_t len,
enum ip_conntrack_info ctinfo)
{
/* FIXME: Should keep count of orig - reply packets: if == 0,
destroy --RR */
/* Delete connection immediately on reply: won't actually
vanish as we still have skb */
if (CTINFO2DIR(ctinfo) == IP_CT_DIR_REPLY) {
//icmp ping包的连接立即会消失,如果echo reply延迟很小的话
//因此利用grep ^icmp /proc/net/ip_conntrack和grep conn /proc/slabinfo通常跟踪不到
if (del_timer(&ct->timeout))
ct->timeout.function((unsigned long)ct);
} else
ip_ct_refresh(ct, ICMP_TIMEOUT);
return NF_ACCEPT;
}
只有ping -f x.x.x.x可增加跟踪到的概率,或ping 不存在的地址也能看到
个人觉得在收到echo reply后应该能够延迟几秒钟再回收连接记录,否则
flooding ping导致的开销不小 |
|