今天需要用到一个功能,获取主机名和本机的IP

准备用API实现的,然后稍微查了一下,发现.net类库已经有了

就在System.Net命名空间中的DNS类中

GetHostName 获取本地计算机的主机名。
GetHostByAddress 已重载。 获取 IP 地址的 DNS 主机信息。

/// <summary>
        /// 得到本机IP
        /// </summary>
        private string GetLocalIP()
        {
            //本机IP地址
            string strLocalIP = "";
            //得到计算机名
            string strPcName = Dns.GetHostName();
            //得到本机IP地址数组
            IPHostEntry ipEntry = Dns.GetHostEntry(strPcName);
            //遍历数组
            foreach(var IPadd in ipEntry.AddressList)
            {
                //判断当前字符串是否为正确IP地址
                if (IsRightIP(IPadd.ToString()))
                {
                    //得到本地IP地址
                    strLocalIP = IPadd.ToString();
                    //结束循环
                    break;
                }
            }
            //返回本地IP地址
            return strLocalIP;
        }

        //得到网关地址
private string GetGateway()
{
//网关地址
string strGateway = "";
//获取所有网卡
NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
//遍历数组
foreach (var netWork in nics)
{
//单个网卡的IP对象
IPInterfaceProperties ip = netWork.GetIPProperties();
//获取该IP对象的网关
GatewayIPAddressInformationCollection gateways = ip.GatewayAddresses;
foreach(var gateWay in gateways)
{
//如果能够Ping通网关
if(IsPingIP(gateWay.Address.ToString()))
{
//得到网关地址
strGateway = gateWay.Address.ToString();
//跳出循环
break;
}
}
//如果已经得到网关地址
if (strGateway.Length > 0)
{
//跳出循环
break;
}
}
//返回网关地址
return strGateway;
}
        /// <summary>
/// 判断是否为正确的IP地址
/// </summary>
/// <param name="strIPadd">需要判断的字符串</param>
/// <returns>true = 是 false = 否</returns>
public static bool IsRightIP(string strIPadd)
{
//利用正则表达式判断字符串是否符合IPv4格式
if (Regex.IsMatch(strIPadd, "[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}"))
{
//根据小数点分拆字符串
string[] ips = strIPadd.Split('.');
if (ips.Length == 4 || ips.Length == 6)
{
//如果符合IPv4规则
if (System.Int32.Parse(ips[0]) < 256 && System.Int32.Parse(ips[1]) < 256 & System.Int32.Parse(ips[2]) < 256 & System.Int32.Parse(ips[3]) < 256)
//正确
return true;
//如果不符合
else
//错误
return false;
}
else
//错误
return false;
}
else
//错误
return false;
}
        /// <summary>
/// 尝试Ping指定IP是否能够Ping通
/// </summary>
/// <param name="strIP">指定IP</param>
/// <returns>true 是 false 否</returns>
public static bool IsPingIP(string strIP)
{
try
{
//创建Ping对象
Ping ping = new Ping();
//接受Ping返回值
PingReply reply = ping.Send(strIP, 1000);
//Ping通
return true;
}
catch
{
//Ping失败
return false;
}
}

