Advertisement
Clarkelele

Untitled

Mar 5th, 2017
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.19 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Net;
  7. using System.IO;
  8. using System.Threading;
  9. using System.Net.Sockets;
  10.  
  11. namespace Location
  12. {
  13. public enum Style_Requests
  14. {
  15. whois,
  16. http0_9,
  17. http1_0,
  18. http1_1,
  19. }
  20. public class Location
  21. {
  22. public static int port = 43;
  23. public static string hostname = "whois.net.dcs.hull.ac.uk";
  24. public static Style_Requests Style = Style_Requests.whois;
  25. static void Main(string[] args)
  26. {
  27. try
  28. {
  29. List<string> input = new List<string>();
  30. foreach (string item in args)
  31. {
  32. input.Add(item);
  33. }
  34. //copy args to list
  35. input = Detect(input);
  36. int NoofArgs = input.Count;
  37. if (NoofArgs == 0)
  38. {
  39. throw new Exception("No Arguments Entered");
  40. }
  41.  
  42. TcpClient clientUser = new TcpClient();
  43. clientUser.Connect(hostname, port);
  44.  
  45. //Set send and recieve time outs to 1 second
  46. clientUser.SendTimeout = 1000;
  47. clientUser.ReceiveTimeout = 1000;
  48. StreamWriter sw = new StreamWriter(clientUser.GetStream());
  49. StreamReader sr = new StreamReader(clientUser.GetStream());
  50.  
  51. switch (Style)
  52. {
  53. case Style_Requests.whois:
  54. Handle_W(input, NoofArgs, sw, sr);
  55. break;
  56.  
  57. case Style_Requests.http0_9:
  58. Handle_9(input, NoofArgs, sw, sr);
  59. break;
  60. case Style_Requests.http1_0:
  61. Handle_10(input, NoofArgs, sw, sr);
  62. break;
  63.  
  64. case Style_Requests.http1_1:
  65. Handle_11(input, NoofArgs, sw, sr);
  66. break;
  67. }
  68. }
  69. catch (Exception e)
  70. {
  71. Console.WriteLine(e.Message);
  72. }
  73. }
  74. private static List<string> Detect(List<string> input)
  75. {
  76. for (int i = 0; i < input.Count; i++)
  77. {
  78. switch (input[i])
  79. {
  80. case "/h":
  81. input.RemoveAt(i);
  82. hostname = input[i];
  83. input.RemoveAt(i);
  84. i--;
  85. break;
  86. case "/p":
  87. input.RemoveAt(i);
  88. if (!int.TryParse(input[i], out port))
  89. {
  90. throw new Exception("Invalid Port Input");
  91. }
  92. input.RemoveAt(i);
  93. i--;
  94. break;
  95. case "/h9":
  96. Style = Style_Requests.http0_9;
  97. input.RemoveAt(i);
  98. i--;
  99. break;
  100. case "/h0":
  101. Style = Style_Requests.http1_0;
  102. input.RemoveAt(i);
  103. i--;
  104. break;
  105. case "/h1":
  106. Style = Style_Requests.http1_1;
  107. input.RemoveAt(i);
  108. i--;
  109. break;
  110. default:
  111. Console.WriteLine("Unrecognised Command");
  112. break;
  113. }
  114. }
  115. return input;
  116. }
  117.  
  118. #region whois
  119. private static void Handle_W(List<string> input, int NoofArgs, StreamWriter sw, StreamReader sr)
  120. {
  121. switch (NoofArgs)
  122. {
  123. case 1:
  124. Request_W(input[0], sw, sr);
  125. break;
  126. case 2:
  127. Request_W(input[0], input[1], sw, sr);
  128. break;
  129. default:
  130. break;
  131. }
  132. }
  133. private static void Request_W(string name, StreamWriter sw, StreamReader sr)
  134. {
  135. sw.Write(name);
  136. sw.Flush();
  137. string serverMessage = sr.ReadToEnd().Trim();
  138.  
  139. if (serverMessage == "ERROR: no entries found")
  140. {
  141. Console.WriteLine("ERROR: no entries found");
  142.  
  143. }
  144. else
  145. {
  146. Console.WriteLine(name + " is " + serverMessage);
  147. }
  148. }
  149. private static void Request_W(string name, string location, StreamWriter sw, StreamReader sr)
  150. {
  151. sw.Write(name + location);
  152. sw.Flush();
  153. string serverMessage = sr.ReadToEnd().Trim();
  154.  
  155. if (serverMessage == "OK")
  156. {
  157. Console.WriteLine("OK");
  158. }
  159. else
  160. {
  161. Console.WriteLine(serverMessage);
  162. }
  163.  
  164. }
  165. #endregion
  166.  
  167. #region h0.9
  168. private static void Handle_9(List<string> input, int NoofArgs, StreamWriter sw, StreamReader sr)
  169. {
  170. switch (NoofArgs)
  171. {
  172. case 1:
  173. Request_9(input[0], sw, sr);
  174. break;
  175.  
  176. case 2:
  177. Request_9(input[0], input[1], sw, sr);
  178. break;
  179.  
  180. default:
  181. break;
  182. }
  183. }
  184. private static void Request_9(string name, StreamWriter sw, StreamReader sr)
  185. {
  186. sw.WriteLine("Get /" + name);
  187. sw.Flush();
  188. string serverMessage = sr.ReadToEnd().Trim();
  189. if (serverMessage == "HTTP/0.9 404 Not Found \nContent-Type: test/plain")
  190. {
  191. Console.WriteLine(serverMessage);
  192. }
  193. else
  194. {
  195. Console.WriteLine("HTTP/0.9 200 OK" + Environment.NewLine +
  196. "Conent-Type: text/plain" + Environment.NewLine + Environment.NewLine + serverMessage);
  197. }
  198. }
  199. private static void Request_9(string name, string location, StreamWriter sw, StreamReader sr)
  200. {
  201. sw.WriteLine("Put /" + name + Environment.NewLine + Environment.NewLine + location);
  202. sw.Flush();
  203. string serverMessage = sr.ReadToEnd().Trim();
  204. if (serverMessage == "HTTP/0.9 200 OK")
  205. {
  206. Console.WriteLine("HTTP/0.9 200 OK" + Environment.NewLine +
  207. "Conent-Type: text/plain");
  208. }
  209.  
  210. }
  211. #endregion
  212.  
  213. #region h1.0
  214. private static void Handle_10(List<string> input, int NoofArgs, StreamWriter sw, StreamReader sr)
  215. {
  216. switch (NoofArgs)
  217. {
  218. case 1:
  219. Request_10(input[0], sw, sr);
  220. break;
  221.  
  222. case 2:
  223. Request_10(input[0], input[1], sw, sr);
  224. break;
  225.  
  226. default:
  227. break;
  228.  
  229. }
  230. }
  231. private static void Request_10(string name, StreamWriter sw, StreamReader sr)
  232. {
  233. sw.WriteLine("GET /?" + name + " HTTP/1.0");
  234. sw.Flush();
  235. string serverMessage = sr.ReadToEnd().Trim();
  236. if (serverMessage == "HTTP/1.0 404 Not Found" + Environment.NewLine + "Content-Type: text/plain")
  237. {
  238. Console.WriteLine(serverMessage);
  239. }
  240. else
  241. {
  242. Console.Write(serverMessage);
  243. }
  244. }
  245. private static void Request_10(string name, string location, StreamWriter sw, StreamReader sr)
  246. {
  247. int locationlength = location.Length;
  248. sw.Write("Post / " + name + " HTTP/1.0" + Environment.NewLine + "Content-Length: " + locationlength
  249. + Environment.NewLine + location);
  250. sw.Flush();
  251. string serverMessage = sr.ReadToEnd().Trim();
  252. if (serverMessage == "HTTP/1.0 200 OK" + Environment.NewLine + "Content-Type: text/plain")
  253. {
  254. Console.Write(serverMessage);
  255. }
  256. }
  257. #endregion
  258.  
  259. #region h1.1
  260. private static void Handle_11(List<string> input, int NoofArgs, StreamWriter sw, StreamReader sr)
  261. {
  262. switch (NoofArgs)
  263. {
  264. case 1:
  265. Request_11(input[0], sw, sr);
  266. break;
  267.  
  268. case 2:
  269. Request_11(input[0], input[1], sw, sr);
  270. break;
  271.  
  272. default:
  273. break;
  274. }
  275. }
  276. private static void Request_11(string name, StreamWriter sw, StreamReader sr)
  277. {
  278. sw.Write("GET /?name=" + name + " HTTP/1.1" + Environment.NewLine
  279. + "Host: " + hostname);
  280. sw.Flush();
  281. string serverMessage = sr.ReadToEnd().Trim();
  282. if (serverMessage == "HTTP/1.1 404 Not Found" + Environment.NewLine +
  283. "Conten-Type: text/plain")
  284. {
  285. Console.WriteLine(serverMessage);
  286. }
  287. else
  288. {
  289. Console.WriteLine(serverMessage);
  290. }
  291. }
  292. private static void Request_11(string name, string location, StreamWriter sw, StreamReader sr)
  293. {
  294. int TotalLength = location.Length + name.Length;
  295. sw.Write("GET / HTTP/1.1" + Environment.NewLine + "Host: " + hostname +
  296. Environment.NewLine + "Content-Length: " + TotalLength + Environment.NewLine +
  297. "name=" + name + "&location=" + location);
  298. string serverMessage = sr.ReadToEnd();
  299. if (serverMessage.Contains("OK"))
  300. {
  301. Console.Write(serverMessage);
  302. }
  303. }
  304. #endregion
  305. }
  306. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement