首页 > [C#]判断是否是合法的IP4,IP6地址

[C#]判断是否是合法的IP4,IP6地址

判断一个字符串如果没有端口的话,利用IPAddress.TryParse很好判断,那么有端口怎么判断呢,正则表达式?还是其他方式?

关键代码:

        /// /// 判断是否是合法的IP4,IP6地址/// /// 需要判断的字符串/// 合法则返回host部分,若不合法则返回空 public static string GetIPAddress(string ip) { string _ipAddress = string.Empty; if (!string.IsNullOrEmpty(ip)) { UriHostNameType _hostType = Uri.CheckHostName(ip); if (_hostType == UriHostNameType.Unknown)//譬如 "192.168.1.1:8060"或者[2001:0DB8:02de::0e13]:9010 { Uri _url; if (Uri.TryCreate(string.Format("http://{0}", ip), UriKind.Absolute, out _url)) { _ipAddress = IPAddressTryParse(_url.Host); } } else if (_hostType == UriHostNameType.IPv4 || _hostType == UriHostNameType.IPv6) { _ipAddress = IPAddressTryParse(ip); } } return _ipAddress; } private static string IPAddressTryParse(string ip) { string _ipAddress = string.Empty; IPAddress _ipAdr; if (IPAddress.TryParse(ip, out _ipAdr)) { _ipAddress = _ipAdr.ToString(); } return _ipAddress; } 

单元测试:

        [TestMethod()]public void GetIPAddressTest(){string _ip4Address1 = "192.168.1.1";string _expected1 = "192.168.1.1"; string _actual1 = NetWorkToolV2.GetIPAddress(_ip4Address1); Assert.AreEqual(_expected1, _actual1); string _ip4Address2 = "192.168.1.1:8060"; string _expected2 = "192.168.1.1"; string _actual2 = NetWorkToolV2.GetIPAddress(_ip4Address2); Assert.AreEqual(_expected2, _actual2); string _ip6Address3 = "2001:0DB8:02de::0e13"; string _expected3 = "2001:DB8:2de::e13"; string _actual3 = NetWorkToolV2.GetIPAddress(_ip6Address3); Assert.AreEqual(_expected3, _actual3,true); string _ip6Address4 = "[2001:0DB8:2de::e13]:9010"; string _expected4 = "2001:DB8:2de::e13"; string _actual4 = NetWorkToolV2.GetIPAddress(_ip6Address4); Assert.AreEqual(_expected4, _actual4, true); string _ipAddress5 = "erroriptest"; string _expected5 = string.Empty; string _actual5 = NetWorkToolV2.GetIPAddress(_ipAddress5); Assert.AreEqual(_expected5, _actual5); } 

测试结果:

image

希望有所帮助!

转载于:https://www.cnblogs.com/hxgq/p/3889750.html

更多相关:

  • importjava.security.SecureRandom;importjavax.crypto.Cipher;importjavax.crypto.SecretKey;importjavax.crypto.SecretKeyFactory;importjavax.crypto.spec.DESKeySpec;//结果与DES算...

  • 题目:替换空格 请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 输入:s = "We are happy." 输出:"We%20are%20happy." 限制: 0 <= s 的长度 <= 10000 解题: 时间复杂度:O(n) 空间复杂度:O(n) class Solution { public:s...

  • 在C++11标准库中,string.h已经添加了to_string方法,方便从其他类型(如整形)快速转换成字面值。 例如: for (size_t i = 0; i < texArrSize; i++)RTX_Shader.SetInt(string("TexArr[") + to_string(i) + "]", 7 + i);...

  • Ubuntu 14.04安装并升级之后,变成楷体字体非常难看,我昨天搞了一晚上,终于理了个头绪,这里整理一下。 经过网上调研,大家的一致看法是,使用开源字体库文泉驿的微黑字体效果比较理想,甚至效果不输windows平台的雅黑字体。下面我打算微黑来美化Ubuntu 14.04. 1.安装文泉驿微黑字体库 sudo aptitude...

  • 使用string时发现了一些坑。 我们知道stl 容器并不是线程安全的,所以在使用它们的过程中往往需要一些同步机制来保证并发场景下的同步更新。 应该踩的坑还是一个不拉的踩了进去,所以还是记录一下吧。 string作为一个容器,随着我们的append 或者 针对string的+ 操作都会让string内部的数据域动态增加,而动态增加的...

  • 下面的源码给出了使用boost::asio进行域名解析的方法. //g++ -g resolver_demo.cpp -o resolver_demo -lboost_system -lpthread //#include #include #include

  • pc 端配置 点击pc端无线链接图标编辑链接以太网编辑IPv4设置方法:与其他计算机共享根据putty获取的动态ip使用ssh登录 解决 ip 无法登录问题 设置 pc 端 ip 和开发板 ip 在同一个网段 比如开发板 ip 是 10.42.0.123 可以设置自己机器的 ip 为 10.42.0.11 sudo ifcon...

  • 原文:TCP/IP 简介     第一节:TCP/IP 简介 第二节:TCP/IP 寻址 第三节:TCP/IP 协议 第四节:TCP/IP 邮件     TCP/IP 是用于因特网 (Internet) 的通信协议。     计算机通信协议 计算机通信协议是对那些计算机必须遵守以便彼此通信的规则的描述。     什么是 TC...

  • #保存一万条命令记录 sed -i 's/^HISTSIZE=1000/HISTSIZE=10000/g' /etc/profile#在/etc/profile的文件尾部添加如下行数配置信息 ######jiagu history xianshi######### USER_IP=`who -u am i 2>/dev/null |...

  • TCP/IP基础概念及通信过程举例   出现 上个世纪60年代,由于中央集中式网络的容灾性较弱,以美国国防部为中心的一家组织研究出分组交换网络。后来为了验证分组交换技术的实用性,ARPANET出现了,并且在3年内逐渐发展,由4个节点发展至34个节点。20世纪70年代前半叶,ARPANET一个机构研制出了TCP/IP,1982年具体规范...