Biểu đồ trình tự so sánh nội dung

Một phần của tài liệu (LUẬN văn THẠC sĩ) xây dựng hệ thống giám sát và cảnh báo sự thay đổi nội dung trang web luận văn ths máy tính 624801 (Trang 54 - 62)

3.6. Thiết kế cơ sở dữ liệu

Để lưu dữ liệu trong quá trình giám sát web, chương trình sử dụng cơ sở dữ liệu SQLite, với 2 bảng là Web và LichSu

CREATE TABLE [Web] (

[WebID] INTEGER PRIMARY KEY NULL, [TenWeb] STRING NULL,

[DiaChi] STRING NULL, [ThoiGian] INTEGER NULL, [ThongTin] String NULL )

CREATE TABLE [LichSu] (

[ID] INTEGER PRIMARY KEY NOT NULL, [WebID] INTEGER NULL,

[ThoiGian] DATETIME NULL, [Anh] TEXT NULL,

[Html] TEXT NULL, [Ping] INTEGER NULL )

3.7. Công cụ và môi trƣờng phát triển 3.7.1. Kiến trúc .NET framework

.NET Framework là một sản phẩm của Microsoft, đây vừa là một nền tảng dành cho lập trình và cũng là một nền tảng dành cho thực thi, các ứng dụng .NET Framework chủ yếu chay trên hệ điều hành Microsoft Windows.

.NET framework chưa các thư viện lập trình lớn, những thư viện này hỗ trợ rất nhiều việc xây dựng các chương trình phần mềm như lập trình giao diện; truy cập, kết nối cơ sở dữ liệu; ứng dụng web; các giải thuật, cấu trúc dữ liệu; giao tiếp mạng.... (Dương Quang Thiện, 2013)

Việc viết ứng dụng sẽ được đơn giản hóa đi rất nhiều với .NET framework bởi vì nó cung cấp nhiều thành phần được thiết kế sẵn, người lập trình chỉ cần biết cách sử dụng những thành phần đó, và tùy theo sự sáng tạo của mình để kết hợp chúng với nhau, và điển hình là công cụ Visual Studio.

Lịch sử phát triển:

Phiên bản

Số hiệu phiên bản

Ngày phát hành Visual Studio Được phát hành kèm theo

1.0 1.0.3705.0 13 tháng 2 năm 2002

Visual Studio.NET Windows XP Tablet and Media Center Editions 1.1 1.1.4322.5 73 24 tháng 4 năm 2003 Visual Studio.NET 2003 Windows Server 2003 2.0 2.0.50727. 42 7 tháng 11 năm 2005

Visual Studio 2005 Windows Server 2003 R2 3.0 3.0.4506.3 0 6 tháng 11 năm 2006 Windows Vista, Windows Server 2008 3.5 3.5.21022. 8 19 tháng 11 năm 2007

Visual Studio 2008 Windows 7, Windows Server 2008 R2 4.0 4.0.30319. 1 12 tháng 4 năm 2010 Visual Studio 2010 4.5 4.5.50709 15 tháng 8 năm 2012

Visual Studio 2012 Windows 8, Windows Server 2012

4.6 20 tháng 7 năm 2015

Visual Studio 2015 Windows 10

Bảng 1. Lịch sử phát triển .NET framework

3.7.2. Ngôn ngữ C#

C# (đọc là "C thăng" hay "C sharp" ("xi-sáp")) cũng là một sản phẩm của Microsoft, là một ngôn ngữ lập trình hướng đối. Microsoft phát triển C# dựa trên C++ và Java, vì vậy nhiều người nhận xét C# là ngôn ngữ có sự cân bằng giữa C++, Java và Visual Basic.

3.7.3. SQLite

SQLite là sản phẩm của Richard Hipp, đây là một hệ thống cơ sở dữ liệu quan hệ. Đặc điểm của SQLite là tính nhỏ gọn, hoàn chỉnh, có thể cài đặt bên trong các trình ứng dụng khác dưới dạng thư viện.

+ Ưu điểm:

SQLite có các ưu điểm sau:

Tin cậy: khi hoạt động, các chuyển giao trong cơ sở dữ liệu luôn trọn vẹn, khi gặp sự cố phần cứng cũng không gây lỗi.

