C# 网络编程之获取本机名、ip地址、域名、物理位置

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
.cn 域名,1个 12个月
简介:

在C#网络编程中,主机域名与ip之间能相互转换,同时DNS中有Dns类、IPHostEntry类、IPAddress类、DnsPermission类实现DNS的一些简单功能。
下面主要讲述一个C#的Windows应用程序,实现以下功能:
(1).获取主机名称;
(2).获取本地电脑的ip地址;
(3).输入远程域名www.xxx.com,查询其网址的ip地址;
(4).根据其远程网址的ip地址,查找其物理位置;
(5).根据物理位置实现查找当地位置的天气预报(未实现).
具体步骤如下:
1.创建C#项目
点击”文件”->”新建项目”->”C# Windows应用程序”,选择存储位置与项目名称,创建一个ipAddress项目.
2.添加控件
在”解决方案”中右键Form1.cs,查看其代码设计器.设置如下图所示的控件,界面设计的具体属性如下:

6个Label控件,其Text属性分别对应”主机名称”、”ip地址”..和”天气预报”;
6个textBox控件,其中除”查询远程域名(输入)”是输入形如:www.xxx.com外,其余均是输出相应的获取结果,对应的TextBox1-TextBox6;
1个richTextBox控件,提供高级输入编辑文本功能控件,左边textBox中显示的结果在此处同时显示汇总结果;
2个button控件,分别是”开始查询”和”清除记录”,清空richTextBox中内容.
3.添加新的命名控件
//添加新的命名空间
usingSystem.Net;
usingSystem.IO;
usingSystem.Xml;
在.NET平台对Dns类的命名控件是System.Net:调用其函数方法获取本地名称、ip地址、域名ip间转换.System.IO可以提供编码IO流的操作(似乎没用到),System.Xml是根据ip地址,通过访问”有道”网站查询实际物理位置中获取xml网页等操作使用.
4.双击”开始扫描”按钮,添加相应的事件代码
privatevoidbutton1_Click(objectsender,EventArgse)
{
//添加代码实现具体功能操作,具体如下
}
如果想添加"清除记录"功能,则双击"清除记录"按钮,添加下面代码即可实现:
privatevoidbutton2_Click(objectsender,EventArgse)
{
richTextBox1.Clear(); //清理记录
}
具体代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

//添加新的命名空间
using System.Net;
using System.IO;
using System.Xml;

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

        //点击按钮"开始查询"创建Click事件
        private void button1_Click(object sender, EventArgs e)
        {
            //构造一个主机对象 IPHostEntry两个常用属性(AddressList地址列表|HostName主机名称)
            IPHostEntry myHost = new IPHostEntry();

            try
            {
                //一.通过获取主机名HostName获取主机Host信息
                myHost = Dns.GetHostByName(Dns.GetHostName()); 
               
                //textBox1编辑框:显示主机名称
                textBox1.Text = myHost.HostName.ToString();
                
                //richTextBox1高级文本输入编辑控件:AppendText函数追加本地主机信息
                richTextBox1.AppendText("1.本地主机名称-->"+myHost.HostName.ToString()+"\r");

                //二.获取本地ip地址
                for (int i = 0; i < myHost.AddressList.Length; i++)
                {
                    textBox2.Text = myHost.AddressList[i].ToString();
                    richTextBox1.AppendText("2.本地主机ip地址-->"+myHost.AddressList[i].ToString()+"\r");
                }

                //三.输入远程ip地址\域名查询 
                //构造一个远程主机对象和字符串变量strIP存储ip地址
                IPHostEntry otherHost = new IPHostEntry();
                int j;

                //Resolve函数:将域名转换为ip地址 www.baidu.com
                otherHost = Dns.Resolve(textBox3.Text);

                //获取远程查询ip地址
                for (j = 0; j < otherHost.AddressList.Length; j++)
                {
                    textBox4.Text = otherHost.AddressList[j].ToString();
                    richTextBox1.AppendText("3.远程域名-->"+textBox3.Text+"\r*ip地址-->"+otherHost.AddressList[j].ToString()+"\r");
                }

                //四.ip地址查找对应的物理位置
                //通过访问有道网站查询ip的物理位置 (方法二:下载一个ip库,查找ip库中的内容)
                string sURL = "http://www.youdao.com/smartresult-xml/search.s?type=ip&q=" 
                    + otherHost.AddressList[j-1].ToString() + "";  //youdao的URL

                //定义字符串变量存储物理位置
                string stringIpAddress = "";

                //获取youdao返回的xml格式文件内容  
                using (XmlReader read = XmlReader.Create(sURL))
                {  
                    while(read.Read())      //从流中读取下一个字节
                    {  
                        switch (read.NodeType)  
                        {  
                            case XmlNodeType.Text:      //取xml格式文件当中的文本内容  查询的是最后一个ip地址AddressList[j-1]
                                if (string.Format("{0}", read.Value).ToString().Trim() != otherHost.AddressList[j-1].ToString())  
                                {  
                                    stringIpAddress = string.Format("{0}", read.Value).ToString().Trim();  //赋值  
                                }  
                                break;  
                        }  
                   }  
                }  

                //textBox5对话框:赋值物理位置并追加至richTextBox1末尾
                textBox5.Text = stringIpAddress;
                richTextBox1.AppendText("4.物理位置-->"+stringIpAddress+"\r");
            }
            catch(Exception msg)
            {
                MessageBox.Show(msg.Message);          //提示错误信息
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            richTextBox1.Clear();                     //清理记录
        }
    }
}

