У меня есть программа, которая в будущем будет автоматически проверять важные машины моей компании через определенные промежутки времени. Он получает 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-значное число.