Tuân theo chuẩn SQL92 (chỉ có một vài đặc điểm không hỗ trợ) Không cần cài đặt cấu hình

Kích thước chương trình gọn nhẹ, với cấu hình đầy đủ chỉ không đầy 300 kB Thực hiện các thao tác đơn giản nhanh hơn các hệ thống cơ sở dữ liệu khách/chủ khác

Không cần phần mềm phụ trợ

Phần mềm tự do với mã nguồn mở, được chú thích rõ ràng + Các binding:

Cũng như các thư viện nguồn mở nói chung, SQLite được phát triển các binding (gói kèm) các ngôn ngữ thông dụng: PHP, Perl, Java, Python, Ruby, Tcl...

3.8. Xây dựng hệ thống

Bằng cách sử dụng các thuật toán đã nghiên cứu, tôi đã xây dựng các hàm để thực hiện các công việc cụ thể:

3.8.1. Hệ thống So sánh thay đổi nội dung mã nguồn web

Việc so sánh thay đổi nội dung mã nguồn, có thể so sánh toàn bộ mã nguồn hoặc chỉ so sánh một phần nội dung (VD: những nội dung xuất hiện trên giao

diện, bỏ qua các thẻ...). Hai phần này đều có chung quy trình, chỉ khác so sánh một phần nội dung cần có thêm bước tiền xử lý.

Sau khi có phần văn bản cần so sánh sử dụng thuật toán Rabin Fingerprint cải tiến để lấy giá trị băm của văn bản để so sánh chúng với nhau, nếu giá trị băm khác nhau thì hai văn bản khác và đã có sự thay đổi.

Rabin Fingerprint cải tiến: class CaitienRB { long ht = 0; long htt = 0; long Q = 10000007; long D = 2; long dM = 1;

public ArrayList mangluu_giatriban = new ArrayList();

public void KR(String text, int K)

{ int m; m = text.Length; dM = (dM * D) % Q; int khoi = 0; while (khoi < m / K) {

for (int i = khoi * K; i < khoi * K + K; i++)

{ htt = (htt * D + text[i]) % Q; } khoi++; mangluu_giatriban.Add(htt); } } }

Nếu phát hiện sử thay đổi, sử dụng Thuật toán tìm sự khác nhau của hai văn bản để tìm những chỗ thay đổi:

public static Item[] DiffText(string TextA, string TextB, bool trimSpace, bool

ignoreSpace, bool ignoreCase)

{

Hashtable h = new Hashtable(TextA.Length + TextB.Length);

DiffData DataA = new DiffData(DiffCodes(TextA, h, trimSpace,

ignoreSpace, ignoreCase));

DiffData DataB = new DiffData(DiffCodes(TextB, h, trimSpace,

h = null;

int MAX = DataA.Length + DataB.Length + 1;

int[] DownVector = new int[2 * MAX + 2];

int[] UpVector = new int[2 * MAX + 2];

LCS(DataA, 0, DataA.Length, DataB, 0, DataB.Length, DownVector, UpVector);

Optimize(DataA); Optimize(DataB);

return CreateDiffs(DataA, DataB);

}

3.8.2. Hệ thống chuyển đổi Trang web thành hình ảnh

Trong c# có hỗ trợ công cụ giúp chuyển đổi Trang web thành hình ảnh protected void Capture(object sender, EventArgs e)

{

string url = txtUrl.Text.Trim(); Thread thread = new Thread(delegate() {

using (WebBrowser browser = new WebBrowser())

{

browser.ScrollBarsEnabled = false;

browser.AllowNavigation = true;

browser.Navigate(url);

browser.Width = 1024;

browser.Height = 768;

browser.DocumentCompleted += new

WebBrowserDocumentCompletedEventHandler(DocumentCompleted);

while (browser.ReadyState != WebBrowserReadyState.Complete)

{

System.Windows.Forms.Application.DoEvents();

} } });

thread.SetApartmentState(ApartmentState.STA);

thread.Start();

thread.Join();

}

private void DocumentCompleted(object sender,

WebBrowserDocumentCompletedEventArgs e) {

WebBrowser browser = sender as WebBrowser;

using (Bitmap bitmap = new Bitmap(browser.Width, browser.Height))

{

browser.DrawToBitmap(bitmap, new Rectangle(0, 0, browser.Width,

browser.Height));

using (MemoryStream stream = new MemoryStream())

{

bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Png);

byte[] bytes = stream.ToArray();

imgScreenShot.Visible = true;

imgScreenShot.ImageUrl = link + Convert.ToBase64String(bytes);

} } }

3.8.3. Hệ thống So sánh thay đổi nội dung hình ảnh trang web

Sau khi đã có hình ảnh trang web, sử dung Thuật toán tìm sự khác nhau của hai hình ảnh đã cải tiến để tìm sự khác nhau giữa hai ảnh, giá tri trả về là một ảnh được bôi đỏ những chỗ thay đổi

public Bitmap SoSanh(Image bm1, Image bm2) {

Bitmap bmp1 = new Bitmap(bm1);

Bitmap bmp2 = new Bitmap(bm2);

int w1 = bmp1.Width; int h1 = bmp1.Height; int w2 = bmp2.Width; int h2 = bmp2.Height; int wkq, hkq, x, y; Color b1, b2; if (w1 < w2) wkq = w1; else wkq = w2; if (h1 < h2) hkq = h1; else hkq = h2;

Bitmap bitmap = new Bitmap(wkq, hkq);

bool[,] k = new bool[wkq, hkq];

bool[,] l = new bool[wkq, hkq];

bool[,] m = new bool[wkq, hkq];

for (y = 0; y < hkq - 1; y++) for (x = 0; x < wkq - 1; x++) k[x, y] = true; for (y = 0; y < hkq - 1; y++) { for (x = 0; x < wkq - 1; x++) { b1 = bmp1.GetPixel(x, y); b2 = bmp2.GetPixel(x, y);

bitmap.SetPixel(x, y, Color.FromArgb(b1.R, b1.G, b1.B));

byte g1 = Convert.ToByte(b1.R + b1.G + b1.B);

byte g2 = Convert.ToByte(b2.R + b2.G + b2.B);

if (Math.Abs(g1 - g2) > 15) k[x, y] = false;

} } for (y = 0; y < hkq - 1; y++) for (x = 0; x < wkq - 1; x++) if (k[x, y] == false) { b1 = bmp1.GetPixel(x, y);

bitmap.SetPixel(x, y, Color.FromArgb(255, 0, 0));

}

return bitmap;

}

3.8.4. Hệ thống Quản lý thời gian thực

Sử dụng công cụ Timer trong c# để liên tục kiểm tra sự thay đổi

KiemTra(); }

3.8.5. Hệ thống Lƣu dữ liệu

public void ThemWeb(string Ten, string DiaChi, string ThongTin) {

conn.Open();

SQLiteCommand command = conn.CreateCommand();

command.CommandText = SQLInsertWeb;

command.Parameters.AddWithValue("TenWeb", Ten);

command.Parameters.AddWithValue("DiaChi", DiaChi);

command.Parameters.AddWithValue("ThongTin", ThongTin);

command.ExecuteNonQuery(); conn.Close();

}

public void XoaWeb(string Id) {

conn.Open();

SQLiteCommand command = conn.CreateCommand();

command.CommandText = SQLDelete;

command.Parameters.AddWithValue("WebId", Id);

command.ExecuteNonQuery(); conn.Close();

}

public void ThemLichSu(string WebId, DateTime ThoiGian, string Anh, string Html,

string Ping) {

conn.Open();

SQLiteCommand command = conn.CreateCommand();

command.CommandText = "INSERT INTO LichSu(WebId, ThoiGian, Anh, Html,

Ping) VALUES(?, ?, ?, ?, ?)";

command.Parameters.AddWithValue("WebId", WebId);

command.Parameters.AddWithValue("ThoiGian", ThoiGian);

command.Parameters.AddWithValue("Anh", Anh);

command.Parameters.AddWithValue("Html", Html);

command.Parameters.AddWithValue("Ping", Ping);

command.ExecuteNonQuery(); conn.Close();

3.9. Thiết kế giao diện

Một phần của tài liệu (LUẬN văn THẠC sĩ) xây dựng hệ thống giám sát và cảnh báo sự thay đổi nội dung trang web luận văn ths máy tính 624801 (Trang 54 - 62)