2

私は次のコードを使用しています:

import pysnmp
from pysnmp.entity.rfc3413.oneliner import cmdgen


errorIndication, errorStatus, errorIndex, \
           varBindTable = cmdGen.nextCmd (
                          cmdgen.CommunityData(agent, community_string),
                          cmdgen.UdpTransportTarget ( (ip, port) ),
                          (str(oid))
            )

ここで、ipはipv4アドレスです。ipv6アドレスを使用するにはどうすればよいですか。pysnmpがipv6もサポートしていることを読みました。ここのアドレスの使い方がわかりません。

ありがとう。

4

1 に答える 1

3

「oneline」インターフェースでIPv6を使用するには、少し調整する必要があります。

from pysnmp.entity.rfc3413.oneliner import cmdgen
from pysnmp.carrier.asynsock.dgram import udp6
import socket

class Udp6TransportTarget(cmdgen.UdpTransportTarget):
    transportDomain = udp6.domainName

    def __init__(self, transportAddr, timeout=1, retries=5):
        self.transportAddr = (
            socket.getaddrinfo(transportAddr[0], transportAddr[1],
                               socket.AF_INET6,
                               socket.SOCK_DGRAM,
                               socket.IPPROTO_UDP)[0][4]
            )
        self.timeout = timeout
        self.retries = retries

    def openClientMode(self):
        self.transport = udp6.Udp6SocketTransport().openClientMode()
        return self.transport

print cmdgen.CommandGenerator().getCmd(
        cmdgen.CommunityData('public'),
        Udp6TransportTarget(('::1', 161)),
        '1.3.6.1.2.1.1.1.0')
于 2012-07-05T06:55:38.663 に答える