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

8
我需要从Cisco Unified Call Manager检索电话的IP地址列表,并希望能够尽可能使用Perl和标准模块来完成。
我可以使用snmpwalk(我们正在使用SNMP v3)获取地址,但出于某种原因,当我尝试使用现有的代码通过SNMP或Net::SNMP执行相同的操作时,我只能得到一个IP地址。 我似乎无法让它们中的任何一个给我完整的列表。
这是我的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地址(由于它在一个没有网络访问权限的封闭网络上,我必须重新输入它):

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);
}

我找到的帖子之一是这个:http://stackoverflow.com/questions/100620/how-do-i-get-the-mac-address-or-ipaddress-from-a-cisco-callmanager/2184270#2184270 - WVEagle81
3
原始帖子已经被编辑,包含代码和snmpwalk结果。 - WVEagle81
是的,没错。我只是用一个简单的foreach循环来打印表格。 - WVEagle81
你能展示所有相关的代码(包括如何打印结果)以及生成的输出吗?此外,您是否在其他OID上遇到此问题,还是只有这个OID?也许尝试一些标准的OID,例如1.3.6.1.2.1.1.9。如果可以的话,如果您能创建一个最小化、完整化、可验证的示例,演示您的问题,并且其他人可以简单地复制和运行它们自己的系统(当然不包括凭据),那将非常有帮助。 - ThisSuitIsBlackNot
4
Stack Overflow旨在成为公共资源,而不是个人解决问题的论坛。这意味着你的帖子需要在问题陈述中适当表达问题,并包含一个答案(你可以自己编写并接受),其中包含你用来解决问题的代码。 - Borodin
显示剩余4条评论
1个回答

1

您可以使用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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接