NEWS

[C#] Chia sẻ source code tool kiểm tra domain website

[C#] Chia sẻ source code tool kiểm tra domain website
Đăng bởi: Thảo Meo - Lượt xem: 1119 11:11:24, 25/11/2023C#   In bài viết

Xin chào các bạn, hôm nay mình chia sẻ các bạn source code tool kiểm tra kết nối domain website trong lập trình c#, winform.

[C#] Source code Tool Ping Domain Website

Tool này được thiết kế để kiểm tra tình trạng kết nối và thời gian phản hồi của các domain thông qua giao thức ping.

Bằng cách này, người quản trị hệ thống có thể nhanh chóng đánh giá được trạng thái của các server và địa chỉ web có liên quan có đang online hay bị rớt mạng.

Hoặc xem kết nối có ổn định hay không.

Video demo ứng dụng:

Source code C#:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using System.Net.NetworkInformation;
using System.Threading;
using DevExpress.XtraGrid.Views.Grid;
using PingAlarm.Properties;
using System.Net;
using System.Net.Sockets;
using System.IO;
using DevExpress.XtraBars.Ribbon;
using DevExpress.XtraBars.Helpers;
using ZaloCSharpSDK;
using Newtonsoft.Json.Linq;
using System.Diagnostics;
using DevExpress.XtraEditors.Controls;
using DevExpress.Utils;
using System.Reflection;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium;
using OpenQA.Selenium.Remote;

namespace PingAlarm
{
    public partial class PingAlarm : DevExpress.XtraEditors.XtraForm
    {
        public CancellationTokenSource tokenSource;
        public bool flag_start = false;
        public Dictionary<int, int> list_timeout;
        public Dictionary<int, bool> list_status;     
        public string auth_code_zalo;
        public long id_user_zalo = 0L;
        public string access_token;
        public string user_fb;
        public string password_fb;
        public string url_fb;
       
        public PingAlarm()
        {
            InitializeComponent();
            string theme = Properties.Settings.Default.theme;
            defaultLookAndFeel.LookAndFeel.SetSkinStyle(theme);
            gridView_Data.CustomDrawRowIndicator += gridview_Email_CustomDrawRowIndicator;
            SkinHelper.InitSkinGalleryDropDown(galleryDropDown1);
            galleryDropDown1.Gallery.ItemClick += new GalleryItemClickEventHandler(Gallery_ItemClick);
     
        }
        private void Gallery_ItemClick(object sender, GalleryItemClickEventArgs e)
        {
            Properties.Settings.Default.theme = e.Item.Value.ToString();
            Properties.Settings.Default.Save();
        }


        private void btn_start_Click(object sender, EventArgs e)
        {
            flag_start = !flag_start;

            if (flag_start)
            {
                DataTable theListOfIPs = gridControl_Data.DataSource as DataTable;
                if (theListOfIPs.Rows.Count < 1)
                {
                    XtraMessageBox.Show("Bạn vui lòng thêm tên domain hoặc IP vào danh sách trước khi bắt đầu ping.", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                //set config facebook
                var provider = new DataProvider();
                user_fb = provider.ExecuteScalar($"SELECT value FROM tbl_config WHERE name='fb_username'").ToString();
                password_fb = provider.ExecuteScalar($"SELECT value FROM tbl_config WHERE name='fb_password'").ToString();
                url_fb = provider.ExecuteScalar($"SELECT value FROM tbl_config WHERE name='user_receive'").ToString();


                int sleep = Convert.ToInt32(txt_sleep.Text);
                txt_sleep.Enabled = false;
           
                btn_start.Text = "Dừng ping";
                btn_start.ImageOptions.Image = Resources.Error_32x32;
                list_timeout = new Dictionary<int, int>();
                list_status = new Dictionary<int, bool>();
                foreach (DataRow item in theListOfIPs.Rows)
                {
                    int rowHandle = theListOfIPs.Rows.IndexOf(item);
                    list_status.Add(rowHandle, true);
                }

                timer.Enabled = true;
                tokenSource = new CancellationTokenSource();
                CancellationToken ct = tokenSource.Token;

                Task.Factory.StartNew(new Action(() =>
                {
                    while (flag_start)
                    {
                        if (ct.IsCancellationRequested)
                        {
                            ct.ThrowIfCancellationRequested();
                            return;
                        }


                        Parallel.ForEach(theListOfIPs.AsEnumerable(), item =>
                        {
                            int rowHandle = theListOfIPs.Rows.IndexOf(item);
                            Ping ping = new Ping();
                            string item_hostname = item["hostname"].ToString();
                            try
                            {
                                var pingReply = ping.Send(item_hostname, 1000);
                                SetTextPingComplete(rowHandle, pingReply);

                            }
                            catch (Exception)
                            {
                                SetTextPingComplete(rowHandle, null);
                            }

                        });


                        Thread.Sleep(1000);

                    }
                }), ct);
            }
            else
            {
                timer.Enabled = false;
               
                btn_start.Text = "Bắt đầu ping";
                txt_sleep.Enabled = true;
                btn_start.ImageOptions.Image = Resources.Play_32x32;
                tokenSource.Cancel();
            }
        }

        private void SetTextPingComplete(int rowHandle, PingReply pingReply)
        {
            gridControl_Data.BeginInvoke((Action)(() =>
            {
                bool status = list_status[rowHandle];
                if (pingReply == null)
                {
                    gridView_Data.SetRowCellValue(rowHandle, "status", "Timeout");
                    gridView_Data.SetRowCellValue(rowHandle, "ip", "0.0.0.0");
                    gridView_Data.SetRowCellValue(rowHandle, "byte", "0");
                    gridView_Data.SetRowCellValue(rowHandle, "time", "0ms");
                    gridView_Data.SetRowCellValue(rowHandle, "ttl", "0");
                    if (!list_timeout.Keys.Contains(rowHandle))
                    {
                        if (status)
                        {
                            list_timeout.Add(rowHandle, Convert.ToInt32(txt_sleep.Text));
                            list_status[rowHandle] = false;
                        }

                    }
                }
                else
                {
                    if (pingReply.Status.ToString().Equals("Success"))
                    {
                        gridView_Data.SetRowCellValue(rowHandle, "ip", pingReply.Address.ToString());
                        gridView_Data.SetRowCellValue(rowHandle, "byte", pingReply.Buffer.Count().ToString());
                        gridView_Data.SetRowCellValue(rowHandle, "time", pingReply.RoundtripTime.ToString() + "ms");
                        gridView_Data.SetRowCellValue(rowHandle, "ttl", pingReply.Options.Ttl.ToString());
                        gridView_Data.SetRowCellValue(rowHandle, "status", pingReply.Status.ToString());
                        if (status == false)
                        {

                            gridView_Data.SetRowCellValue(rowHandle, "timeout", "");

                            list_timeout.Remove(rowHandle);
                            list_status[rowHandle] = true;


                        }
                    }
                    else
                    {
                        gridView_Data.SetRowCellValue(rowHandle, "ip", "0.0.0.0");
                        gridView_Data.SetRowCellValue(rowHandle, "byte", "0");
                        gridView_Data.SetRowCellValue(rowHandle, "time", "0ms");
                        gridView_Data.SetRowCellValue(rowHandle, "ttl", "0");
                        gridView_Data.SetRowCellValue(rowHandle, "status", pingReply.Status.ToString());
                        if (!list_timeout.Keys.Contains(rowHandle) && status)
                        {
                            list_timeout.Add(rowHandle, Convert.ToInt32(txt_sleep.Text));
                            list_status[rowHandle] = false;
                        }

                    }
                }
                gridView_Data.SetRowCellValue(rowHandle, "created_date", DateTime.Now.ToString("HH:mm:ss"));

            }));
        }

        public void LoadData()
        {
            var dataProvider = new DataProvider();
            var table = dataProvider.ExecuteQuery("SELECT hostname, ip, byte, time, ttl, ifnull(status, '') as status, created_date, timeout FROM tbl_data");
            gridControl_Data.DataSource = table;
        }

        public string GetLocalIPAddress()
        {
            var host = Dns.GetHostEntry(Dns.GetHostName());
            foreach (var ip in host.AddressList)
            {
                if (ip.AddressFamily == AddressFamily.InterNetwork)
                {
                    return ip.ToString();
                }
            }
            throw new Exception("No network adapters with an IPv4 address in the system!");
        }


        private void PingAlarm_Load(object sender, EventArgs e)
        {
            var provider = new DataProvider();
            LoadData();
            txt_tenmay.Caption = "TÊN MÁY: " + SystemInformation.ComputerName;
            txt_myip.Caption = "IP LAN: " + GetLocalIPAddress();
            txt_public_ip.Caption = "IP WAN: " + new WebClient().DownloadString("http://icanhazip.com");
            //load time send
            int timesend = Convert.ToInt32(provider.ExecuteScalar($"SELECT value FROM tbl_config WHERE name='time_send'").ToString());                   
            txt_sleep.Text = timesend.ToString();
          //  LoadDanhBaZalo();
            //load config facebook
       
        }

        private void gridView_Data_RowCellStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs e)
        {
            GridView view = sender as GridView;
            if (e.RowHandle == view.FocusedRowHandle)
            {
                e.Appearance.BackColor = Color.DarkBlue;
                e.Appearance.ForeColor = Color.White;
            }
        }

        public void gridview_Email_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
        {
            if (!gridView_Data.IsGroupRow(e.RowHandle)) //Nếu không phải là Group
            {
                if (e.Info.IsRowIndicator) //Nếu là dòng Indicator
                {
                    if (e.RowHandle < 0)
                    {
                        e.Info.ImageIndex = 0;
                        e.Info.DisplayText = string.Empty;
                    }
                    else
                    {
                        e.Info.ImageIndex = -1; //Không hiển thị hình
                        e.Info.DisplayText = (e.RowHandle + 1).ToString(); //Số thứ tự tăng dần
                    }
                    SizeF _Size = e.Graphics.MeasureString(e.Info.DisplayText, e.Appearance.Font); //Lấy kích thước của vùng hiển thị Text
                    Int32 _Width = Convert.ToInt32(_Size.Width) + 20;
                    BeginInvoke(new MethodInvoker(delegate { cal(_Width, gridView_Data); })); //Tăng kích thước nếu Text vượt quá
                }
            }
            else
            {
                e.Info.ImageIndex = -1;
                e.Info.DisplayText = string.Format("[{0}]", (e.RowHandle * -1)); //Nhân -1 để đánh lại số thứ tự tăng dần
                SizeF _Size = e.Graphics.MeasureString(e.Info.DisplayText, e.Appearance.Font);
                Int32 _Width = Convert.ToInt32(_Size.Width) + 20;
                BeginInvoke(new MethodInvoker(delegate { cal(_Width, gridView_Data); }));
            }
        }

        public bool cal(Int32 _Width, GridView _View)
        {
            _View.IndicatorWidth = _View.IndicatorWidth < _Width ? _Width : _View.IndicatorWidth;
            return true;
        }

        private void gridView_Data_RowCellClick(object sender, RowCellClickEventArgs e)
        {
            if (e.Column == gridXoa)
            {
                if (flag_start)
                {
                    XtraMessageBox.Show("Vui lòng dừng Ping trước khi xóa tên miền ra khỏi danh sách.", "Thông báo!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                string hostname = gridView_Data.GetFocusedDataRow()["hostname"].ToString();
                var diaglog = XtraMessageBox.Show($"Bạn có chắc chắn muốn xóa tên miền {hostname} ra khỏi danh sách hay không?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                if (diaglog == DialogResult.Yes)
                {
                    var provider = new DataProvider();
                    provider.ExecuteNonQuery($"delete from tbl_data where hostname='{hostname}'");
                    ((DataTable)gridControl_Data.DataSource).Rows.Remove(gridView_Data.GetDataRow(e.RowHandle));
                }

            }
        }

        private void btn_save_data_Click(object sender, EventArgs e)
        {
            var name_domain = txt_name_domain.Text.Trim();
            if (string.IsNullOrEmpty(name_domain))
            {
                XtraMessageBox.Show("Bạn chưa nhập tên miền.", "Thông báo!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            if (flag_start)
            {
                XtraMessageBox.Show("Vui lòng dừng Ping trước khi thêm tên miền mới vào danh sách.", "Thông báo!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            // kiểm tra tên miền đã tồn tại trong hệ thống chưa
            var provider = new DataProvider();
            var count = Convert.ToInt32(provider.ExecuteScalar($"SELECT COUNT(*) FROM tbl_data WHERE hostname ='{txt_name_domain.Text.Trim()}'").ToString());
            if (count > 0)
            {
                XtraMessageBox.Show("Tên miền này đã tồn tại trong danh sách, vui lòng nhập tên miền khác.", "Thông báo!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            provider.ExecuteNonQuery($"INSERT INTO tbl_data(hostname) VALUES('{name_domain}')");
            LoadData();
           

        }

        private void txt_sleep_KeyUp(object sender, KeyEventArgs e)
        {
            var provider = new DataProvider();
            provider.ExecuteNonQuery($"UPDATE tbl_config set value='{txt_sleep.Text.Trim()}' WHERE name='time_send'");
        }

        private void timer_Tick(object sender, EventArgs e)
        {
            if (list_timeout.Count > 0)
            {
                foreach (var item in list_timeout.ToList())
                {
                    gridControl_Data.BeginInvoke(new Action(() =>
                    {
                        gridView_Data.SetRowCellValue(item.Key, "timeout", item.Value);
                    }));

                    var value = item.Value;
                    if (value > 0)
                    {
                        value--;
                        if (list_timeout.Keys.Contains(item.Key))
                        {
                            list_timeout[item.Key] = value;
                        }

                    }
                    else
                    {
                        DataTable theListOfIPs = gridControl_Data.DataSource as DataTable;
                        DataRow dr_item = theListOfIPs.Rows[item.Key];

                        int time_begin = Convert.ToInt32(txt_sleep.Text);
                        string message = $"Cảnh báo Domain: {dr_item["hostname"]} đã rớt mạng vào lúc: {DateTime.Now.AddSeconds(-time_begin).ToString("dd/MM/yyyy HH:mm")}";

                       
                       
                        
                        list_timeout.Remove(item.Key);

                      

                       

                    }
                }
            }
        }
    

        private void PingAlarm_FormClosing(object sender, FormClosingEventArgs e)
        {
            try
            {
                Process[] proc = Process.GetProcessesByName("chromedriver");
                foreach (Process chrome in proc)
                {
                    chrome.Kill();
                }

            }
            catch (Exception){}
        }

    

       
    }
}

Thanks for watching!

DOWNLOAD SOURCE

THÔNG TIN TÁC GIẢ

BÀI VIẾT LIÊN QUAN

[C#] Chia sẻ source code tool kiểm tra domain website
Đăng bởi: Thảo Meo - Lượt xem: 1119 11:11:24, 25/11/2023C#   In bài viết

CÁC BÀI CÙNG CHỦ ĐỀ

Đọc tiếp
.