C # ping программа выдает странный вывод - PullRequest
1 голос
/ 07 февраля 2012

У меня есть программа, которая в будущем будет автоматически проверять важные машины моей компании через определенные промежутки времени. Он получает pingable адреса из базы данных, которая в целях тестирования теперь содержит только 3 адреса: localhost 127.0.0.1, facebook 66.220.153.15 и google 173.194.67.104.

Проблема в том, что, пока я подключен к Интернету, программа не работает и выдает мистический вывод.

Выход без подключения к Интернету

127.0.0.1 ping status: Success
173.194.67.104 ping status: HardwareError
66.220.153.15 ping status: HardwareError
Error IP 66.220.153.15
Address: 127.0.0.1 RTT: 0 TTTL: 128 Don't fragment: True Buffer size: 32
Error IP 173.194.67.104

и при подключении

120.1.21.0 ping status: 2406264
Error IP 120.1.21.0
127.0.0.1 ping status: Success
120.1.21.0 ping status: 2406264
Error IP 120.1.21.0
Address: 127.0.0.1 RTT: 0 TTTL: 128 Don't fragment: True Buffer size: 32

Понятия не имею, откуда взялись эти странные ip и статус.

Любая помощь будет высоко ценится!

Мой код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net;
using System.Threading;
using System.Net.NetworkInformation;
using System.ComponentModel;
using System.Diagnostics;

static int Main(string[] args)
{
        testidbDataSetTableAdapters.testitauluTableAdapter adapter = new testidbDataSetTableAdapters.testitauluTableAdapter();
        testidbDataSet.testitauluDataTable table = null;
        table = adapter.GetData();

        if (table != null)
        {
            if (table.Rows.Count > 0)
            {
                for (int i = 0; i < table.Rows.Count; i++)
                {
                    Pinger pinger = new Pinger(table[i].id, table[i].ip);
                    new Thread(new ThreadStart(pinger.Pingaa)).Start();
                }
                Thread.Sleep(2500);
            }
        }
        return 0;
    }

    public class Pinger
    {
        int x;
        string Ip;
        public Pinger(int x, string Ip)
        {
            this.x = x;
            this.Ip = Ip;
        }

        public void Pingaa()
        {
            AutoResetEvent waiter = new AutoResetEvent(false);
            Ping pingSender = new Ping();
            PingOptions pingOptions = new PingOptions(64,true);
            byte[] bytes = new byte[32];
            pingOptions.DontFragment = true;
            pingOptions.Ttl = 15;
            int timeOut = 2000;
            pingSender.PingCompleted += new PingCompletedEventHandler(pingSender_PingCompleted);
            pingSender.SendAsync(Ip, timeOut, bytes, pingOptions, waiter);
        }
        private static void pingSender_PingCompleted(object sender, PingCompletedEventArgs e)
        {
            if (e.Cancelled)
            {
                Console.WriteLine("Ping canceled.");
                ((AutoResetEvent)e.UserState).Set();
            }
            if (e.Error != null)
            {
                Console.WriteLine("Ping failed");
                Console.WriteLine(e.Error.ToString());
                ((AutoResetEvent)e.UserState).Set();
            }
            PingReply reply = e.Reply;
            DisplayReply(reply);
            ((AutoResetEvent)e.UserState).Set();
        }

        private static void DisplayReply(PingReply reply)
        {
            if (reply == null)
                return;

            Console.WriteLine("{0} ping status: {1}", reply.Address, reply.Status.ToString());
            if (reply.Status == IPStatus.Success)
            {
                Console.WriteLine("Address: {0} RTT: {1} TTTL: {2} Don't fragment: {3} Buffer size: {4}", reply.Address, reply.RoundtripTime, reply.Options.Ttl, reply.Options.DontFragment, reply.Buffer.Length);
            }
            else
            {
                Console.WriteLine("Error IP " + reply.Address);

            }
    }

РЕДАКТИРОВАТЬ : Странный ip остается всегда тем же, но странный статус всегда меняется на случайное (?) 7-8-значное число.

...