<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://nfex.ru/index.php?action=history&amp;feed=atom&amp;title=Csharp%2FC_Sharp%2FNetwork%2FMac_Address</id>
		<title>Csharp/C Sharp/Network/Mac Address - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://nfex.ru/index.php?action=history&amp;feed=atom&amp;title=Csharp%2FC_Sharp%2FNetwork%2FMac_Address"/>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/C_Sharp/Network/Mac_Address&amp;action=history"/>
		<updated>2026-04-29T17:54:14Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://nfex.ru/index.php?title=Csharp/C_Sharp/Network/Mac_Address&amp;diff=1503&amp;oldid=prev</id>
		<title> в 15:31, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/C_Sharp/Network/Mac_Address&amp;diff=1503&amp;oldid=prev"/>
				<updated>2010-05-26T15:31:19Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 15:31, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://nfex.ru/index.php?title=Csharp/C_Sharp/Network/Mac_Address&amp;diff=1504&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/C_Sharp/Network/Mac_Address&amp;diff=1504&amp;oldid=prev"/>
				<updated>2010-05-26T11:47:13Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Get Mac Address==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
C# Network Programming &lt;br /&gt;
by Richard Blum&lt;br /&gt;
Publisher: Sybex &lt;br /&gt;
ISBN: 0782141765&lt;br /&gt;
*/&lt;br /&gt;
using System.Net;&lt;br /&gt;
using System.Net.Sockets;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System;&lt;br /&gt;
public class MacAddress&lt;br /&gt;
{&lt;br /&gt;
   public static void Main(string[] argv)&lt;br /&gt;
   {&lt;br /&gt;
      int commlength, miblength, datastart, datalength;&lt;br /&gt;
      string nextmib, value;&lt;br /&gt;
      SNMP conn = new SNMP();&lt;br /&gt;
      string mib = &amp;quot;1.3.6.1.2.1.17.4.3.1.1&amp;quot;;&lt;br /&gt;
      int orgmiblength = mib.Length;&lt;br /&gt;
      byte[] response = new byte[1024];&lt;br /&gt;
      nextmib = mib;&lt;br /&gt;
      while (true)&lt;br /&gt;
      {&lt;br /&gt;
         response = conn.get(&amp;quot;getnext&amp;quot;, argv[0], argv[1], nextmib);&lt;br /&gt;
         commlength = Convert.ToInt16(response[6]);&lt;br /&gt;
         miblength = Convert.ToInt16(response[23 + commlength]);&lt;br /&gt;
         datalength = Convert.ToInt16(response[25 + commlength + miblength]);&lt;br /&gt;
         datastart = 26 + commlength + miblength;&lt;br /&gt;
         value = BitConverter.ToString(response, datastart, datalength);&lt;br /&gt;
         nextmib = conn.getnextMIB(response);&lt;br /&gt;
         if (!(nextmib.Substring(0, orgmiblength) == mib))&lt;br /&gt;
            break;&lt;br /&gt;
         Console.WriteLine(&amp;quot;{0} = {1}&amp;quot;, nextmib, value);&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class SNMP&lt;br /&gt;
{&lt;br /&gt;
   public SNMP()&lt;br /&gt;
   {&lt;br /&gt;
   }&lt;br /&gt;
   public byte[] get(string request, string host, string community, string mibstring)&lt;br /&gt;
   {&lt;br /&gt;
      byte[] packet = new byte[1024];&lt;br /&gt;
      byte[] mib = new byte[1024];&lt;br /&gt;
      int snmplen;&lt;br /&gt;
      int comlen = community.Length;&lt;br /&gt;
      string[] mibvals = mibstring.Split(&amp;quot;.&amp;quot;);&lt;br /&gt;
      int miblen = mibvals.Length;&lt;br /&gt;
      int cnt = 0, temp, i;&lt;br /&gt;
      int orgmiblen = miblen;&lt;br /&gt;
      int pos = 0;&lt;br /&gt;
      // Convert the string MIB into a byte array of integer values&lt;br /&gt;
      // Unfortunately, values over 128 require multiple bytes&lt;br /&gt;
      // which also increases the MIB length&lt;br /&gt;
      for (i = 0; i &amp;lt; orgmiblen; i++)&lt;br /&gt;
      {&lt;br /&gt;
         temp = Convert.ToInt16(mibvals[i]);&lt;br /&gt;
         if (temp &amp;gt; 127)&lt;br /&gt;
         {&lt;br /&gt;
            mib[cnt] = Convert.ToByte(128 + (temp / 128));&lt;br /&gt;
            mib[cnt + 1] = Convert.ToByte(temp - ((temp / 128) * 128));&lt;br /&gt;
            cnt += 2;&lt;br /&gt;
            miblen++;&lt;br /&gt;
         } else&lt;br /&gt;
         {&lt;br /&gt;
            mib[cnt] = Convert.ToByte(temp);&lt;br /&gt;
            cnt++;&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
      snmplen = 29 + comlen + miblen - 1;  //Length of entire SNMP packet&lt;br /&gt;
      //The SNMP sequence start&lt;br /&gt;
      packet[pos++] = 0x30; //Sequence start&lt;br /&gt;
      packet[pos++] = Convert.ToByte(snmplen - 2);  //sequence size&lt;br /&gt;
      //SNMP version&lt;br /&gt;
      packet[pos++] = 0x02; //Integer type&lt;br /&gt;
      packet[pos++] = 0x01; //length&lt;br /&gt;
      packet[pos++] = 0x00; //SNMP version 1&lt;br /&gt;
      //Community name&lt;br /&gt;
      packet[pos++] = 0x04; // String type&lt;br /&gt;
      packet[pos++] = Convert.ToByte(comlen); //length&lt;br /&gt;
      //Convert community name to byte array&lt;br /&gt;
      byte[] data = Encoding.ASCII.GetBytes(community);&lt;br /&gt;
      for (i = 0; i &amp;lt; data.Length; i++)&lt;br /&gt;
      {&lt;br /&gt;
         packet[pos++] = data[i];&lt;br /&gt;
      }&lt;br /&gt;
      //Add GetRequest or GetNextRequest value&lt;br /&gt;
      if (request == &amp;quot;get&amp;quot;)&lt;br /&gt;
         packet[pos++] = 0xA0;&lt;br /&gt;
      else&lt;br /&gt;
         packet[pos++] = 0xA1;&lt;br /&gt;
      packet[pos++] = Convert.ToByte(20 + miblen - 1); //Size of total MIB&lt;br /&gt;
      //Request ID&lt;br /&gt;
      packet[pos++] = 0x02; //Integer type&lt;br /&gt;
      packet[pos++] = 0x04; //length&lt;br /&gt;
      packet[pos++] = 0x00; //SNMP request ID&lt;br /&gt;
      packet[pos++] = 0x00;&lt;br /&gt;
      packet[pos++] = 0x00;&lt;br /&gt;
      packet[pos++] = 0x01;&lt;br /&gt;
      //Error status&lt;br /&gt;
      packet[pos++] = 0x02; //Integer type&lt;br /&gt;
      packet[pos++] = 0x01; //length&lt;br /&gt;
      packet[pos++] = 0x00; //SNMP error status&lt;br /&gt;
      //Error index&lt;br /&gt;
      packet[pos++] = 0x02; //Integer type&lt;br /&gt;
      packet[pos++] = 0x01; //length&lt;br /&gt;
      packet[pos++] = 0x00; //SNMP error index&lt;br /&gt;
      //Start of variable bindings&lt;br /&gt;
      packet[pos++] = 0x30; //Start of variable bindings sequence&lt;br /&gt;
      packet[pos++] = Convert.ToByte(6 + miblen - 1); // Size of variable binding&lt;br /&gt;
      packet[pos++] = 0x30; //Start of first variable bindings sequence&lt;br /&gt;
      packet[pos++] = Convert.ToByte(6 + miblen - 1 - 2); // size&lt;br /&gt;
      packet[pos++] = 0x06; //Object type&lt;br /&gt;
      packet[pos++] = Convert.ToByte(miblen - 1); //length&lt;br /&gt;
      //Start of MIB&lt;br /&gt;
      packet[pos++] = 0x2b;&lt;br /&gt;
      //Place MIB array in packet&lt;br /&gt;
      for(i = 2; i &amp;lt; miblen; i++)&lt;br /&gt;
         packet[pos++] = Convert.ToByte(mib[i]);&lt;br /&gt;
      packet[pos++] = 0x05; //Null object value&lt;br /&gt;
      packet[pos++] = 0x00; //Null&lt;br /&gt;
      //Send packet to destination&lt;br /&gt;
      Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,&lt;br /&gt;
                       ProtocolType.Udp);&lt;br /&gt;
      sock.SetSocketOption(SocketOptionLevel.Socket,&lt;br /&gt;
                      SocketOptionName.ReceiveTimeout, 5000);&lt;br /&gt;
      IPHostEntry ihe = Dns.Resolve(host);&lt;br /&gt;
      IPEndPoint iep = new IPEndPoint(ihe.AddressList[0], 161);&lt;br /&gt;
      EndPoint ep = (EndPoint)iep;&lt;br /&gt;
      sock.SendTo(packet, snmplen, SocketFlags.None, iep);&lt;br /&gt;
      //Receive response from packet&lt;br /&gt;
      try&lt;br /&gt;
      {&lt;br /&gt;
         int recv = sock.ReceiveFrom(packet, ref ep);&lt;br /&gt;
      } catch (SocketException)&lt;br /&gt;
      {&lt;br /&gt;
         packet[0] = 0xff;&lt;br /&gt;
      }&lt;br /&gt;
      return packet;&lt;br /&gt;
   }&lt;br /&gt;
   public string getnextMIB(byte[] mibin)&lt;br /&gt;
   {&lt;br /&gt;
      string output = &amp;quot;1.3&amp;quot;;&lt;br /&gt;
      int commlength = mibin[6];&lt;br /&gt;
      int mibstart = 6 + commlength + 17; //find the start of the mib section&lt;br /&gt;
      //The MIB length is the length defined in the SNMP packet&lt;br /&gt;
     // minus 1 to remove the ending .0, which is not used&lt;br /&gt;
      int miblength = mibin[mibstart] - 1;&lt;br /&gt;
      mibstart += 2; //skip over the length and 0x2b values&lt;br /&gt;
      int mibvalue;&lt;br /&gt;
      for(int i = mibstart; i &amp;lt; mibstart + miblength; i++)&lt;br /&gt;
      {&lt;br /&gt;
         mibvalue = Convert.ToInt16(mibin[i]);&lt;br /&gt;
         if (mibvalue &amp;gt; 128)&lt;br /&gt;
         {&lt;br /&gt;
            mibvalue = (mibvalue/128)*128 + Convert.ToInt16(mibin[i+1]);&lt;br /&gt;
            i++;&lt;br /&gt;
         }&lt;br /&gt;
         output += &amp;quot;.&amp;quot; + mibvalue;&lt;br /&gt;
      }&lt;br /&gt;
      return output;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>