Advertisement
gigahf

UserAgent.cs

Aug 14th, 2017
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.14 KB | None | 0 0
  1. using System;
  2.  
  3. /// <summary>
  4. /// Random User Agent Generator (invented by gigajew)
  5. /// </summary>
  6. public class UserAgent
  7. {
  8.     /// <summary>
  9.     /// System.Random
  10.     /// </summary>
  11.     private static Random _random;
  12.  
  13.     /// <summary>
  14.     /// Static constructor (.cctor)
  15.     /// </summary>
  16.     static UserAgent()
  17.     {
  18.         _random = new Random(Guid.NewGuid().GetHashCode());
  19.     }
  20.  
  21.     /// <summary>
  22.     /// OS type
  23.     /// </summary>
  24.     public enum System : Int32
  25.     {
  26.         Windows = 0, Macintosh = 1, X11 = 2, iPad = 3, Unknown = 4
  27.     }
  28.  
  29.     /// <summary>
  30.     /// Get a random user-agent
  31.     /// </summary>
  32.     /// <returns></returns>
  33.     public static string GetRandomUserAgent()
  34.     {
  35.         return $"Mozilla/5.0 {GetRandomSystem()} {GetRandomRenderEngine()} {GetRandomBrowser()}";
  36.     }
  37.  
  38.     /// <summary>
  39.     /// Convert System to String
  40.     /// </summary>
  41.     /// <param name="system"></param>
  42.     /// <returns></returns>
  43.     private static string GetSystem(System system)
  44.     {
  45.         if (system == System.Windows)
  46.         {
  47.             return $"(Windows NT {GetRandomVersion(10)}; {GetRandomArchitecture(system)})";
  48.         }
  49.         else if (system == System.Macintosh)
  50.         {
  51.             return $"(Macintosh; Intel Mac OS X 10_{_random.Next(9, 14)}_{_random.Next(0, 11)})";
  52.         }
  53.         else if (system == System.Unknown)
  54.         {
  55.             return $"(compatible; MSIE {GetRandomVersion(10)}; Windows NT {GetRandomVersion(10)}; Trident/{GetRandomVersion(5)}; Trident/{GetRandomVersion(5)})";
  56.         }
  57.         else if (system == System.iPad)
  58.         {
  59.             return $"(iPad; CPU OS 10_{_random.Next(1, 14)}_{_random.Next(0, 11)} like Mac OS X)";
  60.         }
  61.         else if (system == System.X11)
  62.         {
  63.             if (_random.Next(0, 2) == 1)
  64.             {
  65.                 return $"(X11; Ubuntu; Linux x86_64; rv:{GetRandomVersion(80)})";
  66.             }
  67.             else
  68.             {
  69.                 return $"(X11; Linux x86_64; rv:{GetRandomVersion(80)})";
  70.             }
  71.         }
  72.         return string.Empty;
  73.     }
  74.  
  75.     /// <summary>
  76.     /// Return a random OS type
  77.     /// </summary>
  78.     /// <returns></returns>
  79.     private static string GetRandomSystem()
  80.     {
  81.         var sys = (System)_random.Next(0, 5);
  82.         return GetSystem(sys);
  83.     }
  84.  
  85.     /// <summary>
  86.     /// Get random architecture
  87.     /// </summary>
  88.     /// <param name="system"></param>
  89.     /// <returns></returns>
  90.     private static string GetRandomArchitecture(System system)
  91.     {
  92.         var i = _random.Next(0, 2);
  93.         if (system == System.Windows)
  94.         {
  95.             return (i == 1) ? "Win64; x64" : $"WOW64; rv:{GetRandomVersion(80)}";
  96.         }
  97.         return string.Empty;
  98.     }
  99.  
  100.     /// <summary>
  101.     /// Get random browser
  102.     /// </summary>
  103.     /// <returns></returns>
  104.     private static string GetRandomBrowser()
  105.     {
  106.         int i = _random.Next(0, 3);
  107.         if (i == 0)
  108.         {
  109.             return $"(KHTML, like Gecko) Chrome/{_random.Next(30, 90)}.0.{_random.Next(1000, 3000)}.{_random.Next(100, 200)} Safari/{_random.Next(400, 600)}.{_random.Next(20, 50)}";
  110.         }
  111.         else if (i == 1)
  112.         {
  113.             return $"Firefox/{_random.Next(40, 60)}.0";
  114.         }
  115.         else if (i == 2)
  116.         {
  117.             return $"(KHTML, like Gecko) Version/{_random.Next(1, 11)}.0 Mobile/14G60 Safari/{GetRandomVersion(600)}";
  118.         }
  119.         return string.Empty;
  120.     }
  121.    
  122.     /// <summary>
  123.     /// Get random render engine
  124.     /// </summary>
  125.     /// <returns></returns>
  126.     private static string GetRandomRenderEngine()
  127.     {
  128.         int i = _random.Next(0, 2);
  129.         if (i == 1)
  130.         {
  131.             return $"AppleWebKit/{GetRandomVersion(1000)}.{_random.Next(1, 10)}.{_random.Next(1, 10)}";
  132.         }
  133.         else
  134.         {
  135.             return "Gecko/20100101";
  136.         }
  137.     }
  138.  
  139.     /// <summary>
  140.     /// Get random float (version) X.x
  141.     /// </summary>
  142.     /// <param name="max"></param>
  143.     /// <returns></returns>
  144.     private static double GetRandomVersion(int max)
  145.     {
  146.         return Math.Round(_random.NextDouble() * (max + 2), 1);
  147.     }
  148. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement