program do monitorowania sieci, a w zasadzie ISP

program do monitorowania sieci, a w zasadzie ISP
Xitami
  • Rejestracja:ponad 20 lat
  • Ostatnio:około rok
0

Zaproponujcie jakiś program, który dałby mi argument do rozmowy z moim dostawcą internetu.
Na moje oko zbyt często mam przerwy, chciałbym czegoś dokładniejszego niż moje oko. Coś małego, prostego.
W zasadzie 24h na dobę jakiś komputer działa, miło by było gdyby dało się łączyć logi z dwu komputerów.

RE
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:około rok
0

Jak się biłem z UPC to napisałem taki programik (kazali mi udowodnić, że skoki pingu to ich wina, a nie moja to udowodniłem):

Kopiuj
using System;
using System.Text;
using System.Collections;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using System.Net.NetworkInformation;
using System.Diagnostics;
using System.Runtime.InteropServices;

namespace upcping
{
    class Program
    {
        private static List<DateTime> peaks;

        public enum CtrlTypes
        {
            CTRL_C_EVENT = 0,
            CTRL_BREAK_EVENT,
            CTRL_CLOSE_EVENT,
            CTRL_LOGOFF_EVENT = 5,
            CTRL_SHUTDOWN_EVENT
        }

        public delegate bool HandlerRoutine(CtrlTypes CtrlType);
        
        [DllImport("Kernel32")]
        public static extern bool SetConsoleCtrlHandler(HandlerRoutine Handler, bool Add);

        private static bool ConsoleCtrlCheck(CtrlTypes ctrlType)
        {
            if (peaks.Count > 0)
            {
                Trace.WriteLine("\r\n\r\nPeaks:");

                foreach (var peak in peaks)
                    Trace.WriteLine(peak.ToLongTimeString());
            }

            return false;
        }

        static void Main(string[] args)
        {
            string[] ips = { "192.168.1.1", // router
                             "192.168.100.1", // modem
                             "84.10.148.1", // router UPC #1
                             "89.75.2.161", // router UPC #2
                             "213.180.146.27" }; // onet.pl

            const int interval = 1000; // w ms
            const int packetSize = 32; // w bajtach
            const int timeout = 2000; // w ms
            const int threshold = 100; // w ms

            SetConsoleCtrlHandler(new HandlerRoutine(ConsoleCtrlCheck), true);

            Ping ping = new Ping();
            var tasks = new Task<PingReply>[ips.Length];
            byte[] buffer = Encoding.ASCII.GetBytes(new string('F', packetSize));
            int row = 0;
            peaks = new List<DateTime>();

            TextWriterTraceListener textFileTracer = new TextWriterTraceListener(DateTime.Now.ToShortDateString() + " " +
                DateTime.Now.ToShortTimeString().Replace(':', '.') + ".txt");
            ConsoleTraceListener consoleTracer = new ConsoleTraceListener();
            Trace.Listeners.Add(textFileTracer);
            Trace.Listeners.Add(consoleTracer);
            Trace.AutoFlush = true;

            while (true)
            {
                if (row % 30 == 0)
                {
                    Trace.Write(new string(' ', DateTime.Now.ToLongTimeString().Length));
                    foreach (var ip in ips)
                        Trace.Write(string.Format("{0,16}", ip));
                    Trace.WriteLine("");
                    row = 0;
                }
                row++;

                for (int i = 0; i < ips.Length; i++)
                    tasks[i] = new Task<PingReply>((object ip) => ping.Send(ip.ToString(), timeout, buffer,
                        new PingOptions() { DontFragment = true }), ips[i]);

                var start = DateTime.Now;

                foreach (var task in tasks)
                    task.Start();

                try
                {
                    Task.WaitAll(tasks);
                }
                catch (Exception)
                {
                    Trace.WriteLine("Error");
                    continue;
                }
                finally
                {
                    var elapsed = interval - (int)(DateTime.Now - start).TotalMilliseconds;

                    if (elapsed > 0)
                        Thread.Sleep(elapsed);
                }

                StringBuilder sb = new StringBuilder();
                foreach (var task in tasks)
                {
                    PingReply result = task.Result;

                    if (result.Status == IPStatus.TimedOut)
                        sb.AppendFormat("{0,16}", "timeout");
                    else if (result.Status != IPStatus.Success)
                        sb.AppendFormat("{0,16}", "*");
                    else if (result.RoundtripTime >= threshold)
                    {
                        sb.AppendFormat("{0,16}", "**** " + result.RoundtripTime + "ms");

                        DateTime lastPeak = peaks.FindLast(dateTime => (DateTime.Now - dateTime).TotalSeconds > 30);
                        if (lastPeak == default(DateTime)) peaks.Add(DateTime.Now);
                    }
                    else
                        sb.AppendFormat("{0,14}ms", (result.RoundtripTime == 0) ? "<1" : result.RoundtripTime.ToString());
                }

                for (int i = 0; i < tasks.Length; i++)
                    tasks[i].Dispose();

                string log = sb.ToString();
                
                Trace.WriteLine(DateTime.Now.ToLongTimeString() + log);
            }
        }
    }
}
Xitami
a czym to sobie skompilować?
DZ
MS Visual C# czy coś...takiego ;P
Xitami
  • Rejestracja:ponad 20 lat
  • Ostatnio:około rok
