使用c# 根据IP 获取物理地址

根据IP  获取物理IP


今天在看一篇技术帖子 看到最后 留言是这样的形式


格式是 

城市+网络接入商名称+IP地址


在我们以前的使用习惯中 如果想留言的话 必须注册成为会员以后 才能留言 


说句实话 当我特别想给谋篇文章留言的时候 一看留言板 不需要注册才能留言 我会马上离开这个页面的 绝对不会为了留言 专门注册一个账号的 


估计现在的留言板设计成非会员也能留言的模式 就是为了照顾我这样的人的  哈哈。。。。


或说话来 这样的留言形式 确实变得开放多了 


其实在很早以前我就看到过这样的形式  只是再没有看到这样的留言形式 


今天再次看到了 说什么也要研究一下 


查了一下 要实现有两种方式 


第一种方式:
下载IP库  每次从IP库中检索留言者的物理地址

第二种方式:
使用第三方IP查找接口

先说一下两种方式的优点和缺点

要根据IP获得物理地址 必须先获得留言用户的IP 这里不讨论


第一种方式(使用IP库)
优点:可以实现本地查找 无需联网
缺点:浪费时间 不能及时的更新  如果某个城市的IP地址换了 无法第一时间的更新

第二种方式(使用第三方接口)
优点:节省时间 能获得第一时间的更新的数据
缺点:需要联网

话说回来 既然浏览者可以给你留言 那么就说明你的网站肯定是联网的 
换句话说 第二种方式没有缺点 

所以 我使用的也是第二种方式 

好了 下面开始介绍:

废话不多说  上源码:

为了简单明了 我测试使用的winform应用程序来测试的



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Web;
using System.Text.RegularExpressions;
using System.Collections;
using System.Net;
using System.Xml;



namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        /// 
        /// 点击了查询
        /// 
        /// 
        /// 
        private void button1_Click(object sender, EventArgs e)
        {
            // 获取用户输入的IP地址
            string ip = textBox1.Text;

            // 根据IP 显示出物理地址
            MessageBox.Show(GetstringIpAddress(ip));
        }

        /// 
        /// 根据IP 获取物理地址
        /// 
        /// 
        /// 
        public static string GetstringIpAddress(string strIP)//strIP为IP
        {
            string sURL = "http://www.youdao.com/smartresult-xml/search.s?type=ip&q=" + strIP + "";//youdao的URL
            string stringIpAddress = "";
            using (XmlReader read = XmlReader.Create(sURL))//获取youdao返回的xml格式文件内容
            {
                while (read.Read())
                {
                    switch (read.NodeType)
                    {
                        case XmlNodeType.Text://取xml格式文件当中的文本内容
                            if (string.Format("{0}", read.Value).ToString().Trim() != strIP)
                            {
                                stringIpAddress = string.Format("{0}", read.Value).ToString().Trim();//赋值
                            }
                            break;
                        //other
                    }
                }
            }
            return stringIpAddress;
        }
    }
}









你可能感兴趣的:(.net)