gpt4 book ai didi

perl - 使用 Perl 从 Cisco Call Manager 获取 IP 地址列表

转载 作者:行者123 更新时间:2023-12-04 16:08:42 25 4
gpt4 key购买 nike

我需要从 Cisco Unified Call Manager 中检索电话 IP 地址列表,并且我希望能够尽可能使用 Perl 和标准模块来完成。

我可以使用 snmpwalk 获取地址(我们使用的是 SNMP v3),但是由于某种原因,当我使用现有代码尝试通过 SNMP 或 Net::SNMP 做同样的事情时,我得到的最多是一个 IP 地址。我似乎无法让任何一个给我完整的 list 。

这是我的 snmpwalk 命令:

snmpwalk -v3 -u <user> -A <password> -l authNoPriv -a SHA <ip address> 1.3.6.1.4.1.9.9.156.1.2.1.1.6

我还获得了电话描述字段 (156.1.2.1.1.4) 并将这两个字段合并到一个文本文件中,这样我就可以使用它们来使用 LWP 查询电话本身。

如果能够将这两个功能组合到一个脚本中以获取 IP 地址并查询电话以获取其具体详细信息,那就太好了。

有没有人有这样做的代码?

编辑:

snmpwalk 返回(一大堆):
SNMPv2-SMI::enterprises.9.9.156.1.2.1.1.6.100 = IpAddress: xxx.xxx.xxx.xxx

我的 Perl 代码返回一个 IP 地址(我必须重新键入它,因为它位于无法访问 Internet 的封闭网络上):
use SNMP;

my $ccmip = "xxx.xxx.xxx.xxx";
my $user = "<username>";
my $pass = "<password>";

$sess = new SNMP::Session(DestHost => $ccmip, SecName => $user, SecLevel => 'authnoPriv', AuthPass => $pass, AuthProto => 'SHA', PrivProto => 'AES', PrivPass => $pass, Version => 3);

my $vars = new SNMP::VarList(['1.3.6.1.4.1.9.9.156.1.2.1.1.6']);
my @values = $sess->getnext($vars);

my @table = ();
while ((!$sess->{ErrorStr})) {
push(@table, $values[0]);
@values = $sess->getnext($vars);
}

最佳答案

您可以使用 curl 执行此操作并发送 XML 来查询 risdb,因为只有注册的电话才会有 IP 地址:

curl -s -k -u axluser:${AXLPASSWORD} -H 'Content-type: text/xml;' -H 'SOAPAction: "CUCM:DB ver=8.0"' -d @ris_reg.xml https://x.x.x.x:8443/realtimeservice/services/RisPort | xmllint --format - > ris_reg_8.log

看:
ris_reg.xml:<?xml version="1.0" encoding="utf-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"  xmlns:xsd="http://www.w3.org/2001/XMLSchema"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">   <soapenv:Body>
<ns1:SelectCmDevice soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="http://schemas.cisco.com/ast/soap/">
<StateInfo xsi:type="xsd:string"/>
<CmSelectionCriteria href="#id0"/>
</ns1:SelectCmDevice>
<multiRef id="id0" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns2:CmSelectionCriteria" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns2="http://schemas.cisco.com/ast/soap/">
<MaxReturnedDevices xsi:type="xsd:unsignedInt">0</MaxReturnedDevices>
<Class xsi:type="xsd:string">Phone</Class>
<Model xsi:type="xsd:unsignedInt">503</Model>
<Status xsi:type="xsd:string">Registered</Status>
<NodeName xsi:type="xsd:string" xsi:nil="true"/>
<SelectBy xsi:type="xsd:string">Name</SelectBy>
<SelectItems soapenc:arrayType="ns2:SelectItem[1]" xsi:type="soapenc:Array">
<item href="#id1"/>
</SelectItems>
</multiRef>
<multiRef id="id1" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns3:SelectItem" xmlns:ns3="http://schemas.cisco.com/ast/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
<Item xsi:type="xsd:string">*</Item>
</multiRef> </soapenv:Body> </soapenv:Envelope>

关于perl - 使用 Perl 从 Cisco Call Manager 获取 IP 地址列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29776809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com