Click here to Skip to main content
Licence CPOL
First Posted 9 Sep 2007
Views 11,431
Downloads 224
Bookmarked 14 times

Extracting country and city name from IP address

By | 9 Sep 2007 | Article
This sample decribes how to get the country and city name from an IP.

Introduction

Sometimes we want to get visitor details to know visits our website. This sample describes how to translate IP addresses to find the country and city where it comes from.

Background

I spent a whole day to translate the IP database to English, but some fields did not come out very well. I hope somebody can help me improve the IP database.

Using the code

Here are three parts of the code which includes the logic layer, data layer, and the control layer. If you want to run the sample in your local host, you must copy IP.mdb to drive c:\.

// Part 1.
 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Treaple.com
{
    public partial class Form1 : Form
    {
        private CompareIP compareIP = null;
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            compareIP = new CompareIP();

            string Ip = txtIP.Text.Trim();
            string[] Ip_List = Ip.Split(".".ToCharArray());
            string X_Ip = "";

            foreach (string ip in Ip_List)
            {
                if (Convert.ToInt16(ip) < 16)
                    X_Ip += "0" + Convert.ToInt16(ip).ToString("x");
                else
                    X_Ip += Convert.ToInt16(ip).ToString("x");
            }

            long N_Ip = long.Parse(X_Ip, 
                System.Globalization.NumberStyles.HexNumber);
            compareIP.IPAddress = N_Ip;
            DataSet newdata = compareIP.GetIP();
            try
            {
                txtCountry.Text = newdata.Tables[0].Rows[0][2].ToString();
                txtCity.Text = newdata.Tables[0].Rows[0][3].ToString();
            }
            catch
            {
                MessageBox.Show("Invalid Ip address!");
            }
        }
    }
}
 
// Part2.
 
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;

namespace Treaple.com
{
    //////////////////////Base Class///////////////////////
    public abstract class DataExchange
    {
        public IPAccessDataBase accessDataBase;
        public abstract int AddData();
        public abstract int ChangeData();
        public abstract DataSet GetData();
    }

    //////////////////////Sub Class////////////////////////

    public class CompareIP
    {
        public IPAccessDataBase iPAccessDataBase;
        public long IPAddress;

        public CompareIP()
        {
            iPAccessDataBase = new IPAccessDataBase();
        }

        public DataSet GetIP()
        {
            return iPAccessDataBase.SelectData(
                "select * from address where " + this.IPAddress + 
                " >=ip1 and " + this.IPAddress + 
                " <= ip2", "address");
        }
    }
}
 
// Part 3 
 
using System;
using System.Data;
using System.Data.OleDb;
using System.Data.SqlClient;

namespace Treaple.com
{
    /// </summary>
    public class IPAccessDataBase
    {
        private string strSQL;

        private string connectionString = 
          "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +"c:\\"+("IP.MDB");

        private OleDbConnection myConnection;
        private OleDbCommandBuilder sqlCmdBld;
        private OleDbDataAdapter da;

        private DataSet ds = new DataSet();

        public IPAccessDataBase()
        {
        }

        public IPAccessDataBase(string conStr)
        {
            connectionString = conStr;
        }

        public DataSet SelectData(string tempStrSQL, string tempTableName)
        {
            this.strSQL = tempStrSQL;
            this.myConnection = new OleDbConnection(connectionString);
            this.da = new OleDbDataAdapter(this.strSQL, this.myConnection);
            this.ds.Clear();
            this.da.Fill(ds, tempTableName);
            return ds;
        }

        public DataSet UpdateData(DataSet changedDataSet, string tableName)
        {
            this.myConnection = new OleDbConnection(connectionString);
            this.da = new OleDbDataAdapter(this.strSQL, this.myConnection);
            this.sqlCmdBld = new OleDbCommandBuilder(da);
            this.da.Update(changedDataSet, tableName);
            return changedDataSet;
        } 

        public DataTable SelectData(string tempStrSQL)
        {
            this.myConnection = new OleDbConnection(connectionString);
            DataSet tempDataSet = new DataSet();
            this.da = new OleDbDataAdapter(tempStrSQL, this.myConnection);
            this.da.Fill(tempDataSet);
            return tempDataSet.Tables[0];
        }

        public int UpdateData(string tempStrSQL)
        {
            OleDbConnection myConnection = new OleDbConnection(
                connectionString);
            OleDbCommand myCommand = new OleDbCommand(tempStrSQL);
            myCommand.Connection = myConnection;
            myConnection.Open();
            int intNumber = myCommand.ExecuteNonQuery();
            myCommand.Connection.Close();
            myConnection.Close();
            return intNumber;
        }
    }
}

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

John.Jiang

Software Developer (Senior)
www.treaple.com
China China

Member

Treaple offshore outsourcing software services providing mobile(Pocket pc,smartphone and wince.net) software,mobile GIS(Mobile map),Desktop GIS(Desktop map), GPS,GSM Locating Services,Voip,Multimedia(Audio,Video) and web design offshore outsourcing software development services.We have developed lots of projects on Microsoft Poccket pc 5.0/6.0,smartphone 5.0/6.0 and Microsoft windows and got strong background in Microsoft MapPoint, ESRI ArcGIS, Map info,Google map etc
Our website below: http://www.treaple.com

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
GeneralThank you! PinmemberJohn.Jiang7:28 10 Sep '07  
GeneralSource code PinmemberJohn.Jiang16:07 9 Sep '07  
GeneralRe: Source code PinmemberDrew Stainton16:15 9 Sep '07  
GeneralRe: Source code [modified] PinmemberJohn.Jiang16:29 9 Sep '07  

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web03 | 2.5.120517.1 | Last Updated 9 Sep 2007
Article Copyright 2007 by John.Jiang
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid