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

时间:2021-06-13 17:31:42
根据IP  获取物理IP


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

使用c#  根据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();
}

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

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

/// <summary>
/// 根据IP 获取物理地址
/// </summary>
/// <param name="strIP"></param>
/// <returns></returns>
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;
}
}
}