我有几个开关(Hirschmann Mach1040、RS40)连接在一起。所以我想用snmp在端口x上引出连接的邻居交换机的mac地址/ip地址。是否有 lldp mib_value 告诉我 swich 特定端口的 neihbour mac 或 ip?
非常感谢您的帮助!!!
我有几个开关(Hirschmann Mach1040、RS40)连接在一起。所以我想用snmp在端口x上引出连接的邻居交换机的mac地址/ip地址。是否有 lldp mib_value 告诉我 swich 特定端口的 neihbour mac 或 ip?
非常感谢您的帮助!!!
我认为您需要 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,它应该映射到设备上的正确接口。这有帮助吗?
此代码在包含 ip 地址的列表中的设备上行走 LLDP oid,并将邻居添加到并行阵列。前任; (每个标题都是 ArrayList) HostName HostInterface NeigbourName NeighbourInt sw2960 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();*/
}
}
所以这里有更多细节(我需要大文本框)。假设您有上面评论中提到的条目:
lldpRemTable.lldpRemEntry.lldpRemChassisId.1325376015.2.1 ec e5 55 32 20 88
请注意,lldpRemTable 的索引为:
INDEX {
lldpRemTimeMark,
lldpRemLocalPortNum,
lldpRemIndex
}
在上面的示例中,您要求远程条目的 lldpRemChassisId(远程的机箱 id)(机箱的他的 mac,ec e5 55 32 20 88)。1325376015 是 lldpRemTimeMark 表索引(您发现远程的时间值),2 是 lldpRemLocalPortNum 表索引(您发现远程所在的本地端口号)。
lldpRemLocalPortNum 是 LldpPortNum 的类型/文本约定。因此,您还应该在 lldpLocPortTable(也是 LldpPortNum 的类型)中有一个条目,其中 lldpLocPortNum == 2(并且可能是 IF-MIB::ifIndex == 2)。所以 lldpLocPortTable.lldpLocPortDesc.2 将是您发现远程的端口的端口描述。IE :
lldpLocPortTable.lldpLocPortDesc.2 = "FastEthernet2 (eth2)"
这就是你做映射的方式。