Search This Blog

How to convert IP address to country name


Public Function Dotted2LongIP(DottedIP As String) As Variant
    ' errors will result in a zero value
    On Error Resume Next

    Dim i As Byte, pos As Integer
    Dim PrevPos As Integer, num As Integer

    ' string cruncher
    For i = 1 To 4
        ' Parse the position of the dot
        pos = InStr(PrevPos + 1, DottedIP, ".", 1)

        ' If its past the 4th dot then set pos to the last
        'position + 1

        If i = 4 Then pos = Len(DottedIP) + 1

       ' Parse the number from between the dots

        num = Int(Mid(DottedIP, PrevPos + 1, pos - PrevPos - 1))

        ' Set the previous dot position
        PrevPos = pos

        ' No dot value should ever be larger than 255
        ' Technically it is allowed to be over 255 -it just
        ' rolls over e.g.
         '256 => 0 -note the (4 - i) that's the
         'proper exponent for this calculation


      Dotted2LongIP = ((num Mod 256) * (256 ^ (4 - i))) + _
         Dotted2LongIP

    Next

End Function

' convert long IP to dotted notation

Public Function LongIP2Dotted(ByVal LongIP As Variant) As String

    On Error GoTo ExitFun

    If LongIP = "" Or LongIP < 0 Then Err.Raise vbObjectError + 1

    Dim i As Integer, num As Currency

    ' big number cruncher
    For i = 1 To 4
        ' break off individual dot values - math out the wazoo
        num = Int(LongIP / 256 ^ (4 - i))

        ' sets up the value for the next calculation
        LongIP = LongIP - (num * 256 ^ (4 - i))

        ' a generic error to flag the exception handler -
        'no dot value should ever be larger than 255
        ' technically it is allowed to be over 255
        ' but it's not possible from this calculation so
        'raise an error
        If num > 255 Then Err.Raise vbObjectError + 1

        ' string builder
        If i = 1 Then
            ' 1st dot value has no leading dot
            LongIP2Dotted = num
        Else
            ' other dot values have a leading dot
            LongIP2Dotted = LongIP2Dotted & "." & num
        End If
    Next

Exit Function
ExitFun:
     LongIP2Dotted = "0.0.0.0" '"Invalid Input" ' whatever
End Function

0 comments



Post a Comment