MAC(Media Access Control,媒体访问控制)地址表记录了 MAC 地址与接口的对应关系,以及接口所属的 VLAN 等信息。设备在转发报文时,根据报文的目的 MAC 地址查询 MAC 地址表,如果MAC地址表中包含与报文目的MAC地址对应的表项,则直接通过该表项中的出接口转发该报文;如果 MAC 地址表中没有包含报文目的 MAC 地址对应的表项时,设备将采取广播方式通过对应VLAN 内除接收接口外的所有接口转发该报文。
MAC地址表记录了目的MAC地址、MAC地址对应的出接口以及所属的VLAN ID。在转发数据时,设备根据报文中的目的MAC地址查询MAC地址表,快速定位出接口,从而减少广播。
MAC 地址表项的分类
一、示例:静态MAC地址表项及MAC黑洞
# 增加一个静态 MAC 地址表项,目的地址为 000f-e235-dc71,出接口为 GE1/0/1,且该接口属于 VLAN 2
<H3C> system-view
[H3C] mac-address static 000f-e235-dc71 interface GigabitEthernet 1/0/1 vlan 2
# 增加一个黑洞 MAC 地址表项,地址为 000f-e235-abcd,MAC地址或端口属于 VLAN 10
[H3C] mac-address blackhole 000f-e235-abcd vlan 10
# 配置动态 MAC 地址表项的老化时间为 500 秒
[H3C] mac-address timer aging 500
二、步骤:封禁MAC地址(MAC地址黑洞)
示例1:查找并封禁网络中私接路由器
说明:局域网中发现IP为192.168.1.1的TP-Link设备,此可能存在私接网络设备,通过IP地址查找对应MAC地址,然后在交换机中从上到下逐级查找该MAC所连接的接口。
1. 在PC的cmd命令行,使用arp -a命令查询IP对应的MAC地址,假设所得MAC为8C-16-45-F1-EB-A6
# 显示(所有)IP到MAC地址的地址转换表;也即在自动缓存中读取IP地址和mac地址的对应表
C:\>arp -a
# 显示指定IP地址192.168.1.1的对应MAC地址
C:\>arp -a 192.168.1.1
注:ARP是地址解析协议,通过IP地址找到设备的MAC地址。
2. 在交换机上逐级查询该MAC地址对应的接口,假设对应接口为接入交换机SW1中的G1/0/10口,VLAN为50
# 显示所有MAC地址信息(状态、接口、VLAN、Aging等)
<H3C> display mac-address
# 显示某一MAC为8C-16-45-F1-EB-A6的MAC地址信息(状态、接口、VLAN、Aging等)
<H3C> display mac-address 8C16-45F1-EBA6
3. 在对应交换机SW1中,将该MAC加入MAC地址黑洞,从而禁用该MAC地址
# 将8C-16-45-F1-EB-A6(所属vlan为50)加入MAC地址黑洞禁用该MAC
[SW1] mac-address blackhole 8C16-45F1-EBA6 vlan 50
注:通过display mac-address查看该MAC地址状态变化,State由Learned变为Blackhole。
4. 若需要禁用该MAC的对应接口,可直接关闭该接口
# 将交换机SW1接口G1/0/10关闭,禁用该接口
[SW1] interface GigabitEthernet 1/0/10
[SW1] shutdown
示例2:封禁中病毒IP地址对应PC机
说明:安全设备发现网络中感染病毒的PC的IP地址为10.131.102.72,封禁这台IP地址的PC。
1. 通过ping该IP地址测试PC是否在线:
A. 若PC在线,在交换机中通过arp命令显示IP地址对应的MAC地址及交换机接口,根据该IP对应的接口信息逐级查找该IP的接入交换机及其MAC地址,假设MAC地址为8C-16-45-F1-EB-A6
<H3C> display arp 10.131.102.72
B. 若PC不在线,则无法通过arp命令显示IP地址的MAC地址及交换机接口,此时可以通过查看DHCP服务器为客户端分配的IP地址信息,来获取该IP对应的MAC地址,假设得到的MAC地址为8C-16-45-F1-EB-A6
<H3C> display dhcp server ip-in-use
# 显示DHCP服务器为客户端分配的某一IP地址的信息
<H3C> display dhcp server ip-in-use ip 10.131.102.72
2. 在对应接入交换机SW1中,查找该IP对应的MAC和vlan,假设vlan为50,将该MAC加入MAC地址黑洞,从而禁用该MAC地址
[SW1] mac-address blackhole 8C16-45F1-EBA6 vlan 50
3. 在交换机SW1中,查看该MAC地址的状态,Blackhole为封禁状态,Learned为正常学习状态
[SW1] display mac-address 8C16-45F1-EBA6
三、命令格式
3.1 配置MAC地址表
# 全局配置静态/动态MAC地址表项
[H3C] mac-address { dynamic | static } mac-address interface interface-type interface-number vlan vlan-id
# 接口配置静态/动态MAC地址表项
[H3C-GigabitEthernet1/0/1] mac-address { dynamic | static } mac-address vlan vlan-id
# 配置目的黑洞MAC地址表项
[H3C] mac-address blackhole mac-address vlan vlan-id
# 关闭接口的MAC地址学习功能。注,关闭MAC地址学习功能可以有效防止这种攻击:黑客使用大量源MAC地址不同的报文攻击设备,导致设备MAC地址表资源耗尽,造成设备无法根据网络的变化更新MAC地址表。
[H3C-GigabitEthernet1/0/1] undo mac-address mac-learning enable
# 配置动态 MAC 地址表项的老化时间,缺省时间为为300秒
[H3C] mac-address timer { aging seconds | no-aging }
3.2 MAC地址表显示和维护
# 查看MAC地址表信息
<H3C> display mac-address [ mac-address [ vlan vlan-id ] | [ [ dynamic | static ] [ interface interface-type interface-number ] | blackhole ] [ vlan vlan-id ] [ count ] ]
# 显示MAC地址表动态表项的老化时间
<H3C> display mac-address aging-time
# 显示MAC地址学习功能的使能状态
<H3C> display mac-address mac-learning [ interface interface-type interface-number ]
对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl
我想用ruby编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序
我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此
我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r
刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr
我有一个在Linux服务器上运行的ruby脚本。它不使用rails或任何东西。它基本上是一个命令行ruby脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge
我想将我的MacSnowLeopardruby从1.8.7升级到1.9.1版本,有人知道轻松且最好的升级方法吗?因为我读了一些论坛/帖子/博客/讨论说覆盖苹果发布的ruby不好将Rails从版本2.2.2升级到2.3.8的最佳方法是什么?因为我找到的所有信息都仅适用于豹/老虎,而且很少有关于雪豹的复杂文章。他们还说覆盖apple提供的rails不好吗。谁能帮帮我?谢谢。 最佳答案 DanBenjamin有一些greatinstructionsforcompilingandinstallingRuby,RubyGemsandRai