Aporte-Duda DownNET

Iniciado por d1dac, 6 Noviembre 2012, 03:10 AM

0 Miembros y 1 Visitante están viendo este tema.

d1dac

Hola comunidad, hace ya un tiempo quise codear un programa que apagara todas las maquinas de la red local, lo había abandonado pero lo volví a retomar y parece que va en buen camino.

La primera versión que hice tenia un defecto que al enviar la señal de apagado a las maquinas, apagaba por ejemplo maquina 1,maquina 2,m 3,m 4,mi maquina. pero ya no apagaba el resto. m 5,m6
ya que mi maquina estaba en el medio.

Decidí arreglarlo y parece estar ok. pero me gustaría saber en que puede ser optimizado o añadir opciones, o incluso si es que funciona

Aqui mi code

Código (csharp) [Seleccionar]

using System;
using System.Text;
using System.Diagnostics;
using System.Collections;
using System.IO;
using System.Threading;

namespace ConsoleApplication1
{
   class Program
   {
       static Process u;
       static Process v;
       static string usuario;
       static string[] maquina;
       static int i=0;

       static void Main(string[] args)
       {
           //*-*-*-*-*-*-*-*-*-*-*
           //Lan Dow Net by D1dac
           //*-*-*-*-*-*-*-*-*-*-*
           try
           {
               File.Delete("user.txt");
               File.Delete("maquinas.txt");
           }
           catch { }

           Thread nv = new Thread(netView);
           nv.Start();

           Thread nu = new Thread(netUser);
           nu.Start();

           Console.ForegroundColor = ConsoleColor.Green;
           Console.Title = "Net Shutdown by D1dac 1.0";


           Console.WriteLine("En cuanto tiempo quieres que se apague" + "\nPD:Tu maquina tambien se incluye en la lista");
           string tiempo=Console.ReadLine();

           
           for (int a = 0; a <= i-1; a++)
           {
               if (!maquina[a].Equals((usuario)))
               {
                   ProcessStartInfo info = new ProcessStartInfo("CMD.EXE", "/c shutdown -s -t " + tiempo + " -m " + maquina[a]);
                   info.WindowStyle = ProcessWindowStyle.Hidden;
                   info.Verb = "open";
                   Process.Start(info);
               }
           }

           ProcessStartInfo autoS = new ProcessStartInfo("CMD.EXE", "/c  shutdown -s -t " + tiempo);
           autoS.WindowStyle = ProcessWindowStyle.Hidden;
           autoS.Verb = "open";
           Process.Start(autoS);
           
       }



       static void netView()
       {
           ProcessStartInfo info1 = new ProcessStartInfo("CMD.EXE", "/C net view > maquinas.txt");
           info1.Verb = "open";
           info1.WindowStyle = ProcessWindowStyle.Hidden;
           v= Process.Start(info1);

           string line;
           maquina = new string[50];

           v.WaitForExit();

           StreamReader file = new StreamReader("maquinas.txt");

           while ((line = file.ReadLine()) != null)
           {
               if (line.Contains("\\"))
               {
                   maquina[i] = (line.Substring(2, line.Length - 2)).TrimEnd();
                   Console.WriteLine(i + " : " + maquina[i]);
                   i++;
               }
           }

           file.Close();

           try { File.Delete("maquinas.txt"); } catch{};
       }

       static void netUser()
       {
           ProcessStartInfo user = new ProcessStartInfo("CMD.EXE", "/C net user > user.txt");
           user.Verb = "open";
           user.WindowStyle = ProcessWindowStyle.Hidden;
           u= Process.Start(user);

           u.WaitForExit();
 
           string path = "user.txt";
           string readText = File.ReadAllText(path, Encoding.UTF8);
           usuario = readText.Substring(26, 10).ToString().ToUpper();

           try { File.Delete("user.txt"); }catch { };
       }

       
   }
}


Cabe resaltar que debes tener privilegios en la maquina remota.

GonzaFz

Wow muy interesante hasta la parte de que hay que tener privilegios en las otras computadoras :S!
¿Que tipo de privilegios? Es que en mi colegio tenemos las netbooks de conectar igualdad y casi nadie tiene contraseña en su computadora, cuando quieres ingresar a la misma te pide usuario y contraseña. El usuario es Alumno pero la contraseña no tiene y si la dejas en blanco no funciona entonces no se como hacer..

Si me ayudas con eso y le puedo apagar la netbook al profesor (porque el muy maldito me habia quitado mi netbook) te agradeceria jaja!
Otra cosa, al que le apagas tiene alguna señal de que tu lo hiciste? Y una funcion que se podria agregar es elegir que computadoras deseas apagar, como por ejemplo elijas Todas o X computadora.

Saludos!

Novlucker

No lo he probado, pero por que redirigir la salida de los comandos "net view" y "net user" a archivos de texto en lugar de usarlos directamente desde la aplicación?

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Keyen Night

La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...