我不熟悉snmp,并使用snmp4j创建snmp代理。我的java应用程序需要侦听snmp请求,并根据传入的oid查询db,然后返回响应。我有snmp代理的src代码。但是代理如何根据传入的oid查询db?我是否需要将数据库中的所有OID注册为代理中的托管对象,以便代理可以在请求到达时进行查找?或者换句话说,如何从代理指向我的数据存储/数据库?
这是我正在使用的代码。
http://shivasoft.in/blog/java/snmp/creating-snmp-agent-server-in-java-using-snmp4j/
'list oidList=impl.getOidList();//从数据库获取数据
for(Oid Oid:oidList){
agent.registerManagedObject(MOScalarFactory.createReadOnly(new OID(
oid.getOid()), oid.getValue()));
}'
我正在尝试用db中的数据注册托管对象。这是正确的吗?虽然id是唯一的,但我在第二行收到重复注册异常。
`.1.3.6.1.4.1.1166.1.6.1.2.2.1.3.1.1
.1.3.6.1.4.1.1166.1.6.1.2.2.1.3.1.2'
我认为这不是正确的方法,因为如果db很大怎么办?非常感谢您的帮助/提示。
首先,OID确实以数字开始,而不是以点开始。您使用的语法来自NET-SNMP,是非标准的。
其次,请阅读SNMP4J-Agent-Instrumentation-Guide.pdf文档,其中详细描述了如何为MIB检测代理。您获得了重复注册异常,因为您将标量注册为子树。标量OID必须以“.0”实例后缀结尾。
使用CommandResponder界面有点像是重新发明轮子。从头开始时,很可能永远无法实现安全且符合标准的SNMP代理。使用SNMP4J代理及其工具挂钩将为您节省大量工作和麻烦。
你得到组织。snmp4j。代理人DuplicateRegistrationException,因为ContextScope中只能有一个ManagedObject。每次注册都会将ManagedObject值分配给MOContextScope。第二次注册尝试将第二个对象设置为contextScope。作用域已填充,因此引发异常。Althow每个标量值应以0结尾。您可以检查任何MIB浏览器,如iReasoning,并选择任何值。如果该值是标量值,则自动追加尾随零,尽管MIB文件中未提及该值。因此,最“正确”的方法是使用4.1解决方案。
写下你自己的MOScalar。边界更小。您应该覆盖getLowerBound、getUpperBound、isLowerIncluded和isUpperIncluded,以获得对象的单独上下文范围。
我建议每次都返回标量OID,并包含两个边界。上下边界最好返回您已确定的相同OID。
编写自己的MOServer。21点和其他。。。大多数情况下,您可以简单地复制粘贴代码
private SortedMap<MOScope, ManagedObject> registry;
应该是这样的
private SortedMap<MOScope, Set<ManagedObject>> registry;
它会影响注册、注销和其他逻辑。DefaultMOServer-678行,包括注释。事实上,您应该修复几个类:
查询matchesQuery(对象)
private boolean matchesQuery(MOQuery query, ManagedObject object) {
if ((query.matchesQuery(object)) && object.getScope().isOverlapping(query.getScope()))
if (object instanceof MOScalar) {
MOScalar moScalar = (MOScalar) object;
return query.getLowerBound().compareTo(moScalar.getID()) <= 0 &&
query.getUpperBound().compareTo(moScalar.getID()) >= 0;
} else {
return true;
}
return false;
}
受保护的无效火。。。事件(ManagedObject对象,MOQuery查询){
protected void fire...Event(Set<ManagedObject> objects, MOQuery query) {
if (lookupListener != null) {
for (ManagedObject mo : objects) {
ManagedObject other=查找(新的DefaultMOQuery(contextScope));
Set<ManagedObject> other = lookup(new DefaultMOQuery(contextScope), false);
等等
使用表行。您可以添加表和附加行。
您将能够访问单元格作为
<tableEntryOID>.<columnSubID>.<rowIndexOID>
您可以将此问题用作教程。
让您使用不同的上下文范围。
解决方案4.1添加尾随零
agent.registerManagedObject(
MOScalarFactory.createReadOnly(
new OID(oid.getOid()).successor(),
oid.getValue()
)
);
这将把.0附加到同级属性。
snmpget-v2c-c公共本地主机:2001 oid。getOid().0
此外,任何MIB浏览器都会将.0附加到MIB文件中定义的每个标量类。您可以使用iReasning作为最流行的浏览器进行检查。甚至hrSystemUptime(.1.3.6.1.2.1.25.1.1-见左下)也被请求为顶部的hrSystemUptime.0(.1.3.6.1.2.1.25.1.1.0)。
解决方案4.2底部单独的OID。
static final OID sysDescr1 = new OID("1.3.6.1.4.1.5.6.1.8.9"),
sysDescr2 = new OID("1.3.6.1.4.1.5.6.2.2.5");
修复数据库OID以获取单独的上下文范围。
您可以尝试阅读SNMP4J代理检测指南。pdf。顺便说一句,这对我没有帮助。
您可以将源代码附加到IDE中,以了解零预告片和其他细微差别。这对我获取有关DefaultMOServer的更多信息有很大帮助。
正确pom.xml导入以获取最新版本
<repositories>
<repository>
<id>SNMP4J</id>
<url>https://oosnmp.net/dist/release/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.snmp4j</groupId>
<artifactId>snmp4j-agent</artifactId>
<version>2.3.2</version>
</dependency>
</dependencies>
我正在尝试使用Apache Spark,以便将具有多个连接和子选择的(大型)SQL查询的结果加载到来自Spark的DataFrame中,如从SQL查询创建Spark Dataframe中所述。 不幸的是,我这样做的尝试导致了拼花错误: 线程“main”组织中出现异常。阿帕奇。火花sql。AnalysisException:无法推断拼花地板的架构。必须手动指定。 我从谷歌看到的信息表明,当数据帧为空
问题内容: 我的代码有问题。 像这样的情况: 我有一个下拉列表,如果选择“个人”,则会出现新的下拉列表,其中包含从数据库查询中检索到的数据;如果选择“公开”,则该下拉列表将消失。 这样的HTML代码: 查询如下: 像这样的JavaScript代码: 我不知道如何将值/结果发送到javascript代码(选择选项中的值和名称)。 问题答案: 在javascript中,您必须对您的php文件进行操作:
本节将学习如何从SQL Server数据库查询数据。从一个简单的查询开始,查询语句用于从单个或多个表中检索数据。 SQL是一种特殊目的的编程语言,它是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。SQL语句无论是种类还是数量都是繁多的,很多语句也是经常要用到的,SQL查询语句就是一个典型的例子,无论是高级查询还是低级查询,SQL查询语
我确信这是一个简单的SQLContext问题,但我在Spark docs或Stackoverflow中找不到任何答案 我想从MySQL上的SQL查询创建一个Spark数据框 例如,我有一个复杂的MySQL查询,如 我想要一个带有X、Y和Z列的数据帧 我想出了如何将整个表加载到Spark中,然后可以将它们全部加载,然后在那里进行连接和选择。然而,这是非常低效的。我只想加载SQL查询生成的表。 这是我
我已使用snmp4j api在SNMP代理上创建,但SNMP表注册存在问题 一旦我注册了表和表中的行。然后,如果我在表中设置值,所有行都会设置相同的值。我已经从JSON创建了snmp表 如果我设置了值,请在下表中 .1.3.6.1.4.1.1.201.6.2。它为下表中注册的所有行设置值。是否有人知道如何使用snmmpj代理正确注册和设置值。
这是获得SQL结果集的一个非常常见的方法,因为一对多的关系······对于一个相当简单的结构执行冗余查询似乎是不必要的(而且可能是低效的)。是否有一种已建立的简单的方法将其解析为java对象?也就是说,我不想迭代ResultSet类并为每一行创建和设置一个新对象,而是要迭代集合并为每一个父行创建一个新对象,为每一个子行创建一个新对象。 例如,一种方法是按父主键对查询进行排序,然后仅当父id更改时才