Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: Làm thế nào để get country, state, city... từ 1 IP đã nhập

  1. #1
    Ngày gia nhập
    02 2013
    Bài viết
    3

    Mặc định Làm thế nào để get country, state, city... từ 1 IP đã nhập

    Mình có đoạn code sau nhưng đc làm trên giao diện website
    Code:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Text;
    using System.IO;
    using System.Net;
    using System.Text.RegularExpressions;
    using System.Xml.Serialization;
    using System.Xml;
    public partial class _Default : System.Web.UI.Page
    {
        DataClassesDataContext obj = new DataClassesDataContext();
        protected void Page_Load(object sender, EventArgs e)
        {   
            string ipaddress;
            ipaddress = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
            if (ipaddress == "" || ipaddress == null)
               ipaddress = Request.ServerVariables["REMOTE_ADDR"];
     
            // If you run this project on your local host (your computer) then you need to uncomment the next line to avoid getting the UNKOWN IP address.
            // Otherwise, the next line should be commented out if you are running this project on a web server.
            ipaddress = "27.121.103.12";//india
            //ipaddress = "27.50.103.12";//japan
            //ipaddress = "202.138.79.255";//australia
            //ipaddress = "27.116.59.255";//afdhanistan
            //ipaddress = "46.19.231.255";//albania
            
                
     
            // Lookup geographic location using IP address
            XmlTextReader XmlRdr = GetLocation(ipaddress);
     
            if (XmlRdr != null)
            {
                while (XmlRdr.Read())
                {
                    if (XmlRdr.Name.ToString() == "cityName")
                    {
                        lblCity.Text = XmlRdr.ReadString().Trim();
                    }
                    if (XmlRdr.Name.ToString() == "regionName")
                    {
                        lblRegion.Text = XmlRdr.ReadString().Trim();
                    }
                    if (XmlRdr.Name.ToString() == "countryName")
                    {
                        lblCountry.Text = XmlRdr.ReadString().Trim();
                    }
                    if (XmlRdr.Name.ToString() == "countryCode")
                    {
                        lblCountryCode.Text = XmlRdr.ReadString().Trim(); 
                    }
                    //if (XmlRdr.Name.ToString() == "zipCode")
                    //{
                    //    lblZip.Text = XmlRdr.ReadString().Trim();
                    //}
                    if (XmlRdr.Name.ToString() == "longitude")
                    {
                        lblLong.Text = XmlRdr.ReadString().Trim();
                    }
                    if (XmlRdr.Name.ToString() == "latitude")
                    {
                        lblLat.Text = XmlRdr.ReadString().Trim();
                    }
                    if (XmlRdr.Name.ToString() == "timeZone")
                    {
                        lblTime.Text = XmlRdr.ReadString().Trim();
                    }   
                    lblIP.Text = ipaddress;
                }
                XmlRdr.Close();
            }
            else
            {
                lblIP.Text = "IP not Detected";
            }
        }
     
        private XmlTextReader GetLocation(string ipaddress)
        {
            // Register at ipinfodb.com for a free key and put it here
            string myKey = "Your Api key Here";
     
            //Create a WebRequest
            WebRequest rssReq = WebRequest.Create("http://api.ipinfodb.com/v3/ip-city/?key=" + myKey + "&ip=" + ipaddress + "&format=xml");
     
            //Create a Proxy
            WebProxy px = new WebProxy("http://api.ipinfodb.com/v3/ip-city/?key=" + myKey + "&ip=" + ipaddress + "&format=xml", true);
     
            //Assign the proxy to the WebRequest
            rssReq.Proxy = px;
     
            //Set the timeout in Seconds for the WebRequest
            rssReq.Timeout = 2000;
            try
            {
                //Get the WebResponse 
                WebResponse rep = rssReq.GetResponse();
     
                //Read the Response in a XMLTextReader
                XmlTextReader xtr = new XmlTextReader(rep.GetResponseStream());
                return xtr;
     
            }
            catch
            {
                return null;
            }
        }
        
    }
    Liệu có cách nào để chuyển về application console bên C# không?
    Mình thấy bên console không có xài được Request.ServerVariables.

    Thanks

  2. #2
    Ngày gia nhập
    05 2010
    Bài viết
    347

    Bạn using system.web xem có được ko

  3. #3
    Ngày gia nhập
    02 2013
    Bài viết
    219

    Đoạn code trên là lấy IP của người truy cập vào website, còn ý của bạn là lấy thông tin về 1 IP của cái gì ? IP của mình, IP được nhập vào hay sao ?
    Nếu lấy IP trên máy mình thì dùng code sau :
    Visual C# Code:
    1. String direction = "";
    2. WebRequest request = WebRequest.Create("http://checkip.dyndns.org/");
    3. using (WebResponse response = request.GetResponse())
    4. using (System.IO.StreamReader stream = new System.IO.StreamReader(response.GetResponseStream()))
    5. {
    6.     direction = stream.ReadToEnd();
    7. }
    8.  
    9. //Search for the ip in the html
    10. int first = direction.IndexOf("Address: ") + 9;
    11. int last = direction.LastIndexOf("</body>");
    12. direction = direction.Substring(first, last - first);//My external ip address
    Lúc nào cũng lãng đãng như người trên mây

    Những người mới : Hãy tìm hiểu luật lệ diễn đàn trước khi post bài !

  4. #4
    Ngày gia nhập
    02 2013
    Bài viết
    3

    Ý mình là nhập vào 1 IP nào đó, nó lấy info như state, zipcode, country... từ IP này thông qua 1 website nào đó, ở code mẫu mình đưa là nó sử dụng api của site ipinfodb.com. Nhưng cái mình cần là xuất ra ở cửa sổ console hoặc winform, chứ không phải là xuất ra bằng giao diện website như demo mẫu mình đưa.

    Trích dẫn Nguyên bản được gửi bởi tuandoi1 Xem bài viết
    Bạn using system.web xem có được ko
    Mình thử rồi nhưng không được bạn.

  5. #5
    Ngày gia nhập
    02 2013
    Bài viết
    219

    Trích dẫn Nguyên bản được gửi bởi walkershannon466 Xem bài viết
    Ý mình là nhập vào 1 IP nào đó, nó lấy info như state, zipcode, country... từ IP này thông qua 1 website nào đó, ở code mẫu mình đưa là nó sử dụng api của site ipinfodb.com. Nhưng cái mình cần là xuất ra ở cửa sổ console hoặc winform, chứ không phải là xuất ra bằng giao diện website như demo mẫu mình đưa.
    Bạn đọc code bạn đưa lên đã hiểu chưa ? Trong đó đã có tất cả các phương thức để lấy rồi.
    Như trên sử dụng api từ http://ipinfodb.com, có nhiều cách để lấy quan trọng bạn phải có kiến thức về webrequest để lấy thông tin trên mạng về.
    Đọc kỹ code trên vào và làm theo từng bước chắc chắn sẽ được, mình nói chắc chắn để bạn không cần test, cứ làm đúng là sẽ có kết quả.

    PS : Nên bỏ thói quen copy, paste code đi.
    Lúc nào cũng lãng đãng như người trên mây

    Những người mới : Hãy tìm hiểu luật lệ diễn đàn trước khi post bài !

  6. #6
    Ngày gia nhập
    05 2012
    Bài viết
    13

    Mặc định Làm thế nào để get country, state, city... từ 1 IP đã nhập

    Sử dụng hàm sau:
    Code:
    private string gethtml(string URL, string Host, int Port, CookieContainer cookie, CookieCollection cookies)
            {
                try
                {
                    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL);
                    request.CookieContainer = cookie;
                    request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
                    request.Headers.Add(HttpRequestHeader.AcceptCharset, "windows-1258,utf-8;q=0.7,*;q=0.3");
                    request.Headers.Add(HttpRequestHeader.AcceptLanguage, "en;q=0.8");
                    request.KeepAlive = true;
                    if (Host != "")
                    {
                        request.Proxy = new WebProxy(Host, Port);
                    }
                    request.ContentType = "application/x-www-form-urlencoded";
                    request.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22";
                    request.Timeout = 15000;
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                    foreach (Cookie cooki in response.Cookies)
                    {
                        cookie.Add(cookies);
                    }
                    StreamReader sr = new StreamReader(response.GetResponseStream());
                    string body = sr.ReadToEnd();
                    sr.Close(); sr.Dispose();
                    response.Close();
                    return body;
                }
                catch
                {
                    return "";
                }
            }
    Cách dùng của hàm
    Thêm using System.Net;
    using.System.IO;
    Tạo biến để truyền vào hàm:
    CookieContainer cookie;
    CookieCollection cookies;
    string Host;
    int Port;
    gethtml("http://www.google.com",Host, Port, cookie, cookies);
    Hàm sẽ trả về chuối html của website
    Sau đó dùng regex để sử lý chuỗi. Cái này để check proxy. Chúc bác thành công

Các đề tài tương tự

  1. Tạo state process như thế nào ?
    Gửi bởi messi2010 trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 1
    Bài viết cuối: 10-09-2012, 09:42 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn