首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SNMPSHARPNET - GETBULK仅写入最后一个OID

SNMPSHARPNET - GETBULK仅写入最后一个OID
EN

Stack Overflow用户
提问于 2014-09-24 09:37:52
回答 1查看 1K关注 0票数 0

我有以下代码,它在整个1.3.6.1 OIDRoot的特定IP的snmp v2上执行get bulk。然后,我将结果写入csv文件。问题是它只写最后的结果行,而不是所有的行。我是C#的新手,仍然在学习这门语言。你能告诉我我在代码中做错了什么吗?

代码语言:javascript
复制
private void SNMP_WALK(object sender, EventArgs e)
    {
        OctetString community = new OctetString("public");
        AgentParameters param = new AgentParameters(community);

        param.Version = SnmpVersion.Ver2;

        string deviceMac = null;
        string devicePort = null;
        string deviceHCID = null;


                XmlDocument doc = new XmlDocument();
                doc.Load("devices.xml");

                foreach (XmlElement dev in doc.SelectNodes("/data/devices/device"))
                {
                    deviceMac = dev.Attributes["mac"].Value;
                    devicePort = dev.Attributes["port"].Value;
                    deviceHCID = dev.Attributes["hcid"].Value;

                    FileStream ostrm;
                    StreamWriter writer;
                    TextWriter oldOut = Console.Out;

                    if (deviceHCID != null)
                    {                           
                                try
                                    {
                                        IpAddress agent = new IpAddress(devicePort);
                                        UdpTarget target = new UdpTarget((IPAddress)agent, 161, 2000, 1);
                                        Oid rootOid = new Oid("1.3.6.1");

                                        Oid lastOid = (Oid)rootOid.Clone();
                                        Pdu pdu = new Pdu(PduType.GetBulk);

                                        pdu.NonRepeaters = 0;
                                        pdu.MaxRepetitions = 20;

                                        while (lastOid != null)
                                        {
                                        if (pdu.RequestId != 0)
                                            {
                                                pdu.RequestId += 1;
                                            }
                                            pdu.VbList.Clear();
                                            pdu.VbList.Add(lastOid);

                                            SnmpV2Packet result = (SnmpV2Packet)target.Request(pdu, param);
                                            if (result != null)
                                                {
                                                if (result.Pdu.ErrorStatus != 0)
                                                {
                                                    Console.WriteLine("Error in SNMP reply. Error {0} index {1}",
                                                    result.Pdu.ErrorStatus,
                                                    result.Pdu.ErrorIndex);
                                                    lastOid = null;
                                                    break;
                                                }
                                                else
                                                {
                                                    foreach (Vb v in result.Pdu.VbList)
                                                    {
                                                    if (rootOid.IsRootOf(v.Oid))
                                                        {
                                                            string deviceHCIDw = deviceHCID;

                                                            ostrm = new FileStream("snmp_dump.csv", FileMode.OpenOrCreate, FileAccess.Write);
                                                            writer = new StreamWriter(ostrm);

                                                            Console.SetOut(writer);
                                                            Console.WriteLine("{0} {1} ({2}): {3}",
                                                            deviceHCIDw.ToString(),
                                                            v.Oid.ToString(),
                                                            SnmpConstants.GetTypeName(v.Value.Type),
                                                            v.Value.ToString());                                                                                                                      
                                                            Console.SetOut(oldOut);
                                                            writer.Close();
                                                            ostrm.Close();
                                                            Console.WriteLine("Done");

                                                            if (v.Value.Type == SnmpConstants.SMI_ENDOFMIBVIEW)
                                                            lastOid = null;
                                                            else
                                                            lastOid = v.Oid;
                                                        }
                                                    else
                                                    {
                                                        lastOid = null;
                                                    }
                                                }
                                                }
                                            }
                                            else
                                            {
                                                Console.WriteLine("No response received from SNMP agent.");
                                            }
                                       }
                                        target.Close();
                               }
                            catch (Exception ex)
                            {
                                MessageBox.Show(ex.Message);
                            }
                       }
                  }
            }

这是CSV文件的内容。

代码语言:javascript
复制
HCID01318 1.3.6.1.6.3.18.1.1.1.8.116.48.48.48 (Unknown): SNMP End-of-MIB-View
00 A1 C0 A8 0A FC
91 5E
d-only
PRINTER;DES:CANON 640NPCL_PS;
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00       00 00 00 00 00 00 00 00 00 00 00
0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

提前感谢您的帮助。

EN

回答 1

Stack Overflow用户

发布于 2014-10-12 01:03:55

或者使用FileMode.Append,或者在第一个foreach循环之前打开文件。您实际上是在覆盖每个响应的文件。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26007199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档