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

2023-11-16

在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)

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • C练题笔记之:Leetcode-793. 阶乘函数后 K 个零

    题目 f x 是 x 末尾是 0 的数量 回想一下 x 1 2 3 x 且 0 1 例如 f 3 0 因为 3 6 的末尾没有 0 而 f 11 2 因为 11 39916800 末端有 2 个 0 给定 k 找出返回能满足 f x k 的
  • NO-CARRIER

    自己动手写了创建虚拟接口 删除虚拟接口程序 频繁调用创建删除时 有时将接口up起来时会报错 Name not unique on network 利用ip link命令来查看接口 及其对应的索引 可以查看到与其他接口不同的是有个标志为 NO
  • 利用多个panel重叠来代替tabcontrol方法

    这两天 在弄一个C 软件 看着tabcontrol那个讨厌的标签 真是火大 折腾了1个周末加今天1个白天 总是不行 其实我就是想要一排按纽 来控掉不同的界面显示 今天打算使用多个pannel来代替tabcontrol 自己在旁边再弄几个按纽
  • Angular_学习笔记_01

    3天Angular视频课程 之 第1天 学习笔记 1 安装 Node 官网下载 一路Next gt 2 安装Angular cli sudo npm install g angular cli 3 ng new app name 4 运行项
  • scrapy 快速入门

    安装Scrapy Scrapy是一个高级的Python爬虫框架 它不仅包含了爬虫的特性 还可以方便的将爬虫数据保存到csv json等文件中 首先我们安装Scrapy pip install scrapy 在Windows上安装时可能会出现
  • 【实用】Mysql 按照时间(年月周日)维度统计,不存在时间数据 自动补充 0 数值

    前言 ps 网上看了一大堆文章 介绍的东西真的是很够呛 就没一个能真正用起来的 各个都是自动补 然后很多都是不好用的 我自己整理一篇 这是真能用 本篇内容 按照 日 周 月 年 的维度 去对数据 做分组统计 不存在的数据自动补充 0 实用
  • 村长告诉你:Python实现性能自动化测试竟然如此简单

    一 思考 1 什么是性能自动化测试 性能 系统负载能力 超负荷运行下的稳定性 系统瓶颈 自动化测试 使用程序代替手工 提升测试效率 性能自动化 使用代码模拟大批量用户 让用户并发请求 多页面多用户并发请求 采集参数 统计系统负载能力 生成报
  • 记一次QuartzScheduler启动后无法正常执行定时任务的问题

    最近想研究一下爬虫 由于爬虫工具服务端采用的是docker镜像的方式 为了让docker环境和系统环境分开 PS 纯粹不想在windows机让安装太多这些有一定的系统侵入的程序 所以就准备下载一个VMware 搞个虚拟机 然后在虚拟机上装个
  • [计算机毕业设计]元学习方法的小样本图像分类算法

    前言 大四是整个大学期间最忙碌的时光 一边要忙着准备考研 考公 考教资或者实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学校要求的毕设项目越来越难 有不少课题是研究生级别难度的 对本科同学来说是充满挑战 为帮助大
  • Vue8基础:事件处理

    1 事件处理 1 绑定监听 v on xxx fun xxx fun xxx fun 参数 默认事件形参 event 隐含属性对象 event 2 事件修饰符 prevent 阻止事件的默认行为 event preventDefault s
  • LLE原理及推导过程

    1 概述 所谓LLE 局部线性嵌入 即 Locally Linear Embedding 的降维算法 在处理所谓流形降维的时候 效果比PCA要好很多 首先 所谓流形 我们脑海里最直观的印象就是Swiss roll 在吃它的时候喜欢把它整个摊
  • 学习使用Shader处理纹理

    使用Shader处理纹理本是件简单的事情 但是我在尝试写一个简单的例子的时候却犯了个错误 导致郁闷了一天 这个稍后再说 先整理下怎么用Shader处理纹理吧 1 原理 用Shader处理纹理的原理其实很简单 将纹理通过一个uniform变量
  • 游戏王决斗连接显示服务器错误,游戏王决斗链接

    游戏王决斗链接公测常见问题一览 游戏王决斗链接最近也是正式公测啦 许多小伙伴在公测游玩中遇到了许多问题 下面就让小编带大家了解一下常见问题的解决方法吧 游戏王决斗链接公测常见问题 一 公测删档吗 不删档 决斗王链接在公测之前进行了好几次删档
  • windows修改mysql的my.ini文件导致服务启动失败

    windows修改mysql的my ini文件导致服务启动失败 解决 my ini的编码格式为ANSI 当我在服务器电脑直接打开编辑然后保存 默认保存的编码格式utf 8 所以导致启动失败
  • 期货开户用心服务每个客户

    用心服务每一个客户 以信为本 点石成金 蓄之既久 其发必速 如果价格连续多天在 个狭窄的幅度内升降 在图表上形成一幅有如建筑地盘布满地基桩的图景 习惯上称之为密集区 亦即专家所说的技术支持区 这个密集区一旦向上突破或向下突破 就会造成一个烈
  • C语言输出指针变量地址(十六进制)

    include
  • 微信小程序使用canvas绘制二维码实现跳转小程序

    开始接到这个需求的时候 我查阅文档获取小程序码 微信开放文档 发现两种途径 需要后端在服务器上调用接口拿到二维码 因为调用的 https api weixin qq com这个域名是不允许上白名单 或者是云开发 显然他们不需要云开发 这时候
  • C++ if 语句

    一个 if 语句 由一个布尔表达式后跟一个或多个语句组成 语法 C 中 if 语句的语法 if boolean expression 如果布尔表达式为真将执行的语句 如果布尔表达式为 true 则 if 语句内的代码块将被执行 如果布尔表达
  • Unity上玩转数字人(Avatar)

    现在数字人越来越有趣了 现在好多公司都在做 那我也想在Unity玩转一下 怎么玩呢 1 数字人准备以及跳舞动画 首先我们需要有数字人资源 数字人资源从哪来呢 第一你可以直接去Unity assetstore上去搜一下免费的数字人 有2个还是
  • C# 网络编程之获取本机名、ip地址、域名、物理位置

    在C 网络编程中 主机域名与ip之间能相互转换 同时DNS中有Dns类 IPHostEntry类 IPAddress类 DnsPermission类实现DNS的一些简单功能 下面主要讲述一个C 的Windows应用程序 实现以下功能 1 获