Chủ nhật, ngày 4 tháng 12 năm 2016

Lấy chi tiết thông tin thành phố, vùng miền, quốc gia thông qua địa chỉ IP bằng C#.Net

Ngày đăng: 10/5/2011, 23:17:25PM | Lượt xem: 4,380
Hot!

Trong bài viết này, tôi sẽ hướng dẫn các bạn cách lấy thông tin chi tiết về thành phố, vùng miền, tên quốc gia từ một địa chỉ IP (version 4 IPV4) bằng C#.Net. Các bạn có thể sử dụng để viết các ứng dụng website cần chạy theo vùng miền, các website chạy đa ngôn ngữ tùy theo quốc gia của người có địa chỉ IP tương ứng truy cập…

Về thuật toán của việc này, theo như hiểu biết của tôi có thể diễn giải theo từng bước như sau:

-          Đối với các IPV4 có định dạng a.b.c.d, chúng ta sẽ viết một hàm chuyển sang dạng number (long, double).

-          Xây dựng một cơ sở dữ liệu trong đó (từ khoảng giá trị này tới khoảng giá trị kia là của thành phố nào, vùng miền nào, quốc gia nào?).

-          So sánh giá trị IP number (IP đã convert sang dạng long, double) vừa có với database và hiển thị chi tiết.

Tuy nhiên việc này đòi hỏi chúng ta phải xây dựng một cơ sở dữ liệu khổng lồ, và chúng ta cũng không có thời gian (hoặc không chuyên sâu) để làm được việc đó.

Trong hướng dẫn cụ thể này, tôi sẽ không đi theo hướng đó, mà sẽ sử dụng database có sẵn để thay thế cho công việc đó.

 

Bước 1: Tạo website mới trong Visual Studio .Net

Bước 2: Download database bao gồm thông tin thành phố, vùng miền, quốc gia do hãng MaxMind phát triển (database này có tên là GeoLite City – đây là database hoàn toàn miễn phí, được update hàng tháng).

Download phiên bản Binary tại đây: Download GeoLiteCity phiên bản Binary

Database này đã được mã hóa, nếu muốn sử dụng phiên bản CSV có thể attach vào database của các bạn thì download tại đây Download GeoLiteCity phiên bản CSV

Nếu theo cách này thì phải viết hàm convert IP Address sang IP number và so sánh với database mà các bạn attach lên từ file CSV.

Hàm chuyển đổi từ IP Address sang IP Number

public double IPAddressToNumber(string IPaddress)

    {

        int i;

        string[] arrDec;

        double num = 0;

        if (IPaddress == "")

        {

            return 0;

        }

        else

        {

            arrDec = IPaddress.Split('.');

            for (i = arrDec.Length - 1; i >= 0; i--)

            {

                num += ((int.Parse(arrDec[i]) % 256) * Math.Pow(256, (3 - i)));

            }

            return num;

        }

    }

(Cá nhân tôi khuyên các bạn nên sử dụng database dạng Binary, trong bài viết tôi cũng đi theo cách này).

Bước 3: Giải nén file vừa download về các bạn được file GeoLiteCity.dat, copy file này vào thư mục App_Data trên project.

Bước 4: Download thư viện động Geotargeting .Net Component tại đây Download Geotargeting .Net Component (phiên bản này dùng cho .Net từ 2.0 trở lên). Thư viện này hoàn toàn miễn phí, và hỗ trợ các class để truy xuất tới database GeoLiteCity.dat

Sau khi giải nén, các bạn copy file GeotargetingControl.dll vào thư mục bin trên project (hoặc chọn Add Reference và trỏ tới file này trên máy, VS sẽ tự động copy vào thư mục bin).

Bước 5: Xây dựng giao diện gồm 1 textbox, 1 button, 1 label để lấy thông tin và hiển thị. Các bạn có thể dùng cách trực tiếp gõ địa chỉ IP vào textbox (trong ví dụ này), còn nếu muốn viết hàm lấy địa chỉ IP từ client thì viết như sau

string ip = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

if (ip == null)

{

    ip = Request.ServerVariables["REMOTE_ADDR"];

}

Bước 6: Khai báo thư viện Geotargeting .Net

using Geotargeting;

 

Bước 7: Tại sự kiện click của nút bấm các bạn viết

protected void btnCheck_Click(object sender, EventArgs e)

{

    string FullDBPath = Server.MapPath("App_Data/GeoLiteCity.dat");

    string IP = txtIP.Text; //Hoặc IP các bạn lấy từ client như hướng dẫn bên trên

    //Tạo object thao tác với database

    LookupService ls = new LookupService(FullDBPath, LookupService.GEOIP_STANDARD);

    //Tạo object Location

    Location local = ls.getLocation(IP);

    //Hiển thị thông tin

    lblInfo.Text = "IP của bạn: " + IP + " - Thành phố: " + local.city + " - Quốc gia: " + local.countryName;

}

 

Nếu như các bạn làm đúng theo hướng dẫn, khi chạy project sẽ thu được kết quả như sau:

 

Chúc các bạn thành công!

Đoàn Thành Nhân - http://lichsu.vn

 Chia sẻ qua: 
Hot!
Ý kiến bạn đọc

These items will be permanently deleted and cannot be recovered. Are you sure?

Gallery

image

Maecenas viverra rutrum pulvinar

Maecenas viverra rutrum pulvinar! Aenean vehicula nulla sit amet metus aliquam et malesuada risus aliquet. Vestibulum rhoncus, dolor sit amet venenatis porta, metus purus sagittis nisl, sodales volutpat elit lorem…

Read more

Text Links

Thiết kế logo chuyên nghiệp Insky
DAFABET
W88 w88b.com/dang-ky-tai-khoan-w88
W88
Copyright © 2011 - 2012 vietshare.vn by phamkhuong102@gmail.com doanhkisi2315@gmail.com. All rights reserved.