Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2011, 20:51   #1
Phazz
Новичок
Джуниор
 
Регистрация: 28.04.2011
Сообщений: 2
По умолчанию Автоматический разрыв vpn сессии при прохождении пинга. (С#)

Доброго времени суток. Прошу помочь с написанием, а точнее в дописанием программы, которая автоматически разрывала бы определенную VPN сессию при прохождении пинга до определенного хоста.
Нарыл исходник NetConnector там все есть, даже со статистикой, остается только дописать ту часть, которая будет разрывать сессию.
Накидайте пожалуйста ссылки, где рассказывается, как это можно реализовать. Заранее спасибо.
Код:
using System;
using System.Net.NetworkInformation;
using System.Text;
using System.Threading;
using System.Windows.Forms;
 
namespace Ishodniki_RU.NetConnector
{
    public partial class Pinger : Form
    {
        public Pinger()
        {
            InitializeComponent();
        }
 
        // Количество "пингов"
        private static int _pingCount = 4;
        // Время возврата
        private int[] _time = new int[_pingCount];
        // Удачные/неудачные пакеты
        private bool[] _pack = new bool[_pingCount];
        // Счетчик
        private int _ii = 0;
  // Устанавливаем стандартные значения
        private void Pinger_Shown(object sender, EventArgs e)
        {
            ipTextBox1.Text = "";
            textBox2.Text = "64";
            textBox1.Text = "";
        }
 
        // Начать пинг
        private void button1_Click(object sender, EventArgs e)
        {
            if(ipTextBox1.IsValid() == false)
            {
                MessageBox.Show("IP that you have typed is invalid", "Error", MessageBoxButtons.OK,
                                MessageBoxIcon.Error);
                return;
            }
            int ttl;
            try
            {
                ttl = Convert.ToInt32(textBox2.Text);
            }
            catch(Exception)
            {
                MessageBox.Show("Incorrect gateways count", "Error", MessageBoxButtons.OK,
                                MessageBoxIcon.Error);
                return;
            }
            AutoResetEvent autoResetEvent = new AutoResetEvent(false);
            //pinger.PingCompleted += new PingCompletedEventHandler(pingCallback);
            string pingDataString = "Visit http://forum.ishodniki.ru!";
            byte[] pingDataByte = Encoding.ASCII.GetBytes(pingDataString);
            int timeout = 12000;
            PingOptions pingOptions = new PingOptions(ttl, true);
            _ii = 0;
            string ip = ipTextBox1.Text;
            textBox1.Text = "Exchange 32 bytes packages with [" + ip + "]:" + Environment.NewLine;
            int successPack = 0;
            long minTime = int.MaxValue;
            long maxTime = 0;
            long totalTime = 0;
            Ping pinger = new Ping();
            pinger.PingCompleted += new PingCompletedEventHandler(pingCallback);
            for (int ii = 0; ii < _pingCount; ii++)
            {
                PingReply Reply = pinger.Send(ip, timeout, pingDataByte, pingOptions);
                textBox1.Text += "Answer from " + ip; 
                if(Reply.Status == IPStatus.Success)
                {
                    textBox1.Text += ": bytes: " + Reply.Buffer.Length + " time: " +
                                  Reply.RoundtripTime + " TTL: " + Reply.Options.Ttl + Environment.NewLine;
                    successPack++;
                    if (Reply.RoundtripTime < minTime) minTime = Reply.RoundtripTime;
                    if (Reply.RoundtripTime > maxTime) maxTime = Reply.RoundtripTime;
                    totalTime += Reply.RoundtripTime;
                }
                else 
                {
                    textBox1.Text += Reply.Status.ToString() + Environment.NewLine; 
                    textBox1.Refresh();
                }
                /*pinger.SendAsync(ip, timeout, pingDataByte, pingOptions, autoResetEvent);
                pinger.SendAsyncCancel();
                if(_pack[ii]) 
                {
                    successPack ++;
                    if(_time[ii] < minTime) { minTime = _time[ii]; }
                    if(_time[ii] > maxTime) { maxTime = _time[ii]; }
                    totalTime += _time[ii];
                }*/
            }
            string average, mintime, maxtime;
            try
            {
                average = (totalTime / successPack).ToString();
                mintime = minTime.ToString();
                maxtime = maxTime.ToString();
            }
            catch (DivideByZeroException)
            {
                average = "undefined";
                mintime = "undefined";
                maxtime = "undefined";
            }
Phazz вне форума Ответить с цитированием
Старый 28.04.2011, 20:52   #2
Phazz
Новичок
Джуниор
 
Регистрация: 28.04.2011
Сообщений: 2
По умолчанию

Код:
       
            textBox1.Text += "Ping statistic for [" + ip + "]: " + Environment.NewLine +
                             "Packages: send = " + _pingCount.ToString() +
                             " receive = " + successPack.ToString() +
                             " lost = " + (_pingCount - successPack).ToString() +
                             " (" + (100 * successPack / _pingCount).ToString() + "% lost)" + Environment.NewLine +
                             "Time: minimum = " + mintime +
                             " ms maximum = " + maxtime +
                             " ms average = " + average;
        }
 
 
        // Проверяем кнопки
        private void textBox2_KeyPress(object sender, KeyPressEventArgs e)
        {
            if ((Char.IsDigit(e.KeyChar) == false) && (e.KeyChar != (char)Keys.Back)
                && (e.KeyChar != (char)Keys.Left) && (e.KeyChar != (char)Keys.Right)) 
            { e.Handled = true; }
        }
 
        //  Esc|Enter
        private void Pinger_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
        {
            if(e.KeyCode == Keys.Escape)
            { button2_Click(sender, e); }
            if(e.KeyCode == Keys.Enter)
            { button1_Click(sender, e); }
        }
 
        // Отмена
        private void button2_Click(object sender, EventArgs e)
        {
            Close();
        }
 
        // Callback пинга      
        private void pingCallback(object sender, PingCompletedEventArgs e)
        {
            if (e.Error != null)
            {
                textBox1.Text += "Ping failed, reason: " + e.Error.ToString();
                _time[_ii] = -1;
                _pack[_ii] = false; 
            }
            if (e.Reply.Status == IPStatus.Success)
            {
                textBox1.Text += "Answer from " + e.Reply.Address + ": byttes: " + e.Reply.Buffer.Length + " time: " +
                                 e.Reply.RoundtripTime + " TTL: " + e.Reply.Options.Ttl + Environment.NewLine;
                _time[_ii] = (int)e.Reply.RoundtripTime;
                _pack[_ii] = true;
            }
            _ii++;
            ((AutoResetEvent)e.UserState).Set();
        }
    }
}
Phazz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
автоматический вывод данных при вводе одного параметра Akmal-Sharipov Microsoft Office Excel 9 16.12.2010 16:13
Автоматический поиск в DBGrid при вводе символа в Edit Irina_87 БД в Delphi 12 12.12.2009 03:53
Искусственное увеличение пинга toruser Работа с сетью в Delphi 2 16.06.2009 18:37
Автоматический Update при открытии файла ruavia3 Microsoft Office Excel 3 16.03.2009 11:31
Автоматический перенос Алиаса при создании БД Жук Помощь студентам 1 31.01.2009 10:10