此标记用于与Internet协议相关的问题。您可能希望使用标记[ip-address]代替此标记或与此标记结合使用。有关知识产权的问题,请改用[知识产权]。
有没有办法直接从 SELECT 查询中将 IP 与 IP+CIDR 进行匹配?
类似的东西 SELECT COUNT(*) AS c FROM BANS WHERE typeid=6 AND (SELECT ipaddr,cidr FROM BANS) MATCH AGAINST 'this_ip'; 因此,您不必首先从数据库中获取所有记录,然后逐一匹配它们......
对于我的网络应用程序,我想知道如何提高基于 IP 地址的国家/地区查找的准确性。有没有人尝试过并行使用多个 API 服务并进行投票,即如果 4 o...
我用Delphi开发了一个简单的网络服务器。它是一个独立的类型。客户端连接服务器时如何获取客户端IP地址? 我在单位看到这样一句话: FServer:TIdHTTPWebBrokerB...
我用Delphi开发了一个简单的网络服务器。它是一个独立的类型。客户端连接服务器时如何获取客户端IP地址? 我在单位看到这样一句话: FServer:TIdHTTPWebBrokerB...
我想获取我的个人热点的详细信息,例如IP地址、连接到我的热点的设备。更重要的是,我通过个人热点与其他设备通信的信息?
我有一个方法来验证参数IP地址。作为一个整体开发新手,我想知道是否有更好的方法来做到这一点。 /// /// 检查 IP 地址,将会... 我有一个方法来验证参数IP地址。作为一个整体的开发新手,我想知道是否有更好的方法来做到这一点。 /// <summary> /// Check IP Address, will accept 0.0.0.0 as a valid IP /// </summary> /// <param name="strIP"></param> /// <returns></returns> public bool CheckIPValid(string strIP) { // Split string by ".", check that array length is 3 char chrFullStop = '.'; string[] arrOctets = strIP.Split(chrFullStop); if (arrOctets.Length != 4) { return false; } // Check each substring checking that the int value is less than 255 and that is char[] length is !> 2 Int16 MAXVALUE = 255; Int32 temp; // Parse returns Int32 foreach (string strOctet in arrOctets) { if (strOctet.Length > 3) { return false; } temp = int.Parse(strOctet); if (temp > MAXVALUE) { return false; } } return true; } 它很简单(我可以做到),但它似乎可以解决问题。 IPAddress.TryParse方法的限制是它验证字符串是否可以转换为IP地址,因此如果提供像"5"这样的字符串值,它会认为它是"0.0.0.5"。 验证 IPv4 的另一种方法可能如下: public bool ValidateIPv4(string ipString) { if (String.IsNullOrWhiteSpace(ipString)) { return false; } string[] splitValues = ipString.Split('.'); if (splitValues.Length != 4) { return false; } byte tempForParsing; return splitValues.All(r => byte.TryParse(r, out tempForParsing)); } 可以这样测试: List<string> ipAddresses = new List<string> { "2", "1.2.3", "1.2.3.4", "255.256.267.300", "127.0.0.1", }; foreach (var ip in ipAddresses) { Console.WriteLine($"{ip} ==> {ValidateIPv4(ip)}"); } 输出将是: 2 ==> False 1.2.3 ==> False 1.2.3.4 ==> True 255.256.267.300 ==> False 127.0.0.1 ==> True 您也可以使用 IPAddress.TryParse 但它有局限性并且可能会导致错误的解析。 System.Net.IPAddress.TryParse方法 请注意,如果 TryParse 成功解析输入,则返回 true, 但这并不一定意味着生成的 IP 地址 是有效的。 请勿使用此方法来验证 IP 地址。 但这适用于包含至少三个点的普通字符串。比如: string addrString = "192.168.0.1"; IPAddress address; if (IPAddress.TryParse(addrString, out address)) { //Valid IP, with address containing the IP } else { //Invalid IP } 使用 IPAddress.TryParse,您可以检查是否存在三个点,然后调用 TryParse,如下所示: public static bool ValidateIPv4(string ipString) { if (ipString.Count(c => c == '.') != 3) return false; IPAddress address; return IPAddress.TryParse(ipString, out address); } 最好的正则表达式解决方案(对于 MVC DataAnnotations 很有用): ^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$ C# Regex.IsMatch(value, "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$") using System.Net; public static bool CheckIPValid(string strIP) { IPAddress result = null; return !String.IsNullOrEmpty(strIP) && IPAddress.TryParse(strIP, out result); } 你就完成了 编辑1 添加了一些额外的检查以防止抛出异常(这是昂贵的)。 PS 它不能处理 unicode。 编辑2 如果成功解析字符串,@StephenMurby IPAddress.TryParse 将返回 true。如果您检查该方法的文档,尽管它会在两种情况下抛出异常。 字符串为空。 字符串包含 unicode 字符。 由你决定(设计决策)是否要抛出异常或返回 false。当谈到解析时,我通常更喜欢返回 false 而不是异常(假设这是不保证正确的输入)。 分解 return 语句,我是说, 字符串不为空(也不为空,无论如何都不会解析)AND IP地址解析正确。 请记住,C# 布尔表达式是惰性求值,因此如果字符串为 null 或空,CLR 甚至不会尝试解析该字符串。 关于缺失的如果,你可以做类似的事情, if (IP.TryParse(strIP, out result) { return true; } 但你真正做的只是说如果某事为真,则返回 true。直接返回表达式会更容易。 无需使用 IPAddress 类并根据字节进行验证,这比 Int 好得多<256 approach. public Boolean CheckIPValid(String strIP) { // Split string by ".", check that array length is 4 string[] arrOctets = strIP.Split('.'); if (arrOctets.Length != 4) return false; //Check each substring checking that parses to byte byte obyte = 0; foreach (string strOctet in arrOctets) if (!byte.TryParse(strOctet, out obyte)) return false; return true; } 框架提供了 IPAddress 类,该类又为您提供了 Parse 和 TryParse 方法。 // myAddress is a System.Net.IPAddress instance if (System.Net.IPAddress.TryParse(strIP , out myAddress)) // IP is valid else // IP isn't valid 令人惊讶的是没有人提供正则表达式解决方案。您所需要的只是包含 System.Text.RegularExpressions。为了实际代码和本示例的可读性,我总是将正则表达式模式分块到字符串数组中,然后加入它。 // Any IP Address var Value = "192.168.0.55"; var Pattern = new string[] { "^", // Start of string @"([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.", // Between 000 and 255 and "." @"([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.", @"([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.", @"([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])", // Same as before, no period "$", // End of string }; // Evaluates to true var Match = Regex.IsMatch(Value, string.Join(string.Empty, Pattern)); 您可以这样处理它是 ipv4 或 ipv6: public static string CheckIPValid(string strIP) { //IPAddress result = null; //return !String.IsNullOrEmpty(strIP) && IPAddress.TryParse(strIP, out result); IPAddress address; if (IPAddress.TryParse(strIP, out address)) { switch (address.AddressFamily) { case System.Net.Sockets.AddressFamily.InterNetwork: // we have IPv4 return "ipv4"; //break; case System.Net.Sockets.AddressFamily.InterNetworkV6: // we have IPv6 return "ipv6"; //break; default: // umm... yeah... I'm going to need to take your red packet and... return null; //break; } } return null; } 尝试一下: private bool IsValidIP(String ip) { try { if (ip == null || ip.Length == 0) { return false; } String[] parts = ip.Split(new[] { "." }, StringSplitOptions.None); if (parts.Length != 4) { return false; } foreach (String s in parts) { int i = Int32.Parse(s); if ((i < 0) || (i > 255)) { return false; } } if (ip.EndsWith(".")) { return false; } return true; } catch (Exception e) { return false; } } 如果您只想检查是否有效,只需: bool isValid = IPAddress.TryParse(stringIP, out IPAddress _); 即使高于255并且有点也有效,所以不需要检查。 要验证 IP 地址,请使用以下包 套餐:- using System.Net; //To use IPAddress, inbuilt functionality using System.Net.Sockets; //To access AddressFamily, using System.Text.RegularExpression; //For Regex.IsMatch() 方法:- public bool ValidIPAddress(string IP) { //Validate IP Address , neither IPV4, or V6 if (IPAddress.TryParse(IP, out var address) == false) return false; //check for IPV6 if (address.AddressFamily == AddressFamily.InterNetworkV6) { if (IP.IndexOf("::") > -1) return true; return false; } //check for IPV4 else { //Ipv4 address shouldn't start with 0 eg..it is invalid 0XX.0XX.0XX.0XX if (Regex.IsMatch(IP, @"(^0\d|\.0\d)")) return false; else if (IP.Count(c => c == '.') != 3) return false; else return true; } } 如果需要,请检查以下链接:- https://lncharan.blogspot.com/2020/09/validate-ip-address-in-c.html 有一个简单的方法可以做到这一点,但它需要互联网连接来检查 IP 或主机名: using System; using System.Net; var dnsAddress = /// try { // IP like 8.8.8.8 if (IPAddress.TryParse(dnsAddress, out var ipAddress) && Dns.GetHostAddresses(ipAddress.ToString()).Length >= 1) { return true; } // Hostname like smtp.gmail.com if (Dns.GetHostEntry(dnsAddress).AddressList.Length >= 1) { return true; } return false; } catch (Exception exception) when ( exception is ArgumentNullException || exception is ArgumentOutOfRangeException || exception is System.Net.Sockets.SocketException || exception is ArgumentException ) { // Write log message, if necessary return false; } //To accept values where the ip does not contain zero in the first position of the IPv4 in C# code /// <summary> /// Check IP Address, will accept [255-1].0.0.0 as a valid IP /// </summary> /// <param name="strIP"></param> /// <returns></returns> public bool CheckIPv4Valid(string strIPv4) { // Split string by ".", check that array length is 3 char chrFullStop = '.'; string[] arrOctets = strIPv4.Split(chrFullStop); if (arrOctets.Length != 4) { return false; } // Check each substring checking that the int value is less than 255 and that is char[] length is !> 2 Int16 MAXVALUE = 255; Int32 tempNumber; // Parse returns Int32 #region New code Int32 tempNumberCero; tempNumberCero = int.Parse(arrOctets[0]); if (tempNumberCero <= 0) { return false; } #endregion foreach (string strOctet in arrOctets) { if (strOctet.Length > 3) { return false; } tempNumber = int.Parse(strOctet); if ((tempNumber > MAXVALUE)) { return false; } } return true; } 我想与您分享我的解决方案。 它基于正则表达式,灵感来自 Oreilly 正则表达式食谱。 public class ValidAndCleanedIP { public bool IsValid { get; set; } public string IP { get; set; } } public ValidAndCleanedIP ValidAndCleanIP(string ip) { // ^(?!0)(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) (?!0) check if the numeric part starts not with zero, optional you can use this pattern (25[0-5]|2[0-4][0-9]|[1][0-9][0-9]|[1][0-9]|[1-9]) // there is no check for leading zero becaus there is it possible to order the IP Addresses string pattern = "" + "^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\." + "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\." + "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\." + "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"; Regex regex = new Regex(pattern); bool test = regex.IsMatch(ip); ValidAndCleanedIP validAndCleanedIP = new ValidAndCleanedIP(); validAndCleanedIP.IsValid = test; if (test) { //version removes leading zeros after the dots validAndCleanedIP.IP = new Version(ip).ToString(); } else { validAndCleanedIP.IP = string.Empty; } return validAndCleanedIP; } 或更简单的解决方案 public bool Is_Valid_IP(string ip) { // (?!0) check if the numeric part starts not with zero string pattern = "" + "^(?!0)(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\." + "(?!0)(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\." + "(?!0)(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\." + "(?!0)(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"; Regex regex = new Regex(pattern); return regex.IsMatch(ip); } 大家美好的一天 哇! 对于简单的一行代码,答案的内容非常庞大。 看这个! using System.Text.RegularExpressions; namespace Helper; public class IpHelper { public static bool IsIpValid(string ip) => new Regex("^(?!0)(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(?!0)(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(?!0)(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(?!0)(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$") .IsMatch(ip); } 用途: IpHelper.IsIpValid("192.168.1.1"): 利用上面的一些答案,以及 Copilot 的一些帮助(第 15 个检查): public static bool ValidateIPv4(string ipString) { // 15 is the max length of an IP address (xxx.xxx.xxx.xxx) if (!string.IsNullOrWhiteSpace(ipString) && ipString.Length <= 15) { if (ipString.Count(c => c == '.') == 4) { if (IPAddress.TryParse(ipString, out IPAddress? address)) { if (address.ToString() == ipString) { return true; } } } } return false; }
我做了一个非常简单的端口扫描仪,但它运行太慢,所以我正在寻找一种方法让它扫描得更快。这是我的代码: public boolean portIsOpen(String ip, int port, int timeout) { 尝试 { ...
我需要找到一种方法来查找iOS中我的个人热点的子网掩码和广播地址。 如果设备连接到 WiFi,我将使用以下方法查找设备的 IP 地址。布...
我需要找到连接到iPhone个人热点的设备的IP。 我的解决方案是检查每个IP(从172.20.10.2到172.20.10.255),它返回带有某些单词的html。 因为设备退货...
我想获取Android设备通过WiFi连接的WiFi热点(从另一台计算机)的IP地址,而不是Android的本地IP地址。我在真实设备中运行应用程序。 我可以扫描所有 WiFi...
我对网络概念不太了解,试图以编程方式获取面向公众的IP地址(首选powershell) 尝试这些不同的网站 https://www.whatismyip.com/ # 🌟 哦...
为什么只有我的电脑出现“无法访问此网站 - 拒绝连接”的情况,而其他设备却可以正常访问我的网站?
我在 IONOS 上购买了域名。我一切正常,但在某些时候我必须做了一些事情,因为现在如果我尝试从我的电脑访问我的网站,我会得到: 但我可以从以下位置访问我的网站...
Cisco 路由器上的 IP、静态路由、SNAT 和 DNAT 配置
此处为场景和 ip 示例 我在 GNS3 中配置网络场景时遇到问题。这是意图的声明: ” a) 首先,你应该考虑现有的网络...
我正在使用 getaddrinfo 返回 URL 输入的 IP 地址。 目前它返回 8 个 IP 地址,但我相信还有更多。 如果我再次调用它,它只会返回完全相同的地址...
将 IPv6 转换为 long 并将 long 转换为 IPv6
我应该如何执行从 IPv6 到 long 的转换,反之亦然? 到目前为止我有: 公共静态长 IPToLong(String addr) { String[] addrArray = addr.split("\."); 隆...
Android NetUtils Wrapper:如何添加 SELinux 策略以使用 system/bin/ip-wrapper-1.0
我想在我正在开发的 Android 应用程序上路由流量,尽管我在访问内核上的 ip 表时遇到问题。我不确定这对于正常人来说是否应该可以访问......
我有一个 docker compose 文件,如下所示: 版本:'3' 服务: foobar_dev: 图片:foobar/foobar:最新 环境: FOOBAR_DIST_MODE:“主” FOOBAR_DIST_MASTER...
我想通过代码获取当前运行的Android模拟器的IP地址。 怎么才能实现呢?
我的 ec2 ipv4 公共 IP 地址会自动更改为新的 IP 地址,现在当我登录时,它会在控制台中显示 POST http://13.211.13.11:8080/login net::ERR_TIMED_OUT 然后(异步) (匿名...