我有一个使用Indy组件进行TCP通信的c应用程序。现在我需要实现SNMP代理(?)只是为了通过SNMP响应有关应用程序状态的请求。我决定也使用Indy组件来完成这项任务。也许有一些标准的方法来实现这个?
SNMP组件可以很好地获取一些值。但我找不到如何通过snmp从应用程序返回值的示例。
根据Remy Lebeau的建议,我已经开始实施SendTrap。
void __fastcall TMainForm::btSendTrapClick(TObject *Sender)
{
UnicodeString myEnterprise = "1.5.5.5.5.5.5.5";
UnicodeString eventType = "1.5.5.5.5.5.5.5.1";
UnicodeString eventDistance = "1.5.5.5.5.5.5.5.2";
TIdSNMP * idSnmp = 0;
TSNMPInfo * infoSnmp = 0;
idSnmp = new TIdSNMP(NULL);
infoSnmp = new TSNMPInfo(idSnmp);
idSnmp->Host = edHost->Text;
idSnmp->Community = "public";
infoSnmp->Host = edHost->Text;
infoSnmp->Community = "public";
infoSnmp->Enterprise = myEnterprise;
infoSnmp->GenTrap = 6; // I've met such values
infoSnmp->SpecTrap = 1; // somewhere in inet
infoSnmp->MIBAdd(eventType,"ftCritical");
infoSnmp->MIBAdd(eventDistance,"2.357");
idSnmp->SendTrap();
delete idSnmp;
}
但当我运行应用程序时,我的系统中并没有udp活动。当我做这样的事情时
idSnmp->QuickSend(sysDescr, "public", edHost->Text, val);
wireshark显示192.168.100.21 192.168.100.19 SNMP 82获取请求1.3.6.1.2.1.1.3.0
但当idSnmp-
我很高兴看到一些关于我的代码或SendTrap的工作示例的评论:)
看起来您根本没有看到陷阱离开主机。我知道这是很久以前的事了,但这对我来说很有用。。。稍微解释一下我的代码:
void SendTrap(int atcsfield)
{
TIdSNMP *snmp = new TIdSNMP(0);
snmp->Trap->Clear();
snmp->Trap->Version = 2;
snmp->Trap->Community=String(cfg.snmp.community);
snmp->Trap->TimeTicks = GetTickCount() - InitialTickCount;
snmp->Trap->Enterprise=String(cfg.snmp.oid);
snmp->Trap->GenTrap=6;
snmp->Trap->SpecTrap=1;
for(int i=0;i<MAX_VARBINDS;i++)
{
if(svb[i].Length())
{
varb.sprintf("%s.1.%d",BaseOID.c_str(),i);
snmp->Trap->MIBAdd(varb,svb[i], ASN1_OCTSTR);
}
}
for(int i=0;i<MAX_VARBINDS;i++)
{
if(ivb[i]!=-1)
{
varb.sprintf("%s.1.%d",BaseOID.c_str(),i);
snmp->Trap->MIBAdd(varb, ivb[i], ASN1_INT);
}
}
snmp->Host = ManagerIpList->Strings[j];
snmp->SendTrap();
}
我发现每次发送陷阱时都需要Clear()。在工作代码中,我实例化了TIdSNMP组件,然后调用SendTrap()。我有三个IP目标,必须调用Clear()向每个目标发送陷阱。
HTH
Indy没有SNMP服务器组件。要允许应用程序从您的应用程序请求SNMP值,您必须实现自己的SNMP服务器,例如使用TIdUDPServer
及其OnUDPRead
事件,然后手动解析SNMP请求。
另一种选择是让外部应用程序向您的应用程序注册,然后您的应用程序可以使用tidsmp。SendTrap()在需要时将状态更新推送到已注册的应用程序。
我对SNMP代理实现有一些基本问题,其中一些问题可能也无效,但请让我知道 是否有任何方法可以从SNMP Manager中找到代理支持的SNMP版本
我已使用snmp4j api在SNMP代理上创建,但SNMP表注册存在问题 一旦我注册了表和表中的行。然后,如果我在表中设置值,所有行都会设置相同的值。我已经从JSON创建了snmp表 如果我设置了值,请在下表中 .1.3.6.1.4.1.1.201.6.2。它为下表中注册的所有行设置值。是否有人知道如何使用snmmpj代理正确注册和设置值。
我是SNMP新手,谢谢你的支持......我有一个子代理的现有Perl脚本,在尝试运行它时出现了以下问题:代理似乎连接到“默认”snmpd deamon,该deamon被配置为主代理(“master agentx”行存在于snmpd.conf中)。此时,脚本将一些值分配给我的MIB中的对象。但是,当我然后在master-agent上执行snmpwalk或snmpget时,我得到(对于v1查询)“结
本文向大家介绍C#简单实现SNMP的方法,包括了C#简单实现SNMP的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#简单实现SNMP的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的C#程序设计有所帮助。
我正在尝试使用snmp4j模拟SNMP代理。我正在向代理注册MOs。下面是代码段: 当启动代理时,我得到了DuplicateInstrationException。请指导我如何注册类。请提供方向。
我正在尝试用Java实现SNMP代理。我使用snmp4j库(http://www.snmp4j.org/)。当前,我的代理在localhost/4700上工作。由于以下请求,我尝试发送snmpget请求: 但我只得到类似“此OID当前不存在这样的实例”的信息。这是我的问题:我不知道如何创建一个实例。我试图在MOTable中添加行,但似乎不起作用。 下面是我实现MOGRoup的类的摘要 但是下面的请