0

nie gram sieciowo, to lagi mi nie przeszkadzają.
Dość często tracę łączność w ogóle. Chciałbym uzbierać jakiś tygodniowy/miesięczny raport niezależnie czy jestem w domu czy nie.
o może z logów routera coś wypatrzę, tylko gdzie zapisałem hasło? :)

edytowany 1x, ostatnio: Xitami
Patryk27
Do mnie do routera aby się zalogować wystarczy wpisać "http://192.168.0.1/" i "admin". Pomimo tego, iż jest ustawione hasło to jakimś cudem da się zalogować na konto admina bez jego wpisywania.
Xitami
router nawet nie zauważył kiedy wyciągnąłem mu kabelek
Patryk27
Wyczuwam podtekst....
H4
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 4 lata
  • Postów:107
0

Wireshark nie będzie optymalnym programem?

madmike
Nie strzelasz przypadkiem z armaty do wróbelka? Poza tym, zobacz na cel tego "monitorowania": czy połącznie nie jest zrywane ew. jak często jest zrywane, żeby można było pogadać z providerem.
H4
Nie musisz monitorować całego ruchu w sieci by udowodnić zrywanie połączenia...
madmike
Co nie zmienia faktu, że łatwiej i rozsądniej jest napisać sobie prosty skrypt/program, który można puścić w tle jako np. usługę zbierającą informację, bez konieczności babrania się z wiresharkiem. Zwłaszcza, że to forum dla programistów i napisanie czegoś takiego wymaga tylko dobrych chęci :) Masz zresztą przykład powyżej i poniżej...
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:4 dni
  • Lokalizacja:Wrocław
0

Ja ostatnio użyłem czegoś takiego:

Kopiuj
echo off
:start
echo %date% %time% >> "D:\log\pinglog.txt"
ping wp.pl >> "D:\log\pinglog.txt"
goto start
Xitami
a jak takiego bacika (bez goto) wołać powiedzmy co minutę? (win xp)
somekind
To nie bat tylko cmd. I w ogóle, to drugi w życiu, więc nie mam pojęcia czy się da jakoś sterować interwałem.
AP
  • Rejestracja:około 22 lata
  • Ostatnio:ponad 12 lat
  • Postów:3079
0

Gdy miałem problemy ze swoim dostawcą po prostu do niego zadzwoniłem i powiedziałem, że mam wysoki ping. Przyjechał technik, naprawił i tyle. Nic więcej nie musiałem tłumaczyć, nie musiałem pokazywać logów itp. wystarczył jeden telefon, a dostawca to UPC.

RE
1. parametry połączenia wg nich wyglądały ok (w tej danej chwili), 2. problem leżał w ich infrastrukturze, a nie moim routerze, co próbowali mi wmówić, 3. lagspajki występowały co kilkanaście minut, więc skoro mówili mi, że problemu nie ma to trzeba go było udowodnić. po otrzymaniu logów przyjęli zgłoszenie i przyznali mi rację. naprawiono problem bez wizyty technika.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.