
一、配置PC1、PC2和Server


二、配置Router(运用高级ACL配置)


[Router]acl 3000(进入高级ACL配置,编号为3000)
[Router-acl-adv-3000]route 1 permit source 10.1.7.66 0(0为通配符掩码) destination 20.1.1.2 0(0为通配符掩码)
[Router-acl-adv-3000]route 2 deny source 10.1.7.2 0 destination 20.1.1.2 0
//通配符掩码:0.0.0.0,表示唯一匹配的一个主机地址(对于华为eNSP的命令直接输0也可以)
//rule 1/rule 2表示设立一条规则,编号为一/二
//permit是允许通过的意思,deny是不允许通过的意思
[Router-GigabltEthernet0/0/0]traffic-filter outbound acl 3000
//意思是把acl 3000的配置这条规则放在G0/0/0这个端口之下,并在接口上配置基于ACL对报文进行过滤。
# 在Eth2/0/0上配置基于ACL对报文流进行过滤,允许源IP为192.168.0.2/32的报文通过。
<Huawei> system-view
[Huawei] acl 3000
[Huawei-acl-adv-3000] rule 5 permit ip source 192.168.0.2 0
[Huawei-acl-adv-3000] quit
[Huawei] interface ethernet 2/0/0
[Huawei-Ethernet2/0/0] traffic-filter inbound acl 3000
反掩码其实就是用255.255.255.255减去掩码,剩下的就为反掩码。反掩码也必须由从右到左连续的“1”和“0”组成 。通配符掩码和反掩码很不同的一点是反掩码必须有连续的"1"和"0"组成,但是通配符的"1"可以被"0"隔开。通配符掩码中"0"代表精确匹配,"1"代表任意匹配。当然,通配符掩码的计算方式类似于反掩码,在细节上又不同于反掩码。
举例1:192.168.1.0 0.0.0.255这条规则匹配了192.168.1.0 /24 这个网段,共有256个地址
把点分十进制组成的0.0.0.255通配符掩码写成二进制,就变为00000000 00000000 00000000 11111111,因为在通配符掩码中,"0"代表精确匹配,"1"代表任意匹配,因此,IP地址只匹配最后八位11111111,共有2^8=256个地址数可供选择,所以,可以匹配的地址就是192.168.1.0~192.168.1.255
三、实验结果(能Ping通PC2但无法Ping通PC1)



一、配置PC1、PC2和路由器AR1、AR2




二、配置静态路由使得PC1、PC2能够Ping通AR2

[R2]ip route-static 172.16.1.0 24 12.1.1.1
//配置静态路由命令,24表示掩码位数,172.16.1.0是目标网段地址,12.1.1.1是AR2路由器的下一跳地址。


三、配置基本ACL(使得PC1无法访问(Ping通)AR2,PC2可以访问(Ping通)AR2)
1.在路由器R1上配置基本ACL 并确认ACL配置结果,然后调用ACL并且检查ACL调用结果
执行命令rule [ rule-id ] { deny | permit } [ source { source-address source-wildcard | any } | fragment | logging | time-range time-name | { vpn-instance vpn-instance-name | public } ] *
[R1]acl 2000
[R1-acl-basic-2000]rule 1 deny source 172.16.1.100 0 //不允许PC1访问
[R1-acl-basic-2000]rule 2 permit source 172.16.1.200 0 //允许PC2访问
[R1-acl-basic-2000]rule permit //放行其他流量,系统默认为拒绝所有流量
[R1-acl-basic-2000]dis this //查看ACL配置结果
[R1]int g0/0/1 //进入端口号g0/0/1调用ACL
[R1-GigabitEthernet]traffic-filter outbound 2000 //前面ACL实验一已有详细解释,不再赘述。
[R1-GigabitEthernet]dis this //查看g0/0/1接口的ACL调用情况

2.测试PC1、PC2能否访问路由器R2


3.检查ACL的匹配情况