C# 自带的.net类库 实现得到本机IP以及网关地址的更多相关文章

  1. centos查看硬件信息

    服务器硬件信息常见, 是经常要操作的事: 下面分享一些常见的硬件查看命令: 1.centos 下查看硬件信息内容非常全面. CentOS常用命令查看cpu more /proc/cpuinfo 2.C ...

  2. 如何查看LINUX 硬件配置信息

    如何查看LINUX 硬件配置信息 在网上找了N久,发现了一篇不错的文档,转载一下: 1.查看机器所有硬件信息: dmidecode |more dmesg |more 这2个命令出来的信息都非常多,所 ...

  3. 查看Linux硬件配置信息

    在网上找了N久,发现了一篇不错的文档,转载一下: 1.查看机器所有硬件信息: dmidecode |more dmesg |more 这2个命令出来的信息都非常多,所以建议后面使用"|mor ...

  4. Linux新手随手笔记1.9-使用Apache搭建网站

    搭建网站 网站服务:让用户能够通过浏览器访问到的服务器上的文档资源. 对比Windows 和Linux部署服务方法对比 Windows:IIS Linux      :Apache ,nginx Ap ...

  5. 【牛客 错题集】Linux系统方面错题合集

    前言:牛客Linux322道全部刷完,有些题目较老,甚至考核5系统,现在7都出来了几年了 = = 还有些题目解析的很好部分也摘录了进来.很多涉及嵌入式开发的选择题同样的摘录的作为了解使用 ------ ...

  6. Linux硬件配置信息

      在网上找了N久,发现了一篇不错的文档,转载一下: 1.查看机器所有硬件信息: dmidecode |more dmesg |more 这2个命令出来的信息都非常多,所以建议后面使用"|m ...

  7. 网络编程---scoket使用,七层协议,三次挥手建连接,四次挥手断连接

    目录 == 网络编程 == 软件开发架构 网络编程 互联网协议 TCP协议的工作原理 Socket == 网络编程 == 软件开发架构 开发软件 必须要开发一套 客户端与服务端 客户端与服务端的作用 ...

  8. Linux查看硬件配置

    1.查看机器所有硬件信息:dmidecode |moredmesg |more 这2个命令出来的信息都非常多,所以建议后面使用"|more"便于查看 2.查看CPU信息 方法一: ...

  9. 入门大数据---HDFS-HA搭建

    一.简述 上一篇了解了Zookeeper和HDFS的一些概念,今天就带大家从头到尾搭建一下,其中遇到的一些坑也顺便记录下. 1.1 搭建的拓扑图如下: 1.2 部署环境:Centos3.1,java1 ...

随机推荐

  1. 枚举生成1~n的排序

    /*枚举生成1~n的排列*/ #include <iostream> #include<algorithm> #include<queue> #include< ...

  2. IO模型之阻塞IO

    1. IO模型的介绍 首先我们先来熟悉下什么是 同步,异步.阻塞.非阻塞 的知识: 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞 ...

  3. Linux常用命令及使用方法

    一.Linux命令格式 command [-option] [parameter1] ..... 即:命令名 [选项] [参数] 选项:控制命令 参数:可有0个,1个或多个 二.常用命令及用法 1.与 ...

  4. Linux关闭iptables以及selinux

    1.查看iptables状态 /etc/init.d/iptables status # 方法1 service iptables status # 方法2 2.重启后永久生效 chkconfig i ...

  5. C# 接口(Interface)

    接口定义了所有类继承接口时应遵循的语法合同.接口定义了语法合同 "是什么" 部分,派生类定义了语法合同 "怎么做" 部分. 口定义了属性.方法和事件,这些都是接 ...

  6. C#中使用lockbits方法处理图像

    转自 使用lockbits方法处理图像(转) 许多图像处理任务即时是最简单的文件类型转换,例如从32位深度到8位深度的格式转化,直接获得像素阵列要比使用GetPixel和SetPixel等方法的效率高 ...

  7. Windows Intel VT-x开启

    解决虚拟机安装64位系统“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态”的问题 背景:win7 旗舰版 64位+VMware 10.0 启动虚拟机时报错 问题:已将该虚拟机 ...

  8. 将本地Jar包安装到maven仓库中去

    开发中会遇到无法通过pom.xml下载jar包的情况,遇到这种情况我们可以手动在本地安装jar包到本地仓库中去,这样就可以下次再用到的话不用再次联网下载,具体以oracle的驱动包ojdbc6.jar ...

  9. 如何在windows下安装mongoDB扩展

    安装环境   系统环境:Windows 10 64位   Apache版本:2.4.9   PHP版本:5.5.12   MongoDB版本:3.2.6   Wamp版本:wamp 2.5 86位   ...

  10. java核心知识点 --- 线程池ThreadPool

    线程池是多线程学习中需要重点掌握的. 系统启动一个新线程的成本是比较高的,因为它涉及与操作系统交互.在这种情形下,使用线程池可以很好的提高性能,尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考 ...