5.运行结果
输入www.google.com,点击"开始查询"

 

输出结果如下图所示:

可以看到,我的主机名称为delldell及本地的ip地址.同时查询的google的相应ip地址很多,在richTextBox中显示远程域名的ip地址,其中物理地址为最后一个ip地址74.125.31.104的物理位置为“美国加利福利亚州山景市谷歌公司”
(注意:天气预报我没有做该功能,但原理相同通过访问一个天气预报的网站,根据物理位置显示相应的天气,原理相同)
6.总结
这是我最近学习C#网络编程的自己编写的一个实例,通过获取ip地址你可以做很多的事情,譬如QQ等网站显示的你所在地天气预报、判断异地登陆、黑客攻击等,这是一个很基础的System.Net\System.Xml的相关方法函数的使用。
而在根据ip地址输出判断其物理位置中使用的是popping_dancer的博客知识,上面的代码“四.ip地址查找对应的物理位置”也是引用转载他的文章,希望大家也能看看他的这篇文章,非常有用。非常感谢博主及他的文章,网址如下:
http://blog.csdn.net/popping_dancer/article/details/8297038
他采用的方法是通过获取ip地址,访问“有道”网址查看对应的物理位置,上面访问google其访问过程如下图所示:

上面仅仅是我对C#网络编程,DNS、域名、ip地址、物理位置转换之间的一些认识,仅供大家学习与了解,如果有错误或不足之处,见谅!希望能帮助大家。
( 2013-7-8 By:Eastmount)

 

目录
相关文章
|
17天前
|
网络协议 网络安全 网络虚拟化
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
60 3
|
19天前
|
运维 监控 安全
在实际应用中,如何选择基于不同域名还是不同 IP 进行代理多服务的配置?
综上所述,在实际应用中选择基于不同域名还是不同 IP 进行代理多服务的配置,需要根据具体的业务需求、可扩展性、性能、安全性以及维护和管理成本等多方面因素进行综合考虑,权衡利弊,选择最适合自己系统架构和运营需求的配置方式。
|
19天前
|
安全 数据建模 测试技术
只有ip没有域名怎么申请SSL
在没有域名只有IP地址的情况下,仍可申请SSL证书。需确保拥有固定公网IP地址和服务器管理权限,选择支持IP SSL证书的CA(如JoySSL),完成注册、购买、验证、安装和测试等步骤,实现HTTPS加密访问。注意证书有效期、兼容性和安全性。
|
2月前
|
域名解析 缓存 网络协议
【网络】DNS,域名解析系统
【网络】DNS,域名解析系统
102 1
|
3月前
|
网络协议 安全
网络中IP地址与域名系统
网络中IP地址与域名系统
60 3
|
4月前
【Azure 应用服务】Web.config中设置域名访问限制,IP地址限制访问特定的页面资源 (Rewrite)
【Azure 应用服务】Web.config中设置域名访问限制,IP地址限制访问特定的页面资源 (Rewrite)
|
2月前
|
域名解析 网络协议
非阿里云注册域名如何在云解析DNS设置解析?
非阿里云注册域名如何在云解析DNS设置解析?
|
2月前
|
存储 安全 数据库
阿里云最新域名注册和续费、企业邮箱、云虚拟主机收费标准与价格参考
域名注册和续费以及企业邮箱和云虚拟主机是很多用户上云第一步需要购买的产品,从2024年9月1日开始,全球域名又迎来了一波价格上调,目前阿里云的.com英文域名的注册价格由原来的78元涨价到了83元,续费价格也涨到了90元,不过企业新用户注册有1元购等活动。企业邮箱目前活动价540.00元/1年起,云虚拟主机独享基础增强版月付49元/1个月起,年付588元/1年起。本文为大家整理汇总了截止目前,阿里云域名注册和续费及转入收费标准、企业邮箱收费标准与活动价格、云虚拟主机最新收费标准,以供参考。
|
2月前
|
弹性计算 网络协议 安全
如何使用阿里云虚拟主机和域名设置网站?
如何使用阿里云虚拟主机和域名设置网站?
|
2月前
|
移动开发 安全 API
阿里云最新域名注册及续费和转入收费价格表参考
目前域名注册管理机构(Verisign)已上调.com中英文域名成本,这一变动将直接影响到全球范围内.com域名价格,各大注册商的.com域名注册、续费、转移价格已同步上涨。以阿里云为例,此次涨价之后,.com英文域名的注册价格由原来的78元涨价到了83元,续费价格也涨到了90元,下面是2024年9月1日涨价之后,阿里云最新的域名注册及续费和转入最新收费价格表。