Pastebin launched a little side project called VERYVIRAL.com, check it out ;-) Want more features on Pastebin? Sign Up, it's FREE!
Guest

Oleg Orlov / DHCP request discovering

By: a guest on Feb 6th, 2012  |  syntax: C#  |  size: 3.05 KB  |  views: 549  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. using System;
  2. using System.IO;
  3. using System.Threading;
  4. using System.Text;
  5. using System.Net;
  6. using System.Net.Sockets;
  7. using System.Runtime.Serialization.Formatters.Binary;
  8.  
  9.  
  10. class Program
  11. {
  12.     static byte[] ToByteArray(object source)
  13.     {
  14.         var formatter = new BinaryFormatter();
  15.        
  16.         using (var stream = new MemoryStream())
  17.         {
  18.             formatter.Serialize(stream, source);
  19.             return stream.ToArray();
  20.         };
  21.     }
  22.  
  23.     [Serializable]
  24.     public class packageDHCP
  25.     {
  26.         byte op;
  27.         byte htype;
  28.         byte hlen;
  29.         byte hops;
  30.         int xid;
  31.         Int16 secs;
  32.         Int16 flags;
  33.         int ciaddr;
  34.         int yiaddr;
  35.         int siaddr;
  36.         int giaddr;
  37.         byte[] chaddr;
  38.         byte[] sname;
  39.         byte[] file;
  40.         byte[] options;
  41.  
  42.         enum Boot
  43.         {
  44.             Request = 1,
  45.             Reply = 2,
  46.         };
  47.  
  48.         public packageDHCP()
  49.         {
  50.             chaddr = new byte[0x10];
  51.             sname = new byte[0x40];
  52.             file = new byte[0x80];
  53.             options = new byte[0x240];
  54.  
  55.             op = (byte)Boot.Request;
  56.             htype = 1;
  57.             hlen = 6;
  58.             hops = 0;
  59.             xid = 0x3903F326;
  60.             secs = 0;
  61.             flags = 0;
  62.             ciaddr = 0;
  63.             yiaddr = 0;
  64.             siaddr = 0;
  65.             giaddr = 0;
  66.             SetCHADDR(); //0xf4-6d-04-73-a9-72
  67.             SetSNAME();
  68.             SetFILE();
  69.  
  70.             SetOptions();
  71.         }
  72.  
  73.         private void SetCHADDR()
  74.         {
  75.             chaddr[0] = 0x72;
  76.             chaddr[1] = 0xa9;
  77.             chaddr[2] = 0x73;
  78.             chaddr[3] = 4;
  79.             chaddr[4] = 0x6d;
  80.             chaddr[5] = 0xf4;
  81.  
  82.             for (int i = 6; i < chaddr.Length; i++)
  83.             {
  84.                 chaddr[i] = 0;
  85.             };
  86.         }
  87.         private void SetSNAME()
  88.         {
  89.             for (int i = 0; i < sname.Length; i++)
  90.             {
  91.                 sname[i] = (byte)i;
  92.             };
  93.         }
  94.         private void SetFILE()
  95.         {
  96.             for (int i = 0; i < file.Length; i++)
  97.             {
  98.                 file[i] = (byte)i;
  99.             };
  100.         }
  101.  
  102.         private void SetOptions()
  103.         {
  104.             //99, 130, 83, 99
  105.             options[0] = 0x63;
  106.             options[1] = 0x82;
  107.             options[2] = 0x53;
  108.             options[3] = 0x99;
  109.  
  110.             for (int i = 4; i < options.Length; i++)
  111.             {
  112.                 options[i] = 0;
  113.             };
  114.         }
  115.     };
  116.  
  117.     static byte[] data;
  118.  
  119.     static void HandleDNS()
  120.     {
  121.         Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Udp);
  122.         s.Connect("0xff.0xff.0xff.0xff", 67);
  123.        
  124.         packageDHCP p = new packageDHCP();
  125.         data = ToByteArray(p);
  126.  
  127.         s.Send(data);
  128.  
  129.         Thread.Sleep(1000);
  130.         s.Receive(data);
  131.         Console.WriteLine(Encoding.UTF8.GetString(data));
  132.     }
  133.  
  134.     static void Main()
  135.     {
  136.         HandleDNS();
  137.     }
  138. };