精华内容
下载资源
问答
  • 通过SNMP查询交换机MAC表以及核心交换机的ARP表,实现查询对应关系 通过SNMP查询交换机MAC表以及核心交换机的ARP表,实现查询对应关系,这样就可以实现后面我们要的功能了,无论是查询IP的MAC,接在什么...

    通过SNMP查询交换机的MAC表以及核心交换机的ARP表,实现查询对应关系

    通过SNMP查询交换机的MAC表以及核心交换机的ARP表,实现查询对应关系,这样就可以实现后面我们要的功能了,无论是查询IP的MAC,接在什么交换机的什么口,还是去匹配机房里异常的进入设备,后面可以加上集成MSSQL数据库,在表里加上每个MAC的所有历史记录,比如什么时候接入交换机,什么时候换到另外的交换机的哪个口。

    下载并引用
    SnmpSharpNet.dll
    https://download.csdn.net/download/chscomfaner/12094545
    先打开交换机的SNMP,打开方法:

    #snmp-server community public ro #配置本路由器的只读字串为public
    #snmp-server community public rw #配置本路由器的读写字串为public
    

    App.config

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <appSettings>
        <add key="community" value="public"/>
        <add key="sw" value="192.168.10.200"/>
        <add key="router" value="192.168.10.1"/>
      </appSettings>
    </configuration>
    

    Programs.cs

    using System;
    using System.Collections.Generic;
    using System.Configuration;
    using System.Linq;
    using System.Text;
    using System.Threading;
     
    
    namespace SNMP_SW
    {
        class Program
        {
            static object locker=new object();
            static List<SW> allSW=new List<SW>();
            static List<Router> allRouter = new List<Router>();
            static void Main(string[] args)
            {
                //扫描交换机
                string[] sws = ConfigurationManager.AppSettings["sw"].Split(',');
                Console.WriteLine("共有{0}个交换机需要扫描", sws.Length);
                //Console.WriteLine("--------------------------------------------------------------------");
                foreach (string sw in sws)
                {
                    if (string.IsNullOrEmpty(sw))
                        continue;
                    ParameterizedThreadStart pst = new ParameterizedThreadStart(scanSw);
                    Thread thread = new Thread(pst);
                    thread.Name = sw + "扫描交换机线程";
                    thread.Start(sw);
                }
                //扫描核心
                string[] routers = ConfigurationManager.AppSettings["router"].Split(',');
                Console.WriteLine("共有{0}个核心需要扫描", routers.Length);            
                foreach (string rou in routers)
                {
                    if (string.IsNullOrEmpty(rou))
                        continue;
                    ParameterizedThreadStart pst = new ParameterizedThreadStart(scanRouter);
                    Thread thread = new Thread(pst);
                    thread.Name = rou + "扫描核心线程";
                    thread.Start(rou);
                }
                Console.WriteLine("--------------------------------------------------------------------");
                Console.ReadLine();
            }
            static void scanRouter(object host)
            {
                Console.WriteLine("启动线程:" + Thread.CurrentThread.Name);
                Dictionary<string, string> arpTable = new Dictionary<string, string>();
                Dictionary<string, string> dicArp = SimpleSnmp.getWalkValue(host.ToString(), SimpleSnmp.OID.arp);
                foreach (var item in dicArp)
                {
                    string[] dip = item.Key.Split('.');
                    string ip = string.Format("{0}.{1}.{2}.{3}", dip[dip.Length - 4], dip[dip.Length - 3], dip[dip.Length - 2], dip[dip.Length - 1]);
                    string mac = item.Value.Replace(" ", ":").ToUpper();
                    arpTable.Add(mac, ip);
                }
                Console.WriteLine("核心的ARP表");
                Console.WriteLine("--------------------------------------------------------------------");
                foreach (var item in arpTable)
                {
                    Console.WriteLine("{0}-{1}", item.Key, item.Value);
                }
                Router rou = new Router(host.ToString(), arpTable);
                string json = Utils.toJson(arpTable);
                Utils.save(host.ToString() + "_ArpTable.txt", json); 
                lock (locker)
                {
                    allRouter.Add(rou);
                }                     
            }
            static void scanSw(object host)
            {
                Console.WriteLine("启动线程:" + Thread.CurrentThread.Name);
                List<string> vlan = new List<string>();
                Dictionary<string, Dictionary<string, string>> macTable = new Dictionary<string, Dictionary<string, string>>();
                //Dictionary<string, string> dicPort = SimpleSnmp.getWalkValue(host.ToString(), SimpleSnmp.OID.port); //获取所有的端口           
                //if (dicPort == null)
                //{
                //    Console.WriteLine(Thread.CurrentThread.Name+"端口请求失败");                 
                //    return;
                //}
                //else
                //{
                //    //Console.WriteLine(Thread.CurrentThread.Name + "端口请求成功");        
                //}
                //foreach (var item in dicPort)
                //{
                //    if (item.Value.Contains("Vl"))
                //    {
                //        vlan.Add(item.Value.Replace("Vl",""));
                //    }
                //    Console.WriteLine("{0}:{1}:{2}", host, item.Key, item.Value);
                //}
                Dictionary<string, string> dicVlan = SimpleSnmp.getWalkValue(host.ToString(), SimpleSnmp.OID.vtp); //获取所有VLAN
                if (dicVlan == null)
                {
                    Console.WriteLine(Thread.CurrentThread.Name + "VLAN请求失败");
                    return;
                }
                else
                {
                    //Console.WriteLine(Thread.CurrentThread.Name + "VLAN请求成功");
                }
                foreach (var item in dicVlan)
                {
                    if (!vlan.Contains(item.Value.Replace("vlan", "")))
                    {
                        vlan.Add(item.Value.Replace("vlan", ""));                    
                    }
                    //Console.WriteLine("{0}:{1}:{2}", host, item.Key, item.Value);
                }
                //Console.WriteLine("获取到了如下所有的VLAN:");
                foreach (var item in vlan)
                {   
                    Dictionary<string, string> mac = SimpleSnmp.getWalkValue(host.ToString(), SimpleSnmp.OID.mac,item);
                    Dictionary<string, string> mac_port = SimpleSnmp.getWalkValue(host.ToString(), SimpleSnmp.OID.mac_port, item);
                    Dictionary<string, string> mac_link_port = new Dictionary<string, string>();
                    foreach (var i in mac)
                    {
                        foreach (var j in mac_port)
                        {
                            string t1 = j.Key.Substring(SimpleSnmp.OID.mac_port.Length - 1);
                            string t2 = i.Key.Substring(SimpleSnmp.OID.mac_port.Length - 1);
                            if (t1==t2) //找端口号
                            {
                                mac_link_port.Add(i.Value, j.Value);
                                //Console.WriteLine("{0}:vlan{1}:{2}:{3}", host, item, i.Value, j.Value);
                                break;
                            }
                        }   
                    }
                    if(mac_link_port.Count>0)
                    macTable.Add(item, mac_link_port);
                }
                foreach (var item in macTable)
                {
                    Console.WriteLine("--------------------------------------------------------------------");
                    Console.WriteLine("SW{0}:VLAN{1}",host.ToString(),item.Key);
                    foreach (var mp in item.Value)
                    {
                        Console.WriteLine("MAC:{0}--PORT:{1}", mp.Key, mp.Value);
                    }
                }
                SW sw = new SW(host.ToString(), macTable);
                string json = Utils.toJson(macTable);
                Utils.save(host.ToString() + "_MacTable.txt", json);
                lock (locker)
                {
                    allSW.Add(sw);
                }            
            } 
        }
        class SW
        {
            string ip;
            Dictionary<string, Dictionary<string, string>> macTable;
            public SW(string ip, Dictionary<string, Dictionary<string, string>> macTable)
            {
                this.ip = ip;
                this.macTable = macTable;
            }
        }
        class Router
        {
            string ip;
            Dictionary<string, string> arpTable;
            public Router(string ip, Dictionary<string, string> arpTable)
            {
                this.ip = ip;
                this.arpTable = arpTable;
            }
        }
    }
    

    SimpleSnmp.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Web;
    using System.Net;
    using SnmpSharpNet;
    using System.Configuration; 
    
    namespace SNMP_SW
    {
        class SimpleSnmp
        {
            public static string communityString = ConfigurationManager.AppSettings["community"];
            public struct OID {
                public static string mac = ".1.3.6.1.2.1.17.4.3.1.1";
                public static string mac_port = ".1.3.6.1.2.1.17.4.3.1.2";
                public static string arp = ".1.3.6.1.2.1.4.22.1.2";
                public static string port = ".1.3.6.1.2.1.31.1.1.1.1";
                public static string vtp = ".1.3.6.1.2.1.47.1.2.1.1.2";
            }
            public SimpleSnmp()
            {
                //   
                //TODO: 在此处添加构造函数逻辑   
                //   
            }
    
            #region 通过oid字符数组获得相应的值
            public static Dictionary<string, string> getOIDValue(string host, string[] oid)
            {
                //返回变量   
                Dictionary<string, string> dic = new Dictionary<string, string>();
                // SNMP community name   
                OctetString community = new OctetString(communityString);
                // Define agent parameters class   
                AgentParameters param = new AgentParameters(community);
                // Set SNMP version to 1 (or 2)   
                param.Version = SnmpVersion.Ver1;
                //param.Version = SnmpVersion.Ver2;
                // Construct the agent address object   
                // IpAddress class is easy to use here because   
                //  it will try to resolve constructor parameter if it doesn't   
                //  parse to an IP address   
                IpAddress agent = new IpAddress(host);
    
                // Construct target   
                UdpTarget target = new UdpTarget((IPAddress)agent, 161, 2000, 1);
    
                // Pdu class used for all requests   
                Pdu pdu = new Pdu(PduType.Get);
    
                foreach (string singleoid in oid)
                {
                    pdu.VbList.Add(singleoid);
                }
    
                // Make SNMP request   
                SnmpV1Packet result = (SnmpV1Packet)target.Request(pdu, param);
    
                // If result is null then agent didn't reply or we couldn't parse the reply.   
                if (result != null)
                {
                    // ErrorStatus other then 0 is an error returned by    
                    // the Agent - see SnmpConstants for error definitions   
                    if (result.Pdu.ErrorStatus == 0)
                    {
                        for (int i = 0; i < result.Pdu.VbList.Count; i++)
                        {
                            dic.Add(result.Pdu.VbList[i].Oid.ToString(), result.Pdu.VbList[i].Value.ToString());
                        }
                        // Reply variables are returned in the same order as they were added   
                        //  to the VbList   
                    }
                }
                target.Close();
                return dic;
            }
            #endregion
    
            #region 通过snmpwalk返回oid根下面的所有值
            public static Dictionary<string, string> getWalkValue(string host, string irootOid,string vlan = null )
            {
                Dictionary<string, string> dic = new Dictionary<string, string>();
                // SNMP community name   
                OctetString community;
                if(vlan==null)
                    community = new OctetString(communityString);
                else
                    community = new OctetString(communityString+"@"+vlan);
                            
                // Define agent parameters class   
                AgentParameters param = new AgentParameters(community);
                // Set SNMP version to 2 (GET-BULK only works with SNMP ver 2 and 3)   
                param.Version = SnmpVersion.Ver2;
                // Construct the agent address object   
                // IpAddress class is easy to use here because   
                //  it will try to resolve constructor parameter if it doesn't   
                //  parse to an IP address   
                IpAddress agent = new IpAddress(host);
    
                // Construct target   
                UdpTarget target = new UdpTarget((IPAddress)agent, 161, 2000, 1);
    
                // Define Oid that is the root of the MIB   
                //  tree you wish to retrieve   
                Oid rootOid = new Oid(irootOid); // ifDescr   
    
                // This Oid represents last Oid returned by   
                //  the SNMP agent   
                Oid lastOid = (Oid)rootOid.Clone();
    
                // Pdu class used for all requests   
                Pdu pdu = new Pdu(PduType.GetBulk);
    
                // In this example, set NonRepeaters value to 0   
                pdu.NonRepeaters = 0;
                // MaxRepetitions tells the agent how many Oid/Value pairs to return   
                // in the response.   
                pdu.MaxRepetitions = 200;
    
                // Loop through results   
                while (lastOid != null)
                {
                    // When Pdu class is first constructed, RequestId is set to 0   
                    // and during encoding id will be set to the random value   
                    // for subsequent requests, id will be set to a value that   
                    // needs to be incremented to have unique request ids for each   
                    // packet   
                    if (pdu.RequestId != 0)
                    {
                        pdu.RequestId += 1;
                    }
                    // Clear Oids from the Pdu class.   
                    pdu.VbList.Clear();
                    // Initialize request PDU with the last retrieved Oid   
                    pdu.VbList.Add(lastOid);
                    // Make SNMP request 
                    SnmpV2Packet result;
                    try
                    {
                        result = (SnmpV2Packet)target.Request(pdu, param);
                    }
                    catch
                    {
                        return null;
                    }
                    
                    // You should catch exceptions in the Request if using in real application.   
    
                    // If result is null then agent didn't reply or we couldn't parse the reply.   
                    if (result != null)
                    {
                        // ErrorStatus other then 0 is an error returned by    
                        // the Agent - see SnmpConstants for error definitions   
                        if (result.Pdu.ErrorStatus == 0)
                        {
                            // Walk through returned variable bindings   
                            foreach (Vb v in result.Pdu.VbList)
                            {
                                // Check that retrieved Oid is "child" of the root OID   
                                if (rootOid.IsRootOf(v.Oid))
                                {
                                    dic.Add(v.Oid.ToString(), v.Value.ToString());
                                }
                                else
                                {
                                    // we have reached the end of the requested   
                                    // MIB tree. Set lastOid to null and exit loop   
                                    lastOid = null;
                                    break;
                                }
                            }
                            //lastOid = null; //取完就结束吧!
                        }
                    }
                }
                target.Close();
                return dic;
            }
            #endregion   
        }
    }
    

    Utils.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Web.Script.Serialization;
    using System.IO;
    namespace SNMP_SW
    {
        class Utils
        {
            public static string toJson(object obj)
            {
                JavaScriptSerializer serializer = new JavaScriptSerializer();
                string json = serializer.Serialize(obj);
                return json;
            }
            public static bool save(string filename, string json)
            {
                try
                {
                    StreamWriter sw = new StreamWriter(filename, false);
                    sw.Write(json);
                    sw.Close();
                    return true;
                }
                catch (Exception)
                {
                    return false;
                }
                
            }
        }
    }
    

    效果:
    在这里插入图片描述

    展开全文
  • 交换机MAC地址管理

    2020-02-04 19:29:13
    文章目录交换机MAC地址管理 交换机MAC地址管理 Switch#show mac address table //查看MAC 地址 Switch(config)#mac address table aging time 120 //设置 交换机的 MAC 地址老化时间 Switch#clear mac ...

    交换机MAC地址表管理

    Switch#show mac address table //查看MAC 地址表
    Switch(config)#mac address table aging time 120 //设置 交换机的 MAC 地址表老化时间
    Switch#clear mac address table dynamic //删除动态 MAC 地址
    Switch(config)#mac address table static 00D0.9713.DE18 vlan 1 interface fastEthernet 0/4 //上添加静态地址表,把 PC1 的 MAC 地址绑定到F0/4 接口

    展开全文
  • 交换机MAC地址

    2017-11-12 18:28:00
    交换机在转发数据时,需要根据MAC地址表来做出相应转发,如果目标主机的MAC地址不在表中,交换机将收到的数据包在...交换机MAC地址表除了动态学习之外,还可以静态手工指定,并且在指定MAC地址时,还可以指定在...
    交换机在转发数据时,需要根据MAC地址表来做出相应转发,如果目标主机的MAC地址不在表中,交换机将收到的数据包在所有活动接口上广播发送。当交换机上的接口状态变成UP之后,将动态从该接口上学习MAC地址,并且将学习到的MAC地址与接口相对应后放入MAC地址表。

    交换机的MAC地址表除了动态学习之外,还可以静态手工指定,并且在指定MAC地址时,还可以指定在某个VLAN的某个接口收到相应的MAC后,将数据包作丢弃处理。

    注:交换机上,一个接口可以对应多个MAC地址,地址的数量无上限,但不超过交换机所支持的MAC地址最大数量。

    一个MAC地址可以同时出现在交换机的多个接口上,但此特性并不被所有型号的交换机支持,在某些型号的交换机上,一个MAC地址只能出现在一个接口上,如果出现在另外一个接口上,将会报错,并且数据转发也会出错。

    1.查看交换机MAC地址表

    (1)查看接口F0/1的MAC地址表

    Switch#sh mac-address-table interface f0/1

    Mac Address Table
    -------------------------------------------
    Vlan Mac Address Type Ports
    ---- ----------- -------- -----
    2 0013.1a2f.0680 DYNAMIC Fa0/1

    Total Mac Addresses for this criterion: 1

    说明:交换机从F0/1上学习到了MAC地址0013.1a2f.0680,并且说明是动态学习到的。
     

    2.手工静态指定MAC地址

    (1)手工静态指定MAC地址
    Switch(config)#mac-address-table static 0013.1a2f.0680 vlan 1 interface f0/2
    说明:指定VLAN 1的接口F0/2的MAC地址为0013.1a2f.0680。

    (2)查看接口F0/2的MAC地址表
    Switch#sh mac-address-table interface f0/2

    Mac Address Table
    -------------------------------------------
    Vlan Mac Address Type Ports
    ---- ----------- -------- -----
    1 0013.1a2f.0680 STATIC Fa0/2
    1 0013.1a7f.a4a0 DYNAMIC Fa0/2
    Total Mac Addresses for this criterion: 2

    说明:接口F0/2上除了动态学习到的MAC地址之外,还有静态手工指定的地址。

    (3)指定丢弃某个MAC地址

    Switch(config)#mac-address-table static 0013.1a2f.0680 vlan 2 drop

    说明:此配置将使源MAC为0013.1a2f.0680的数据包在VLAN 2被丢弃,但在别的VLAN通信正常。

    3.MAC地址老化时间(aging-time)

    交换机在一个接口上学习到MAC地址之后,该MAC与接口的映射并不会永远被保存在MAC地址表中,除非是手工静态指定的。当一台主机从某个接口转移后,交换机再将目标MAC为该主机的数据从该接口发出去是毫无意义的,所以MAC地址在MAC地址表中是有最大停留时间的,称为老化时间(aging-time),当相应MAC地址在超出老化时间后还没有数据传输时,该MAC地址将从表中被清除。默认的MAC地址老化时间为300秒(5分钟)。

    (1)修改MAC地址的老化时间

    说明:只能针对VLAN作修改

    Switch(config)#mac-address-table aging-time 60 vlan 1

    说明:将VLAN 1的MAC地址老化时间改为60秒。

    (2)查看MAC地址的老化时间

    Switch#sh mac-address-table aging-time

    Global Aging Time: 300

    Vlan Aging Time
    ---- ----------
    1 60
    2 300
    3 300
    4 300

    说明:可以看到,VLAN 1的MAC地址老化时间为60秒,其它VLAN保存默认300秒。

    交换机自身MAC地址

    以太网中,每一个节点,都需要一个MAC地址,而以太网交换机可以与多个终端连接,也就有多个节点,因此,交换机上也会有多个MAC地址存在,如交换机的每个接口都有一个MAC地址,包含物理接口和SVI接口。除此之外,还有一个MAC地址是用来表示整台交换机的。

    注:都知道2层交换机的VLAN 1为管理VLAN,一个表示整台交换机的MAC地址通常就是VLAN 1的MAC地址,但这种情况又需要根据交换机型号而定,并不适用于任何型号的交换机。

    某些型号的交换机,所有VLAN的SVI接口MAC地址全部相同,但某些型号却是不同的,但是连续的。


    1.查看交换机的MAC地址

    (1)查看表示整台交换机的MAC地址

    Switch#sh version

    (输出被省略)

    512K bytes of flash-simulated non-volatile configuration memory.
    Base ethernet MAC Address : 00:1A:6C:6F:FB:00
    Motherboard assembly number : 73-9897-06
    Power supply part number : 341-0097-02
    Motherboard serial number : CAT10475C57
    Power supply serial number : AZS104407JE
    Model revision number : D0
    Motherboard revision number : A0
    Model number : WS-C3560-24TS-S
    System serial number : CAT1047RJNU
    Top Assembly Part Number : 800-26160-02
    Top Assembly Revision Number : C0
    Version ID : V02
    CLEI Code Number : COMMG00ARB
    Hardware Board Revision Number : 0x01

    Switch Ports Model SW Version SW Image
    ------ ----- ----- ---------- ----------
    * 1 26 WS-C3560-24TS 12.2(35)SE1 C3560-ADVIPSERVICESK

    说明:表示整台交换机的MAC地址为00:1A:6C:6F:FB:00。

    (2)查看物理接口的MAC地址

    Switch#sh int f0/1

    FastEthernet0/1 is up, line protocol is up (connected)

    Hardware is Fast Ethernet, address is 001a.6c6f.fb03 (bia 001a.6c6f.fb03)

    (输出被省略)

    说明:可以看到,物理接口的MAC地址是连续的,但无论什么型号的交换机,物理接口的MAC地址一定是不同的。

     
    (3)查看SVI接口的MAC地址

    Switch#sh int vlan 1
    Vlan1 is up, line protocol is up
    Hardware is EtherSVI, address is 001a.6c6f.fb40 (bia 001a.6c6f.fb40)
    (输出被省略)

    Switch#sh int vlan 2
    Vlan2 is up, line protocol is up
    Hardware is EtherSVI, address is 001a.6c6f.fb41 (bia 001a.6c6f.fb41)
    (输出被省略)

    说明:可以看到,交换机SVI接口的MAC地址是连续的,但某些型号的交换机,所有SVI接口的MAC地址全部是相同的。

     



    本文转自zcm8483 51CTO博客,原文链接:http://blog.51cto.com/haolun/991593

    展开全文
  • 二层交换机MAC表学习过程

    千次阅读 2012-04-20 19:23:00
    二层交换机工作在链路层,负责数据桢的转发,一个数据桢包含来源MAC,目标MAC,(ARP桢目标MAC不指定) ...MAC表学习过程: 任何桢发送到交换机上时至少包含源MAC,因此交换机就可以记录一条(端口,MAC...

    二层交换机工作在链路层,负责数据桢的转发,一个数据桢包含来源MAC,目标MAC,(ARP桢目标MAC不指定)

    交换机负责将一个端口(物理上的)上收到的桢转发给另外的端口,由于一个端口对应一或多个MAC(对应多个MAC是交换机级连时出现的情况)所以交换机实现了MAC->MAC的数据包转发,

    MAC表学习过程:

    任何桢发送到交换机上时至少包含源MAC,因此交换机就可以记录一条(端口,MAC)记录到“端口MAC映射表”,针对那些交换机无法找到目标端口的目标MAC地址(可能是ARP桢的6字节全0目标MAC),交换机则将该桢转发到除接收端口外的其他全部端口,该过程叫泛洪,而目标主机收到后就会回复该桢,而交换机就可以记录该回复桢的源MAC(即上面的目标MAC)跟端口的对应关系以备下次使用

    广播风暴:

    交换机级连时如果出现回路,会形成网络风暴,如ARP桢,只有源MAC(目标MAC为全为0)对交换机来说一旦存在回路就会两个交换机之间来回发,从而占用信道。同时回路也会造成MAC地址表不稳定。
    参考:http://wenku.baidu.com/view/c7b041768e9951e79b8927c6.html

    //=================================================

    参考:

    文档编号:514
    浏览:1241 评分:22

    用户问题:

    交换机是否会受到 ARP欺骗?
    问题答案:
    交换机是不会受到 ARP欺骗的,ARP攻击也无法对交换机造成任何后果
    问题原理:
    无论交换机在收到主机或者路由器发过来的数据时,都有责任对这些数据进行转发,当它从某个端口收到数据包后,读取数据包中的源 MAC地址,从而就得到了此端口和MAC地址的映射表,当它在映射表中还找不到目标MAC地址来确定应该将数据发向哪个端口时,它就会在除源端口之外的其它所有端口进行泛洪(类似广播),这时,因为是泛洪,所以真正的目标主机能够收到这些数据包,也因为交换机在转发数据包的时候,即使ARP缓存表是空的,它也不需要发ARP广播来请求MAC地址,所以也根本不存在ARP欺骗,如果下面继续有其它端口的数据要转发,交换机再使用上面同样的方法,来学习到每个端口对应的MAC地址,就是因为通过这样向其它端口泛洪来学习到端口和MAC地址的映射表,所以交换机从来没有收到过任何关于MAC地址到IP地址的ARP数据包,况且交换机也从来不读取数据包中的IP地址.
    问题结论:
    1.交换机任何时候都不关心IP地址,因为交换机是二层设备,(三层交换机除外,三层交换   机就当路由器来对待了)。
    2.交换机中的ARP缓存是端口号到MAC地址的映射,与IP地址无关。
    3.交换机中的ARP缓存表是通过在转发数据包时读取源端口和源MAC时记录下来的,而不是通过ARP广播去询问的。
    4.当交换机的缓存表不能反应出目标MAC和端口的映射时,就会向除源端口外的每个端口发一份(泛洪),以保证真正的目标主机能够收到数据。
    5.因为ARP缓存中找不到端口号和MAC地址的映射时,就会泛洪,所以人工地绑定端口和MAC地址只是解决泛洪,让交换机不要因为找不到目标MAC地址而向每个端口都复制数据,这种方法与解决ARP欺骗没有任何关系!
      
    附理解交换机的工作原理:
    交换机是根据自己的 ARP缓存表来提供数据转发的,ARP缓存中记录着端口号对应的MAC地址,当收到数据需要转发时,先读取数据中的源MAC地址,再看来自哪个端口,然后记录下来写入ARP缓存表,最后交换机查找ARP缓存表以确定该把数据发向哪个端口,如果ARP缓存中没有找到答应,那么这时交换机便决定把数据向除了向源端口之外其它所有端口都复制一份,这样便可以万无一失地把数据送到目的地,除非根本没有这个目的地,所以交换机的ARP缓存表是通过读取需要转发的数据的源MAC和源端口来学习到的,不是通过ARP询问来更新的!
    展开全文
  • 交换机实现MAC地址的绑定和过滤
  • 找到三层交换机关于MAC表的OID值

    千次阅读 2015-09-28 22:47:27
    怎么找到三层交换机中关于MAC地址的的OID值? 深信服上网行为管理经常需要这个东西,但官方的工具成功率很低,好像Cisco支持的还可以,对华为彻底不行。 开启三层交换机的snmp v1协议功能,因为下边用到的这两个...
  • 如图1-1所示,在GNS3软件中,使用一台三层交换机(S3950)以及两台PC机,进行配置后根据实验过程中给出的步骤依次查看MAC地址,了解交换机学习MAC地址的过程。 2、业务配置流程图 3、实验过程 1.用两台交换机...
  • SecureCRT中执行的python脚本,用于读取交换机MAC地址等信息。
  • 交换机学习完MAC表之后 假设我将端口为7和8的主机进行对换 那么之后端口为1的主机发送给端口为7的主机数据包的时候,查找MAC表的目的MAC地址,对应的端口号是8(因为之前主机调换了顺序),那数据包会发错。...
  • 请教各位大神,交换机MAC地址满了,接收到的新的MAC如何处理?前提是还没过老化时间。先谢谢大神的不吝赐教!
  • 交换机MAC地址转发

    千次阅读 2012-09-30 10:22:01
    很实用的实验:交换机MAC地址转发 http://wenku.baidu.com/view/0be673e9aeaad1f346933f39.html
  • 华为交换机MAC地址分类与实验

    千次阅读 2020-12-13 11:41:59
    动态项由接口通过对报文中的源MAC地址学习方式动态获取到,这类MAC地址有老化的时间,并且可以自己修改,老化时间越短,交换机对周边的网络变化越敏感,适合在网络拓扑变化比较环境中,老化时间越长,越适合在网络...
  • 查看及配置交换机管理地址 问题 交换机是目前用于组建局域网的主要设备,交换机根据MAC地址实现数据帧的转发,...查看交换机MAC地址 查看CISCO设备邻居信息 交换机地址配置及默认网关 方案 网络拓扑,如图-1所...
  • # snmp ... 通过snmp去获取二层交换机mac表时,只能获取到vlan1下的所有数据,而环境里还配置了vlan10,vlan20,通过查询vlan信息可以获取到10和20的对应信息,但是获取mac表的时候不能获得全部数据
  • Cisco Packet Tracer查看交换机mac表

    千次阅读 2020-03-19 22:46:02
    查看交换机mac地址 为了验证交换机具有分隔不同网段的作用,我们通常借用Cisco Packet Tracer(下面简称CPT)来模拟网络环境。 1. 搭建网络环境 在CPT主界面右下角添加6台计算机设备 在该界面添加一个集线器...
  • 在一个网段中,任一台一个交换机内部的mac表中,不仅存有,同一网段中所有主机的mac地址表项。而且还存有,所连交换机的端口的mac地址表项。   所以交换机mac表项总共有多少呢??? 我的答案是: == 同一...
  • 前提 这个是在计网课上做静态路由的实验的时候遇到的问题。(留给后面的师弟师妹解决方案吧哈哈哈) 毕竟找了蛮久的当时。...clear mac-address-table dynamic 那就祝看到的师弟师妹们绩点高高啦...
  • 交换机端口MAC地址绑定命令
  • 1、通过对中兴二层交换机2850的MAC地址的查看和老化时间的修改,加深对二层交换机MAC地址的建立过程和MAC地址老化时间的理解。 三、实验过程 1、实验任务说明 如下图所示,将一台中兴2850交换机port4口和一个...
  • 华为交换机MAC地址以及命令配置

    千次阅读 2020-07-24 14:32:41
    MAC地址:记录了交换机学习到的其他设备的MAC地址与接口的对应关系,以及接口所属VLAN等信息 mac地址的组成 一、三类mac地址 静态项:由用户手工配置,并下发到各接口板,项不可老化,重启不会丢失。...
  • 查看交换机MAC地址

    千次阅读 2020-06-28 10:05:03
    交换机如何查看各类MAC信息? 一、查看系统MAC 1)盒式交换机: display bridge mac-add System bridge MAC address: xxxx-xxxx-xxxx 2)框式交换机: display system-mac ...三、查看设备学习到的mac表项 1)查看
  • 交换机本地MAC地址认证配置

    千次阅读 2020-05-17 18:58:38
    交换机本地MAC地址认证配置 某子网的用户主机与设备的端口GigabitEthernet1/0/7 相连接。 1、设备的管理者希望在端口 GigabitEthernet1/0/7 上对用户接入进行MAC地址认证,以控制它们对Internet 的访问。 2、要求...
  • 计算机网络-实验3-交换机的交换MAC地址管理

    万次阅读 多人点赞 2019-04-20 20:48:12
    交换机MAC地址的配置 实验内容 一:交换的工作原理 存储转发方式 把整个数据帧先缓存后再进行处理。 交换机建立一个交换,根据交换来转发数据。 1.1 以太网交换机的自学习功能 以太网交换机运行...
  • 1、通过对中兴二层交换机2850的MAC地址的查看和老化时间的修改,加深对二层交换机MAC地址的建立过程和MAC地址老化时间的理解。 三、实验过程 1、实验任务说明 如图1-1所示,将一台中兴2850交换机的port口和一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 64,635
精华内容 25,854
关键字:

交换机除了mac表