+ -
当前位置:首页 → 问答吧 → 丢包问题

丢包问题

时间:2010-12-31

来源:互联网

源地址是本机、目的地址是其他主机的包,发往本机,会被丢弃,内核在处理这样包的代码,找了半天没找到,有哪位大侠知道呀,告知下...

作者: 烟雾弹下的真实   发布时间: 2010-12-31

本帖最后由 Godbach 于 2010-12-31 10:22 编辑

ip_rcv 的刚开始,是会判断是否是 OTHERHOST。

不过这个 OTHERHOST 是根据目的 MAC 判断的

作者: Godbach   发布时间: 2010-12-31

ip_input.c 中
  1. /*
  2. *         Main IP Receive routine.
  3. */
  4. int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt, struct net_device *orig_dev)
  5. {
  6.         struct iphdr *iph;
  7.         u32 len;

  8.         /* When the interface is in promisc. mode, drop all the crap
  9.          * that it receives, do not try to analyse it.
  10.          */
  11.         if (skb->pkt_type == PACKET_OTHERHOST)
  12.                 goto drop;
复制代码

作者: Godbach   发布时间: 2010-12-31

回复 Godbach


    我的目的mac也是本机,只是源地址也是本机,丢包不是因为mac地址丢包;本以为目的地址非本机,就能路由转发,却发现被丢弃了。

作者: 烟雾弹下的真实   发布时间: 2010-12-31

外来的数据包,源地址又是本机,是有可能存在攻击的。
首先确定一下,你的机器开启转发功能了吗

作者: Godbach   发布时间: 2010-12-31

回复 Godbach


    开启了。就是不知道内核在哪里丢的

作者: 烟雾弹下的真实   发布时间: 2010-12-31

确认能查到路由吗。我总觉得源 IP 市是本机的有问题。你写几个 hook,分别放在 PREROUTING 和 FORWARD,看一下能否截获到数据包。

或者用 iptables 规则,在 FORWARD 处做一下 LOG 记录,结合抓包看一下

作者: Godbach   发布时间: 2010-12-31