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
Post a Comment