Могу ли я написать программу для ограничения использования Интернета до 40 МБ в день? - PullRequest
3 голосов
/ 05 ноября 2010

Мой друг попросил меня написать программу для ограничения использования Интернета до 40 Мб в день. При достижении 40 МБ суточной квоты другие программы в системе не должны иметь доступа к Интернету.

Ответы [ 4 ]

10 голосов
/ 05 ноября 2010
  1. Вам необходимо отслеживать сетевую активность. Для этого можно использовать IPGlobalProperties класс.

    Имейте в виду, что статистика сбрасывается каждый раз, когда теряется соединение, поэтому вам придется их где-то хранить.

  2. Вам необходимо отключить интернет-соединение, см. Код для включения / выключения интернет-соединения

4 голосов
/ 05 ноября 2010

Скажите ему, что вы написали программу, но вместо этого наймите парня, который будет наблюдать за его использованием в Интернете, и вытащите вилку, когда предел достигнут.

РЕДАКТИРОВАТЬ: Очевидно, мое чувство юмора выключено.

Во всяком случае, я думаю, что это будет довольно сложным делом, я не мог найти код для этого.Но я нашел этот Чистый ограничитель

3 голосов
/ 05 ноября 2010

Да.

Больше доказательства концепции, чем рабочее решение.

using System;
using System.Linq;
using System.Threading;
using System.Net.NetworkInformation;

namespace ConsoleApplication1
{
    class Program
    {


        static void Main(string[] args)
        {
            const double ShutdownValue = 40960000D;
            const string NetEnable = "interface set interface \u0022{0}\u0022 DISABLED";
            const string NetDisable = "interface set interface \u0022{0}\u0022 ENABLED";

            double Incoming = 0;
            double Outgoing = 0;
            double TotalInterface;
            string SelectedInterface = "Local Area Connection";

            NetworkInterface netInt = NetworkInterface.GetAllNetworkInterfaces().Single(n => n.Name.Equals(SelectedInterface));

            for (; ; )
            {
                IPv4InterfaceStatistics ip4Stat = netInt.GetIPv4Statistics();

                Incoming += (ip4Stat.BytesReceived - Incoming);
                Outgoing += (ip4Stat.BytesSent - Outgoing);
                TotalInterface = Incoming + Outgoing;

                string Shutdown = ((TotalInterface > ShutdownValue) ? "YES" : "NO");

                if (Shutdown == "YES")
                {
                    System.Diagnostics.Process.Start("netsh", string.Format(NetDisable, SelectedInterface));
                }

                string output = string.Format("Shutdown: {0} | {1} KB/s", Shutdown, TotalInterface.ToString());
                Console.WriteLine(output);

                Thread.Sleep(3000);
            }
        }
    }
}
1 голос
/ 05 ноября 2010

Это должно быть выполнимо в маршрутизаторе или с cFosSpeed, который также предоставляет квоты, однако теперь я знаю любые бесплатные / открытые приложения, которые уже делают это.

Для того, чтобы написать его самостоятельно, вам придется каким-то образом вести подсчет количества отправленных данных, и если несколько компьютеров будут в одной сети, отслеживать будет еще сложнее.

...