下面这段代码应该是arp_ignore/arp_filter的最好的注脚;在ARP_ignore通过的情况下,我再去判断ARP_filter,这个ARP_filter其实就是为了判断,当数据包再出去的时候,是不是还是通过我这个网络设备;如果是的话,那么就放走,如果不是的话,那么就不行;其实有点反向路由的意思,看下ARP_filter的代码

 799             dont_send = arp_ignore(in_dev, sip, tip);
800 if (!dont_send && IN_DEV_ARPFILTER(in_dev))
801 dont_send = arp_filter(sip, tip, dev);
802 if (!dont_send) {
803 n = neigh_event_ns(&arp_tbl, sha, &sip, dev);
804 if (n) {
805 arp_send_dst(ARPOP_REPLY, ETH_P_ARP,
806 sip, dev, tip, sha,
807 dev->dev_addr, sha,
808 reply_dst);
809 neigh_release(n);
810 }
811 }
812 goto out_consume_skb;

ARP_filter的代码,收到数据包之后有了源ip和目的ip,看下返回的设备是那个,如果返回的设备并不是我接收这个包的设备,那么就会防止这张网卡来发送arp的数据包啦!

static int arp_filter(__be32 sip, __be32 tip, struct net_device *dev)
{
struct rtable *rt;
int flag = 0;
/*unsigned long now; */
struct net *net = dev_net(dev); rt = ip_route_output(net, sip, tip, 0, 0);
if (IS_ERR(rt))
return 1;
if (rt->dst.dev != dev) {
__NET_INC_STATS(net, LINUX_MIB_ARPFILTER);
flag = 1;
}
ip_rt_put(rt);
return flag;
}

那么ARP_filte和rp_filter又是要有两个问题,这两个参数都是进行反向路由检查的,那么有什么区别? 可以看到rp_filter是在收到包的时候达到了ip层之后,所以对于arp协议,还没有到ip层,所以就增加了一个ARP_filter.

那么再看ARP_filter是干嘛?是说这个数据包仍然得是从这个网卡返回的!这似乎是很容易达成的呢,因为网卡都是在一个局域网中呢!网络都是从这个数据包中来的,但是仍然是有问题的,但是这都是最简单的场景,以后研究网络问题,我们都要网虚拟化和网络攻防的方向考虑.ARP_filter要处理的场景就是多网卡.

现在的场景是允许一台机器,多张网卡连接到一个局域网!

竟然还有这种丧心病狂的玩法,这个哥们在这里讲了一些,所以的这些问题都出现在主机中的两个端口的处于相同的子网之中,

http://huntxu.github.io/2015-12-24-arp-filter-vs-arp-ignore.html

一台主机两张网卡位于相同的子网,这个有什么应用场景么

arp_filter/arp_ignore/rp_filter的更多相关文章

  1. 自学网络 arp_ignore/arp_announce

    1)机器上有好几个IP地址,如何让网卡只接收自己IP地址的数据包: 如何只接收自己网卡的数据包 http://www.cnblogs.com/honpey/p/8447819.html 相关的配置ar ...

  2. LVS 之 DR model arp_announce arp_ignore转

    DR模式的收发流程: 1)客户端发起请求到调度器的vip.2)调度器根据调度算法在各个服务器中动态选择一台服务器,但它不修改ip报文,而是将数据帧的MAC地址改为选出服务器的MAC地址.再将修改名的数 ...

  3. LVS负载均衡中arp_ignore和arp_annonuce参数配置的含义

    先简单的介绍下关于LVS负载均衡 LVS(Linux  Virtual Server)Linux服务器集群系统 针对高可伸缩,高可用服务的需求,给予IP层和内容请求分发的负载均衡调度解决方法,并在Li ...

  4. Linux 内核参数 arp_ignore & arp_announce 详解

    arp_ignore定义了对目标地址为本机IP的ARP询问的不同应答模式. arp_announce对网络接口(网卡)上发出的ARP请求包中的源IP地址作出相应的限制:主机会根据这个参数值的不同选择使 ...

  5. Linux的rp_filter与策略路由

    Linux的rp_filter用于实现反向过滤技术,也即uRPF,它验证反向数据包的流向,以避免伪装IP攻击,但是它和Linux的策略路由却很容易发生冲突,其本质原因在于,uRPF技术强制规定了一个反 ...

  6. (转)Linux内核参数之arp_ignore和arp_announce

    原文:https://blog.csdn.net/ccy19910925/article/details/79960599 一.arp_ignore和arp_announce介绍 arp_ignore ...

  7. Linux内核参数之arp_ignore和arp_announce

    一.arp_ignore和arp_announce介绍 arp_ignore和arp_announce参数都和ARP协议相关,主要用于控制系统返回arp响应和发送arp请求时的动作.这两个参数很重要, ...

  8. arp_ignore

    上一篇文件说了arp_announce,那么到这里arp_ignore,我们直接看代码应该也比较容易立即了 目前我知道的是arp_ignore = 0,只要IP是自己机器上的,都可以回复: 说实话就是 ...

  9. Linux内核参数之rp_filter

    一.rp_filter参数介绍 rp_filter参数用于控制系统是否开启对数据包源地址的校验. 首先看一下Linux内核文档documentation/networking/ip-sysctl.tx ...

随机推荐

  1. Go文件处理

    go语言中对文件处理一般都在os包中 func Mkdir(name string, perm FileMode) error 创建名称为name的目录,权限设置是perm,例如0777 func M ...

  2. Lambda表达式的语法与如何使用Lambda表达式

    Lambda表达式是对象,是一个函数式接口的实例 如何来写Lambda表达式? 看参数 看返回值 代码实例1: package day2; import jdk.nashorn.internal.co ...

  3. 20145234黄斐《Java程序设计》第九周学习总结

    教材学习内容总结 JDBC Java语言访问数据库的一种规范,是一套API.JDBC (Java Database Connectivity) API,即Java数据库编程接口,是一组标准的Java语 ...

  4. 【原创】Odoo开发文档学习之:构建接口扩展(Building Interface Extensions)(边Google翻译边学习)

    构建接口扩展(Building Interface Extensions) 本指南是关于为Odoo的web客户创建模块. 要创建有Odoo的网站,请参见建立网站;要添加业务功能或扩展Odoo的现有业务 ...

  5. LeetCode: 61. Rotate List(Medium)

    1. 原题链接 https://leetcode.com/problems/rotate-list/description/ 2. 题目要求 给出一个链表的第一个结点head和正整数k,然后将从右侧开 ...

  6. myeclipse 配置堆内存

    2.非堆内存分配 JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64:由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4. 打开myeclipse ...

  7. ThinkDev.Data更新日志

    2013-09-29 10:001.重构Where.And.Or.Having.JoinTable代码,新增条件组合查询QueryGroup2.1.1.2.0 2013-09-04 09:001.修复 ...

  8. Adobe Photoshop CC2018最新教程+某宝店铺装修教程

    PS免费教程,ps淘宝店铺装修教程.该资源为本人从某商网站重金买来,现免费分享给大家,下载地址:百度网盘,https://pan.baidu.com/s/127PjFbGwVVUVce1litHFsw

  9. hdu1052Tian Ji -- The Horse Racing(贪心,细节多)

    Tian Ji -- The Horse Racing Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  10. Python列表的深拷贝和浅拷贝

    1. Python列表的拷贝 对于python里面如果想要进行列表的拷贝和复制,具体的操作语句如下: 1) 深拷贝: M=[A,b,a,c] N=M[:] 2) 浅拷贝: N=M 有人说可以直接将M赋 ...