C# 自带的.net类库 实现得到本机IP以及网关地址
今天需要用到一个功能,获取主机名和本机的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以及网关地址的更多相关文章
- centos查看硬件信息
服务器硬件信息常见, 是经常要操作的事: 下面分享一些常见的硬件查看命令: 1.centos 下查看硬件信息内容非常全面. CentOS常用命令查看cpu more /proc/cpuinfo 2.C ...
- 如何查看LINUX 硬件配置信息
如何查看LINUX 硬件配置信息 在网上找了N久,发现了一篇不错的文档,转载一下: 1.查看机器所有硬件信息: dmidecode |more dmesg |more 这2个命令出来的信息都非常多,所 ...
- 查看Linux硬件配置信息
在网上找了N久,发现了一篇不错的文档,转载一下: 1.查看机器所有硬件信息: dmidecode |more dmesg |more 这2个命令出来的信息都非常多,所以建议后面使用"|mor ...
- Linux新手随手笔记1.9-使用Apache搭建网站
搭建网站 网站服务:让用户能够通过浏览器访问到的服务器上的文档资源. 对比Windows 和Linux部署服务方法对比 Windows:IIS Linux :Apache ,nginx Ap ...
- 【牛客 错题集】Linux系统方面错题合集
前言:牛客Linux322道全部刷完,有些题目较老,甚至考核5系统,现在7都出来了几年了 = = 还有些题目解析的很好部分也摘录了进来.很多涉及嵌入式开发的选择题同样的摘录的作为了解使用 ------ ...
- Linux硬件配置信息
在网上找了N久,发现了一篇不错的文档,转载一下: 1.查看机器所有硬件信息: dmidecode |more dmesg |more 这2个命令出来的信息都非常多,所以建议后面使用"|m ...
- 网络编程---scoket使用,七层协议,三次挥手建连接,四次挥手断连接
目录 == 网络编程 == 软件开发架构 网络编程 互联网协议 TCP协议的工作原理 Socket == 网络编程 == 软件开发架构 开发软件 必须要开发一套 客户端与服务端 客户端与服务端的作用 ...
- Linux查看硬件配置
1.查看机器所有硬件信息:dmidecode |moredmesg |more 这2个命令出来的信息都非常多,所以建议后面使用"|more"便于查看 2.查看CPU信息 方法一: ...
- 入门大数据---HDFS-HA搭建
一.简述 上一篇了解了Zookeeper和HDFS的一些概念,今天就带大家从头到尾搭建一下,其中遇到的一些坑也顺便记录下. 1.1 搭建的拓扑图如下: 1.2 部署环境:Centos3.1,java1 ...
随机推荐
- 启动tomcat服务器,配置CATALINA_HOME和JAVA_HOME
遇到很多次运行startup.bat后,一个窗口一闪而过的问题,但是从来没去纠正怎样修改配置才是正确的,现在从网上查阅的资料整理如下:tomcat在启动时,会读取环境变量的信息,需要一个CATALIN ...
- 【合】C#线程
浅谈ThreadPool 线程池 地址:https://www.cnblogs.com/xugang/archive/2010/04/20/1716042.html 相关概念: 线程池可以看做容纳线程 ...
- URL里面的中文参数到底转换成了什么?
https://www.amazon.cn/s/ref=nb_sb_noss?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99& ...
- 前端使用CryptoJs类库进行sha-256、MD5加密
Google的加密库 CryptoJs(点此下载) 包含了很多常用的加解密方式,包括AES.DES.SHA-1.SHA-2.SHA256.MD5等. DES对称加密在之前的文章中也有介绍过,大传送门. ...
- webpy简单使用
#!/usr/bin/env python import web import pymysql.cursors # Connect to the database connection = pymys ...
- django admin 中实现word文档下载
为了实现此功能,需要用到的知识点: (1)django admin 自定义字段: 参考:http://www.cnblogs.com/wumingxiaoyao/p/6928297.html ...
- Python中的列表生成式和多层表达式
Python中的列表生成式和多层表达式 如何生成[1x1, 2x2, 3x3, ..., 10x10]的列表? L=[]; ,): L.append(x*x) print L print (" ...
- keepalived + nginx实现高可用
1. Keepalived介绍 Keepalived是一个基于VRRP协议来实现的服务高可用方案,可以利用其来避免IP单点故障,类似的工具还有heartbeat.corosync.pacemaker. ...
- AutoMapper差异内容备份
公司就得项目用的automapper 是 4.2.1 当时用的方法是:Mapper.CreateMap<source,sourceDto>(); 在最新版 6.0.1 中,这些个方法被删除 ...
- Phong Shading
[Phong Shading] The most serious problem with Gouraud shading occurs when specular highlights are fo ...