由图可知,由匹配数字,说明配置的基本ACL生效了,一个基本ACL配置实验完成。

一、配置R1、R2、R3、R4




二、配置静态路由使得各个路由器可以连通





三、测试Telnet功能
1.开启Telnet

2.测试Telnet


四、配置高级ACL


[R2-acl-adv-3000]rule deny tcp destination 12.1.1.2 0 destination-port
eq 23 source 172.16.1.200 0
//这是一条ACL规则,意思是拒绝目的TCP端口为23号端口的数据包,(telnet使用的是
//tcp23号端口),作用即如果有数据包是访问某IP的telnet端口的,则会被拒绝掉。
//eq 是端口的意思
inbound代表ACL入接口,outbound代表ACL出接口,可与前面的实验一进行对比。
五、检查实验结果


由图可知路由器R3可以Telnet路由器R2,而路由器R4不能Telnet路由器R2。同时其他业务没有受到影响。


由上面两图可知,ICMP的流量正常。最后,让我们看一下ACL匹配情况。ACL的匹配项验证结果如下图所示:

由上图可知,匹配情况正常,这说明ACL匹配成功,且应用成功。至此,配置实验完毕。

继续实验三的实验完成实验四的配置:
一、配置基于时间的ACL
1.在路由器R2上配置基于时间的ACL

2.调用基于时间的ACL
二、测试
1.在路由器R2上查看时间,如下图所示,验证VRP系统的时间

2.由上图可知,在访问时间内,发起Telnet会话,如下图所示,完成有效时间内的网络测试

3.由上图可知,Telnet配置成功。最后我们来查看一下基于时间的ACL是否匹配,如下图所示,进行生效验证。

由上图可知,有的字段为Active,并且由匹配项,这说明是在正确的时间内进行访问的。读者可以测试一下,不在规则的时间内进行访问的结果,测试结果会告诉你,基于时间的ACL可以有效控制网络访问。
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah
我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击
在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如5到15之间)的子字符串,并将该实例替换为另一个字符串“X”。我的测试字符串s="1foo100bar10gee1"我的初始模式是1个或多个数字的任何字符串,例如,re=Regexp.new(/\d+/)matches=s.scan(re)给出["1","100","10","1"]如果我想用“X”替换第N个匹配项,并且只替换第N个匹配项,我该怎么做?例如,如果我想替换第三个匹配项“10”(匹配项[2]),我不能只说s[matches[2]]="X"因为它做了两次替换“1fooX0barXg
我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以
是否有类似“RVMuse1”或“RVMuselist[0]”之类的内容而不是键入整个版本号。在任何时候,我们都会看到一个可能包含5个或更多ruby的列表,我们可以轻松地键入一个数字而不是X.X.X。这也有助于rvmgemset。 最佳答案 这在RVM2.0中是可能的=>https://docs.google.com/document/d/1xW9GeEpLOWPcddDg_hOPvK4oeLxJmU3Q5FiCNT7nTAc/edit?usp=sharing-知道链接的任何人都可以发表评论
当我在Rails控制台中按向上或向左箭头时,出现此错误:irb(main):001:0>/Users/me/.rvm/gems/ruby-2.0.0-p247/gems/rb-readline-0.4.2/lib/rbreadline.rb:4269:in`blockin_rl_dispatch_subseq':invalidbytesequenceinUTF-8(ArgumentError)我使用rvm来管理我的ruby安装。我正在使用=>ruby-2.0.0-p247[x86_64]我使用bundle来管理我的gem,并且我有rb-readline(0.4.2)(人们推荐的最少
我有一个在Linux服务器上运行的ruby脚本。它不使用rails或任何东西。它基本上是一个命令行ruby脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg
我正在使用Ruby2.1.1和Rails4.1.0.rc1。当执行railsc时,它被锁定了。使用Ctrl-C停止,我得到以下错误日志:~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`gets':Interruptfrom~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`verify_server_version'from~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.
我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新rubygems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems