- [C#] Cách Sử Dụng DeviceId trong C# Để Tạo Khóa Cho Ứng Dụng
- [SQLSERVER] Loại bỏ Restricted User trên database MSSQL
- [C#] Hướng dẫn tạo mã QRcode Style trên winform
- [C#] Hướng dẫn sử dụng temp mail service api trên winform
- [C#] Hướng dẫn tạo mã thanh toán VietQR Pay không sử dụng API trên winform
- [C#] Hướng Dẫn Tạo Windows Service Đơn Giản Bằng Topshelf
- [C#] Chia sẻ source code đọc dữ liệu từ Google Sheet trên winform
- [C#] Chia sẻ source code tạo mã QR MOMO đa năng Winform
- [C#] Chia sẻ source code phần mềm lên lịch tự động chạy ứng dụng Scheduler Task Winform
- [Phần mềm] Tải và cài đặt phần mềm Sublime Text 4180 full version
- [C#] Hướng dẫn download file từ Minio Server Winform
- [C#] Hướng dẫn đăng nhập zalo login sử dụng API v4 trên winform
- [SOFTWARE] Phần mềm gởi tin nhắn Zalo Marketing Pro giá rẻ mềm nhất thị trường
- [C#] Việt hóa Text Button trên MessageBox Dialog Winform
- [DEVEXPRESS] Chia sẻ code các tạo report in nhiều hóa đơn trên XtraReport C#
- [POWER AUTOMATE] Hướng dẫn gởi tin nhắn zalo từ file Excel - No code
- [C#] Chia sẻ code lock và unlock user trong domain Window
- [DEVEXPRESS] Vẽ Biểu Đồ Stock Chứng Khoán - Công Cụ Thiết Yếu Cho Nhà Đầu Tư trên Winform
- [C#] Hướng dẫn bảo mật ứng dụng 2FA (Multi-factor Authentication) trên Winform
- [C#] Hướng dẫn convert HTML code sang PDF File trên NetCore 7 Winform
[C#] Chia sẻ source code tool kiểm tra domain website
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!