Get Mac Address


using System.Net;
using System.Net.Sockets;
using System.Text;
using System;

public class MacAddress
{
   public static void Main(string[] argv)
   {
      int commlength, miblength, datastart, datalength;
      string nextmib, value;
      SNMP conn = new SNMP();
      string mib = "1.3.6.1.2.1.17.4.3.1.1";
      int orgmiblength = mib.Length;
      byte[] response = new byte[1024];

      nextmib = mib;

      while (true)
      {
         response = conn.get("getnext", argv[0], argv[1], nextmib);
         commlength = Convert.ToInt16(response[6]);
         miblength = Convert.ToInt16(response[23 + commlength]);
         datalength = Convert.ToInt16(response[25 + commlength + miblength]);
         datastart = 26 + commlength + miblength;
         value = BitConverter.ToString(response, datastart, datalength);
         nextmib = conn.getnextMIB(response);
         if (!(nextmib.Substring(0, orgmiblength== mib))
            break;

         Console.WriteLine("{0} = {1}", nextmib, value);
      }
   }
}


class SNMP
{
   public SNMP()
   {

   }

   public byte[] get(string request, string host, string community, string mibstring)
   {
      byte[] packet = new byte[1024];
      byte[] mib = new byte[1024];
      int snmplen;
      int comlen = community.Length;
      string[] mibvals = mibstring.Split('.');
      int miblen = mibvals.Length;
      int cnt = 0, temp, i;
      int orgmiblen = miblen;
      int pos = 0;

      // Convert the string MIB into a byte array of integer values
      // Unfortunately, values over 128 require multiple bytes
      // which also increases the MIB length
      for (i = 0; i < orgmiblen; i++)
      {
         temp = Convert.ToInt16(mibvals[i]);
         if (temp > 127)
         {
            mib[cnt= Convert.ToByte(128 (temp / 128));
            mib[cnt + 1= Convert.ToByte(temp - ((temp / 128128));
            cnt += 2;
            miblen++;
         else
         {
            mib[cnt= Convert.ToByte(temp);
            cnt++;
         }
      }
      snmplen = 29 + comlen + miblen - 1;  //Length of entire SNMP packet

      //The SNMP sequence start
      packet[pos++0x30//Sequence start
      packet[pos++= Convert.ToByte(snmplen - 2);  //sequence size

      //SNMP version
      packet[pos++0x02//Integer type
      packet[pos++0x01//length
      packet[pos++0x00//SNMP version 1

      //Community name
      packet[pos++0x04// String type
      packet[pos++= Convert.ToByte(comlen)//length
      //Convert community name to byte array
      byte[] data = Encoding.ASCII.GetBytes(community);
      for (i = 0; i < data.Length; i++)
      {
         packet[pos++= data[i];
      }

      //Add GetRequest or GetNextRequest value
      if (request == "get")
         packet[pos++0xA0;
      else
         packet[pos++0xA1;

      packet[pos++= Convert.ToByte(20 + miblen - 1)//Size of total MIB

      //Request ID
      packet[pos++0x02//Integer type
      packet[pos++0x04//length
      packet[pos++0x00//SNMP request ID
      packet[pos++0x00;
      packet[pos++0x00;
      packet[pos++0x01;

      //Error status
      packet[pos++0x02//Integer type
      packet[pos++0x01//length
      packet[pos++0x00//SNMP error status

      //Error index
      packet[pos++0x02//Integer type
      packet[pos++0x01//length
      packet[pos++0x00//SNMP error index

      //Start of variable bindings
      packet[pos++0x30//Start of variable bindings sequence

      packet[pos++= Convert.ToByte(+ miblen - 1)// Size of variable binding

      packet[pos++0x30//Start of first variable bindings sequence
      packet[pos++= Convert.ToByte(+ miblen - 2)// size
      packet[pos++0x06//Object type
      packet[pos++= Convert.ToByte(miblen - 1)//length

      //Start of MIB
      packet[pos++0x2b;
      //Place MIB array in packet
      for(i = 2; i < miblen; i++)
         packet[pos++= Convert.ToByte(mib[i]);
      packet[pos++0x05//Null object value
      packet[pos++0x00//Null

      //Send packet to destination
      Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,
                       ProtocolType.Udp);
      sock.SetSocketOption(SocketOptionLevel.Socket,
                      SocketOptionName.ReceiveTimeout, 5000);
      IPHostEntry ihe = Dns.Resolve(host);
      IPEndPoint iep = new IPEndPoint(ihe.AddressList[0]161);
      EndPoint ep = (EndPoint)iep;
      sock.SendTo(packet, snmplen, SocketFlags.None, iep);

      //Receive response from packet
      try
      {
         int recv = sock.ReceiveFrom(packet, ref ep);
      catch (SocketException)
      {
         packet[00xff;
      }
      return packet;
   }

   public string getnextMIB(byte[] mibin)
   {
      string output = "1.3";
      int commlength = mibin[6];
      int mibstart = + commlength + 17//find the start of the mib section
      //The MIB length is the length defined in the SNMP packet
     // minus 1 to remove the ending .0, which is not used
      int miblength = mibin[mibstart1;
      mibstart += 2//skip over the length and 0x2b values
      int mibvalue;

      for(int i = mibstart; i < mibstart + miblength; i++)
      {
         mibvalue = Convert.ToInt16(mibin[i]);
         if (mibvalue > 128)
         {
            mibvalue = (mibvalue/128)*128 + Convert.ToInt16(mibin[i+1]);
            i++;
         }
         output += "." + mibvalue;
      }
      return output;
   }

}


==========================




ManagementScope theScope = new ManagementScope("\\\\computerName\\root\\cimv2");
StringBuilder theQueryBuilder = new StringBuilder();
theQueryBuilder.Append(
"SELECT MACAddress FROM Win32_NetworkAdapter");
ObjectQuery theQuery = new ObjectQuery(theQueryBuilder.ToString());
ManagementObjectSearcher theSearcher = new ManagementObjectSearcher(theScope, theQuery);
ManagementObjectCollection theCollectionOfResults = theSearcher.Get();

foreach (ManagementObject theCurrentObject in theCollectionOfResults)
{

string macAdd = "MAC Address: " + theCurrentObject["MACAddress"].ToString();
MessageBox.Show(macAdd);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值