使用SNMP LLDP协议查找邻居



我有几个开关(Hirschmann Mach1040, RS40)连接在一起。所以我想用snmp选择端口x上连接的邻居交换机的mac地址/ip地址。是否有LLDP mib_value告诉我交换机上特定端口的邻居MAC或IP ??

非常感谢你的帮助!

这段代码从包含ip地址的列表中遍历设备上的LLDP oid,并将邻居添加到并行数组中。交货;(每个标题都是ArrayList)HostName HostInterface neighborname邻居intsw2960 fa0/1 HP-98765 Ethernet0/4

   package NDMSMain;
import java.io.IOException;
import java.util.ArrayList;
import SNMPHandler.SNMPManager;
import SNMPHandler.SNMPWalk;
import TopologyHandler.WriteXMLFile;
public class LldpDiscovery {
    static SNMPWalk t1 = new SNMPWalk();
    public static String LLDP_OID = "1.0.8802.1.1.2.1.4.1.1";
    public static String snmpCheck = null; //MODEL
    public static String devicePid = null;  //Product Id
    public static ArrayList<String> topologyNodeId = new ArrayList<String>();
    public static ArrayList<String> lldpHostName = new ArrayList<String>();
    public static ArrayList<String> lldpHostInt = new ArrayList<String>();
    public static ArrayList<String> lldpNeigName = new ArrayList<String>();
    public static ArrayList<String> lldpNeigInt = new ArrayList<String>();
    public static ArrayList<String> lldpNeigMac = new ArrayList<String>();
    public static ArrayList<String> deviceModel = new ArrayList<String>();

    public static void main() {
        System.out.println("LLDP GELDIIIII");
        frame1 out = new frame1();
        String testWalk="";
        String satir[]=null;
        String esit[]=null;
        String hostInt = null;
        for(int i=0; i<out.ipler.size();i++)
        {
            try {
                devicePid = SNMPManager.main("udp:"+out.ipler.get(i).toString()+"/161","1.0.8802.1.1.2.1.5.4795.1.2.7.0");
            if(!devicePid.startsWith("no"))
            {
                // To determine node count and Id s
                snmpCheck= SNMPManager.main("udp:"+out.ipler.get(i).toString()+"/161","1.3.6.1.2.1.1.5.0");
                deviceModel.add(devicePid);
                topologyNodeId.add(snmpCheck);

            testWalk =  t1.main(out.ipler.get(i).toString(),LLDP_OID);

            satir= testWalk.split("n");
            //System.out.println("satir 0"+satir[0].toString());
            //System.out.println("satir 1"+satir[1].toString());
            int ind =0;
            for(int k=0;k<satir.length;k++)
            {
                esit = null;
                esit = satir[k].split("=");
                //System.out.println("===Hostlar");
                //System.out.println("ind 0: "+esit[ind]);
                if(esit[ind].startsWith("1.0.8802.1.1.2.1.4.1.1.7.0") && !esit[ind].equals("1.0.8802.1.1.2.1.4.1.1.7.0.1.2 "))
                {

                    hostInt = esit[ind].substring(esit[ind].length()-5, esit[ind].length()-3);
                    //System.out.println("===Start-4.1.1.7.0 - genel cnt: "+ arrayCnts +" fa0-"+hostInt);
                    if(!hostInt.startsWith("."))
                    {
                        //System.out.println("===Start-4.1.1.7.0 - .li cnt: " + arrayCnts +"fa0-"+hostInt);
                        lldpHostInt.add("fa0-"+hostInt);
                    }
                    else
                    {
                        //System.out.println("===Start-4.1.1.7.0 - .siz cnt: " + arrayCnts +"fa0-"+hostInt);
                        lldpHostInt.add("fa0-"+hostInt.substring(hostInt.length()-1,hostInt.length())); 
                    }
                    //System.out.println("=== LLDPNeigh cnt:" + arrayCnts + esit[1]);
                    lldpNeigInt.add(esit[1]);

                }
                else if(esit[ind].startsWith("1.0.8802.1.1.2.1.4.1.1.9.0"))
                {
                    //System.out.println("=== NeighNAme cnt:" + arrayCnts + esit[1]);
                    if(!esit[1].equals(" "))
                    {
                        lldpNeigName.add(esit[1]);
                        lldpHostName.add(snmpCheck);
                    }

                //  lldpHostName.add(out.asd);
                }
                else if(esit[ind].startsWith("1.0.8802.1.1.2.1.4.1.1.5.0") && !esit[ind].equals("1.0.8802.1.1.2.1.4.1.1.5.0.1.2 "))
                {
                    lldpNeigMac.add(esit[1]);
                }
            }
            }
            else   // SNMP DESTEKLEMEYEN CIHAZLAR ICIN COZUM BULUNACAK
            {

                System.out.println("*********There is unknown device here!!!! ******");
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }//
        }

        System.out.println("---HostName---");
        for(int i=0; i<lldpHostName.size();i++)
        {
            System.out.println(lldpHostName.get(i).toString());
        }
        System.out.println("---HostInt---");
        for(int i=0; i<lldpHostInt.size();i++)
        {
            System.out.println(lldpHostInt.get(i).toString());
        }
        System.out.println("---NeighInt---");
        for(int i=0; i<lldpHostInt.size();i++)
        {
            System.out.println(lldpNeigInt.get(i).toString());
        }
        System.out.println("---NeighName---");
        for(int i=0; i<lldpNeigName.size();i++)
        {
            System.out.println(lldpNeigName.get(i).toString());
        }
        System.out.println("---NeighMac---");
        for(int i=0; i<lldpHostInt.size();i++)
        {
            System.out.println(lldpNeigMac.get(i).toString());
        }
        System.out.println("---NodeId---");
        for(int i=0; i<topologyNodeId.size();i++)
        {
            System.out.println(topologyNodeId.get(i).toString());
        }
        for (int i=0;i<lldpNeigName.size();i++)
        {
            if(!topologyNodeId.contains(lldpNeigName.get(i).trim()))
            {
                topologyNodeId.add(lldpNeigName.get(i));
            }
        }

        System.out.println("===LLDPNODE ID");
        for(int i=0; i<topologyNodeId.size();i++)
        {
            System.out.println(topologyNodeId.get(i).toString());
        }   


    //  createCSV();
        //WriteXMLFile.main();

    enter code here
        /*lldpHostName.clear();
        lldpHostInt.clear();
        lldpNeigInt.clear();
        lldpNeigMac.clear();
        lldpNeigName.clear();
        topologyNodeId.clear();
        deviceModel.clear();*/

    }
}

我认为你想要lldpRemLocalPortNum,这是语法类型LldpPortNumber。LldpPortNumber的定义是:

