【问题标题】:How to see which IP address is "bigger"如何查看哪个IP地址“更大”
【发布时间】:2015-12-29 22:28:12
【问题描述】:

如果我有一个 IP 地址范围(例如 192.168.0.0 - 192.168.0.255)并且我正在计数(比如按随机数递增),我如何确定我是否超出了该范围?

【问题讨论】:

  • 感谢分享。即使这是问答环节,您能否将上述内容作为真正的问题而不是作为公告来介绍?
  • 当然。问答系统令人困惑。它不应该在一个屏幕上同时给我问题和答案框。我不知道该放什么(或不放什么)。
  • @user287848 当您ask a question 时,您的问题只有一个输入框。发布后,答案框会显示在您的帖子下方。
  • 请修改您的帖子以仅包含问题;您可以回答自己的问题(实际上我们鼓励您这样做!),但它也让其他人有机会提供答案。
  • 哦,你真的要我编一个问题,好像我有一个问题......似乎有点不必要。

标签: vb.net compare ip-address


【解决方案1】:
           '''<summary>Checks if IP Address A is larger than IP Address B. Returns True if A is larger, returns False if B is larger.</summary>

Private Function Check_If_Larger(ByVal IP_Address_A As Net.IPAddress, ByVal IP_Address_B As Net.IPAddress) As Boolean
    Dim IP_Address_A_Split() As String = IP_Address_A.ToString.Split("."c)
    Dim IP_Address_B_Split() As String = IP_Address_B.ToString.Split("."c)
    Dim IP_Address_A_Score As Integer = 0
    Dim IP_Address_B_Score As Integer = 0

    For i As Integer = 0 To IP_Address_A_Split.Length - 1
        If Convert.ToInt32(IP_Address_A_Split(i)) > Convert.ToInt32(IP_Address_B_Split(i)) Then
            IP_Address_A_Score += 1
        ElseIf Convert.ToInt32(IP_Address_B_Split(i)) > Convert.ToInt32(IP_Address_A_Split(i)) Then
            IP_Address_B_Score += 1
        End If
    Next
    If IP_Address_A_Score > IP_Address_B_Score Then
        Return True
    Else
        Return False
    End If
End Function

【讨论】:

    【解决方案2】:

    我相信 ip 地址中有一个值层次结构,从右到左变大。即最左边的值比最右边的值更重要,并且对 IP 地址的大小有更大的影响。例如。 192.168.1.0 大于 192.168.0.255

    根据等级分配分数会有所帮助。例如

    Private Function Max(A As String, B As String) As String
        Dim AA() As String = A.Split(".")
        Dim BB() As String = B.Split(".")
        Dim A_Score As Integer = 0
        Dim B_Score As Integer = 0
        For i = 0 To AA.Length - 1
            If AA(i) > BB(i) Then
                A_Score += AA.Length - i
            ElseIf BB(i) > AA(i) Then
                B_Score += BB.Length - i
            End If
        Next
        If A_Score > B_Score Then
            Return A
        ElseIf B_Score > A_Score Then
            Return B
        Else
            Return ""
        End If
    End Function
    

    【讨论】:

    • 正确。最初我试图制作一个评分系统。我休息了一下,回来了,忘记了,完成了剩下的。
    【解决方案3】:

    只需将 IP 地址转换为数字并比较数字即可。

        Dim ipmax As Net.IPAddress = Net.IPAddress.Parse("192.168.0.255")
        Dim ip1 As Net.IPAddress = Net.IPAddress.Parse("192.168.1.0")
    
        Dim ipmaxAsNum As UInt32 = BitConverter.ToUInt32(ipmax.GetAddressBytes.Reverse.ToArray, 0)
        Dim ip1AsNum As UInt32 = BitConverter.ToUInt32(ip1.GetAddressBytes.Reverse.ToArray, 0)
    
        If ip1AsNum > ipmaxAsNum Then
            Stop
        Else
            Stop
        End If
    

    【讨论】:

    • 呃,我怎么能忘记 BitConverter。这是最好的方法。
    猜你喜欢
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 2022-02-22
    • 1970-01-01
    • 2019-02-09
    • 2020-04-29
    • 2010-11-05
    • 2011-07-26
    相关资源
    最近更新 更多