        A port number has no mandatory relationship to an
        InterfaceIndex object (of the interfaces MIB, IETF RFC 2863).
        If the LLDP agent is a IEEE 802.1D, IEEE 802.1Q bridge, the
        LldpPortNumber will have the same value as the dot1dBasePort
        object (defined in IETF RFC 1493) associated corresponding
        bridge port.  If the system hosting LLDP agent is not an
        IEEE 802.1D or an IEEE 802.1Q bridge, the LldpPortNumber
        will have the same value as the corresponding interface's
        **InterfaceIndex** object.

InterfaceIndex是IF-MIB::ifIndex,它应该映射到设备上正确的接口。这有帮助吗?

这里是更多的细节(我需要一个大文本框)。假设你有上面评论中提到的条目:

lldpRemTable.lldpRemEntry.lldpRemChassisId.1325376015.2.1 ec e5 55 32 20 88

注意lldpRemTable有一个索引:

    INDEX   {
       lldpRemTimeMark,
       lldpRemLocalPortNum,
       lldpRemIndex
    }

在上面的示例中,您为远程条目请求lldpRemChassisId(远程的机箱id)(他的mac为机箱,例如e5 55 32 20 88)。1325376015是lldpRemTimeMark表索引(发现远程时的时间值),2是lldpRemLocalPortNum表索引(发现远程时的本地端口号)。

lldpRemLocalPortNum的类型为/LldpPortNum的文本约定。因此,您还应该在lldpLocPortTable(也是LldpPortNum类型)中有lldpLocPortNum == 2(并且可能是IF-MIB::ifIndex == 2)的条目。2将是您发现远程端口的端口描述。例如:

lldpLocPortTable.lldpLocPortDesc.2 = "FastEthernet2 (eth2)"

这就是映射的方式

最新更新